上篇的代码感觉还不过瘾,于是又加上了apache中error.log日志的内容。
#!/bin/sh
ufwDeny(){
FILE="/var/log/ufw.log"
#MAX=15 这里的阈值设置的是当天12个小时被防火墙阻拦超过15次的IP
IP=$(sudo awk '{now=strftime("%d");now=now+0;if($2==now)S[$12]++}END{for(k in S)if(S[k]>15)print k}' $FILE|sed 's#SRC=##g')
for j in $IP
do
sudo ufw deny from $j to any
done
}
accessError(){
FILE="/var/log/apache2/error.log"
#MAX=10 这里的阈值设置的是当天12个小时apache访问报错的日志信息中大于10次的ip
IP=$(sudo awk '{S[$10]++}END{for(k in S)if(S[k]>10)print k}' $FILE|awk -F":" '{print $1}'|uniq)
for j in $IP
do
sudo ufw deny from $j to any
done
}
main(){
while true
do
ufwDeny
accessError
sleep 12h #你们可以吧sleep的休眠时间设小一点,这样检查就频繁一些。现在是12小时。
done
}
main 2>&1 &