监控访问日志使用iptables禁止IP访问

因为应用的漏洞,导致有用户频繁请求漏洞页面,增加服务器的开销甚至出现无法提供服务。所以想编写一个脚本,监控apache日志,对请求量不符合正常场景的用户,通过iptables封掉IP。

实现规则:
1、shell脚本监控apache日志,通过iptables封堵用户IP,每5秒执行一次
2、iptables每30分钟清空一次iptables规则



#! /bin/bash
iptables=/sbin/iptables
blacklist() {
DAY=`date +"%y%m%d"`
TIME=`date +"%Y%m%d %H:%M:%S"`
http_who()
{
        tail -1000 /usr/local/apache/logs/bvc-access-${DAY}.log|awk '{name[$1]++ }; END {for (count in name) print count,name[count]}' |sort -k2 -rn|awk '{print $1"="$2;}'
}
for _un in $(http_who)
do
        IP=`echo $_un|gawk -F'=' '{print $1}'`
        NUM=`echo $_un|awk -F'=' '{print $2}'`
        if [ $NUM -gt 100 ] && [ -z "`iptables -L -n|grep "$IP"`" ]
        then
                iptables -I RH-Firewall-1-INPUT -p tcp -m tcp -s "$IP" -j DROP
                echo "$TIME WEB $IP NUM: $NUM" >> /var/log/fuck.log
        fi
done
}
while [ : ]
do
blacklist
#tail -n 5 /var/log/fuck.log
#echo ""
sleep 5
done


你可能感兴趣的:(服务器,用户,local,监控)