防范ssh攻击的一个脚本
防范ssh攻击的一个脚本
使用脚本统计系统的secure记录,如下:
#!/bin/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;}’`
echo $SCANNER
for i in $SCANNER
do
# 取认证失败次数
NUM=`echo $i|awk -F= ‘{print $1}’`
# 取其 IP 地址
IP=`echo $i|awk -F= ‘{print $2}’`
echo $NUM
echo $IP
# 若其在失败次数超过 2 次且之前没有被阻断过,那么添加一条策略将其阻断,并记录日志
if [ $NUM -gt 2 ] && [ -z "`iptables -vnL INPUT|grep $IP`" ]
then
iptables -I INPUT -s $IP -m state –state NEW,RELATED,ESTABLISHED -j DROP
echo “`date` $IP($NUM)” >> /var/log/scanner.log
fi
done
#执行方式
#chmod 755 /root/jinzhiip.sh
#vi /etc/crontab
#*/1 * * * * root /root/jinzhiip.sh
#用 crond 来运行,1 分钟运行 1 次
#运行效果
#iptables -vnL INPUT
#查看日志#cat /var/log/scanner.log
#清除所有拦截
#iptables -F
也可以采用iptables的连接计数器:
#同一个 IP 来源在一个小时内只允许建立(或尝试)三次 SSH 联机
/usr/local/sbin/iptables -A INPUT -p tcp –dport 22 –syn -m recent –rcheck –seconds 3600 –hitcount 3 –rttl –name SSH –rsource -j DROP
/usr/local/sbin/iptables -A INPUT -p tcp –dport 22 –syn -m recent –set –name SSH –rsource -j ACCEPT
/usr/local/sbin/iptables -A INPUT -p tcp –dport 22 -j ACCEPT
最后更新:2017-01-04 22:34:31