过滤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
大家可以根据上面的思路进行扩展丰富哦!