首先修改ssh端口。
创建脚本pb_ssh.sh
#! /bin/bash #crontab 每隔1分钟执行一次 #*/1 * * * * /root/pb_ssh.sh # 获取前 1 分钟内的 secure 记录,统计 ssh 认证失败的 IP 和其 失败次数 SCANNER=`grep "$(date -d -1min|awk '{print substr($0,10,7)}')" /var/log/secure|awk '/Failed/{print $(NF-3)}'|awk -F":" '{print $NF}'|grep -v from|sort|uniq -c|awk '{print $1"="$2;}'` for i in $SCANNER do # 取认证失败次数 NUM=`echo $i|awk -F= '{print $1}'` # 取其 IP 地址 IP=`echo $i|awk -F= '{print $2}'` # 若其在失败次数超过 5 次且之前没有被阻断过,那么添加一条策略将其阻断,并记录日志 if [ $NUM -gt 5 ] && [ -z "`iptables -vnL INPUT|grep $IP`" ] then /sbin/iptables -I INPUT -s $IP -j DROP echo "`date` $IP($NUM)" >> /var/log/scanner.log fi done |
恢复被屏蔽的IP,从另外一台服务器登录,重启防火墙服务即可
iptables -L
iptables -vnL INPUT
配置步骤
su - root
chown root.root pb_ssh.sh
chmod 755 pb_ssh.sh
#crontab 每隔1分钟执行一次 防止ssh扫描
*/1 * * * * /root/pb_ssh.sh
或者使用denyhosts软件。