iptabes ipset 防止ssh暴力破解
iptabes ipset 防止ssh暴力破解
解决思路
由于/var/log/secure或/var/log/auth.log日志文件会记录ssh登录失败信息,利用shell脚本统计出其中访问失败且比较频繁的IP,并定义一个阀值为5,如果超过这个阀值并对比ipset列表中有没有这条IP的记录,如果没有则添加相应ipset记录,阻止此IP进行SSH登录,每隔一段时间进行一次检查,如果下次排查的某IP次数又大于10,并且检查它在不在我们的防火墙列表中,如果在的话就无视过去;如果不在,就继续添加进iptables中。然后我们定义一个计划任务,让每半小时检测一次。
创建ipset 集合
ipset create ssh_failed_ip hash:net
创建iptables拦截命令
iptables -I INPUT -p tcp -m set --match-set ssh_failed_ip src -j DROP
撰写脚本
vim /opt/shell/ipset_iptables_ssh_failed_ip.sh
#!/bin/bash
SCANIP=`grep "Faieled" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | awk '{print $1"="$2;}'`
for i in $SCANIP
do
NUMBER=`echo $i | awk -F= '{print $1}'`
SCANIP=`echo $i | awk -F= '{print $2}'`
echo "$NUMBER($SCANIP)"
if [ $NUMBER -gt 5 ] && [ -z "`ipset list ssh_failed_ip | grep $SCANIP`" ]
then
ipset -A ssh_failed_ip $SCANIP
echo "`date` $SCANIP($NUMBER)" >> /var/log/scanip.log
fi
done
撰写定时任务
*/30 * * * * /opt/shell/ipset_iptables_ssh_failed_ip.sh
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭