作者:夜翊灬瞳_398 | 来源:互联网 | 2017-07-01 19:32
第一个脚本是通过查找日志中访问次数过多的ip,并用iptables屏蔽。#!/bin/bashcur=`date+%H%M%S`becur=`date-d"1minuteago"+%H%M%S`badip=`tail-n10000/home/www.centos.bz/log/access.log|egrep-v&
第一个脚本是通过查找日志中访问次数过多的ip,并用iptables屏蔽。
#!/bin/bash
cur=`date +%H%M%S`
becur=`date -d "1 minute ago" +%H%M%S`
badip=`tail -n 10000 /home/www.centos.bz/log/access.log | egrep -v "\.(gif|jpg|jpeg|png|css|js)" | awk -v a="$becur" -v b="$cur" -F [&#39; &#39;:] &#39;{t=$5$6$7;if (t>=a && t<=b) print $1}&#39; | sort | uniq -c | awk &#39;{if ($1>=20) print $2}&#39;`
if [ ! -z "$badip" ];then
for ip in $badip;
do
if test -z "`/sbin/iptables -nL | grep $ip`";then
/sbin/iptables -I INPUT -s $ip -j DROP
fi
done
fi
将此代码保存为ban.sh,加入cronjob使每分钟执行一次。
此脚本的作用是:利用iptables屏蔽每分钟访问页面超过20的IP,这些页面已经排除图片,css,js等静态文件。
第二个脚本是通过在日志中查找cc攻击的特征进行屏蔽。
#!/bin/bash
keyword="cc-atack"
badip=`tail -n 5000 /home/www.centos.bz/log/access.log | grep "$keyword" | awk &#39;{print $1}&#39; | sort | uniq -c | sort -nr | awk &#39;{print $2}&#39;`
if [ ! -z "$badip" ];then
for ip in $badip;
do
if test -z "`/sbin/iptables -nL | grep $ip`";then
/sbin/iptables -I INPUT -s $ip -j DROP
fi
done
fi
keyword则是日志中cc的特征,替换成有效的即可。