#RePost #Script
因为虚拟机之前已部署fail2ban,但是存在漏封禁的情况,查看日志发现一些漏扫啥的会几分钟登录一次或者就十几分钟才尝试1-2次导致漏封情况。
那就继续每天定时再执行一次脚本再去把漏封的封禁掉
脚本
该脚本的作用是监控IP登录失败次数,如果某个IP的登录失败次数超过设定的最大次数,则阻止该IP的进一步登录尝试。
通过iptables防火墙阻止连接,当一个IP尝试登录次数超过登录失败次数,iptables会阻止来自该IP的所有连接。
再使用crontab 每日/每几天定时执行一次即可。
因为虚拟机之前已部署fail2ban,但是存在漏封禁的情况,查看日志发现一些漏扫啥的会几分钟登录一次或者就十几分钟才尝试1-2次导致漏封情况。
那就继续每天定时再执行一次脚本再去把漏封的封禁掉
脚本
该脚本的作用是监控IP登录失败次数,如果某个IP的登录失败次数超过设定的最大次数,则阻止该IP的进一步登录尝试。
通过iptables防火墙阻止连接,当一个IP尝试登录次数超过登录失败次数,iptables会阻止来自该IP的所有连接。
#!/bin/bash function check(){ # 设置最大失败次数 MAX_FREQUENCY=10 # 获取所有登录失败的IP并统计次数 IP_COUNT=$(lastb | awk '{print $3}' | egrep "[1-9]+" | sort | uniq -c | awk '$1 >= 'MAX_FREQUENCY' {print $2}') # 遍历所有登录失败次数超过阈值的IP并将其阻止 for IP in ${IP_COUNT} do # 检查IP是否已经在iptables策略中 if iptables -xvnL | grep $IP 1>/dev/null; then echo "$IP is already exist iptables." else echo "`date +"%F %H:%M:%S"` Blocking $IP ..." iptables -A INPUT -s $IP -j DROP fi done } check # 执行完后清空之前登录记录。 date_time=`date +"%Y%m%d%H%M%S"` mv /var/log/btmp /var/log/btmp.$date_time echo > /var/log/btmp
再使用crontab 每日/每几天定时执行一次即可。