暴力破解就屏蔽攻击者IP
SSH登陆信息主要是存放在/var/log/secure日志,所以暴力破解,登际失败的都在这里。
动手写个脚本:
#!/bin/bash
LIMIT=30 #这边可以自定义限制次数
LOGFILE=”/var/log/block_ssh.log” #日志路径
TIME=$(date ‘+%b %e %H’) #example: Apr 11 11
BLOCK_IP=$(grep “$TIME” /var/log/secure|grep Failed|awk ‘{print $(NF-3)}’|sort|uniq -c|awk ‘$1>”$LIMIT”{print $1″:”$2}’) #将1小时内ssh认证失败超过30次的ip抓出来
for i in $BLOCK_IP
do
IP=$(echo $i|awk -F: ‘{print $2}’)
iptables-save|grep INPUT|grep DROP|grep $IP>/dev/null #先判断下是否已经被屏蔽
if [ $? -gt 0 ];then
iptables -A INPUT -s $IP -p tcp –dport 22 -j DROP #屏蔽ip
NOW=$(date ‘+%Y-%m-%d %H:%M’)
echo -e “$NOW : $IP”>>${LOGFILE}
fi
done
基本思路是统计出1小时ssh认证失败超过30次的IP,如果没屏蔽过的就将其加入iptables屏蔽。
这里就不设置白名单了,正常ip在一个小时内不会有那么多的Failed认证。
给予脚本执行权限:
chmod 755 /root/block_ssh.sh
最后加入到crontab定时任务,10分钟运行一次:
echo “*/10 * * * * root /root/block_ssh.sh” >>/etc/crontab