Linux简单处理CC攻击shell脚本

[ 2013-09-09 17:07:10 | 作者: admin ]
字号: | |
第一个脚本是通过查找日志中访问次数过多的ip,并用iptables屏蔽,600秒解封。
         #!/bin/bash
         btime=600
         becur=`date -d "1 minute ago" +%H%M%S`
         badip=`tac /home/www.centos.bz/log/access.log | awk -v a="$becur" -F [' ':] '{t=$5$6$7;if (t>=a){ print} else {exit;}' | egrep -v "\.(gif|jpg|jpeg|png|css|js)" | awk '{print $1}' | sort | uniq -c | awk '{if ($1>=20) print $2}}'`
         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
         UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX`
         echo '#!/bin/sh' > $UNBAN_SCRIPT
         echo "sleep $btime" >> $UNBAN_SCRIPT
         echo "/sbin/iptables -D INPUT -s $ip -j DROP" >> $UNBAN_SCRIPT
         echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPT
         . $UNBAN_SCRIPT &
         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 '{print $1}' | sort | uniq -c | sort -nr | awk '{print $2}'`
         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的特征,替换成有效的即可。
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2126

这篇日志没有评论。

此日志不可发表评论。