分享一个自制脚本,自动使用iptables和lastb封禁近1天尝试ssh登录错误的ip top5,其大多为ssh爆破轮询,来自美丽之国

#!/bin/bash

BANNED_IPS=/tmp/banned.ips
TO_BANNED_IPS=/tmp/to_banned.ips

iptables -nL INPUT | awk 'NR>2 {print $4}' | uniq >${BANNED_IPS}
lastb -s $(date +"%Y-%m-%d" -d "-1 days") | awk '{print $3}' | sort | uniq -c | sort -rn | head -5 | awk '{if ($1 >= 20) {print $2} }' >${TO_BANNED_IPS}

for ip in $(cat ${TO_BANNED_IPS}); do
    grep ${ip} ${BANNED_IPS} >/dev/null
    if [ $? -gt 0 ]; then
        iptables -I INPUT -s ${ip} -j REJECT
    fi
done

使用crontab设置为定时任务即可

$ crontab -e
0 * * * * sudo bash /root/devops/ban_ssh_loginfailed.sh