过滤nginx日志异常频率访问的IP,如果发现高频率访问量的ip,将自动对其进行封杀,如IP在半小时后恢复正常,则解除封禁
#!/bin/bash logfile=/data/nginx/log/access.log d1=`date -d "-1 minute" +%H%M` d2=`date +%M` ipt=/sbin/iptables ips=/data/tmp/ips.txt ban() { grep '$d1:' $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n > $ips for i in `awk '$1>100 {print $2}' $ips` do $ipt -I INPUT -p tcp --dport 80 -s $i -j REJECT echo "`date +%F-%T` $i" >> /tmp/badip.log done } unban() { for a in `$ipt -nvL INPUT --line-numbers |grep '0.0.0.0/0'|awk '$2<10 {print $1}'|sort -nr` do $ipt -D INPUT $a done $ipt -Z } if [ $d2 -eq "00" ] || [ $d2 -eq "30" ]; then unban ban else ban fi
大家可以根据上面的思路进行扩展丰富哦!
如果对你有所帮助,还请给波哥点赞、分享哦!~