额 早就想写这么个脚本了。这次有点时间写了一下,借助shell下的工具和python还是可以很快写好。
发现总有人爆破我ssh密码,我修改了端口还是跑。是盯上了还是怎么。如果关闭密码登录会好,但是每次换电脑就要添加公key,感觉还是密码方便一点。
# coding: utf-8import osimport timedef lo(): ban_ip_list = [] output = os.popen("""grep "Failed password for root" /var/log/auth.log | awk {'print $11'} | uniq -c | sort -rn""") for l in output.readlines(): count, ip = l.split() if int(count) > 5 and ip not in ban_ip_list: ban_ip_list.append(ip) print ban_ip_list iptables_ban_ip_list = [] output = os.popen("""iptables -L -n|grep "DROP" | awk {'print $4'} """) for l in output.readlines(): iptables_ban_ip_list.append(l.split()[0]) print iptables_ban_ip_list iplist = list(set(ban_ip_list) - set(iptables_ban_ip_list)) print iplist for ip in iplist: os.popen("""iptables -I INPUT -s {} -j DROP """.format(ip))#iptables -L -n --line-numbers#iptables -D INPUT 8while 1: lo() time.sleep(1) break
代码还可以改进,比如后边set了 前边就不用判断ip在不在列表里了。我是用服务器上另一个脚本用vim复制后按思路写的。功能跑通就不想改了。加入crontab搞定。以后有时间改成只屏蔽10分钟,这样实用性就强一点了。想法就是要记录下错误时间,错误时间加十分钟就是解禁时间。
原文地址:服务器ssh密码验证错误次数太多进行iptables屏蔽, 感谢原作者分享。 要知道,当你一直在担心错过了什么的时候,