2013年7月9日星期二

Linux 防御CC攻击定时shell脚本

什么是CC攻击

CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

 

编写linux shell脚本定时运行监测并防御cc攻击 #!/bin/bash

cur=`date +%H%M%S`

becur=`date -d "1 minute ago" +%H%M%S`

badip=`tail -n 10000 /home/www.fengxy.org/log/access.log | egrep -v ".(gif|jpg|jpeg|png|css|js)" | awk -v a="$becur" -v b="$cur" -F [' ':] '{t=$5$6$7;if (t>=a && t<=b) 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

fi

done

fi

将此代码保存为ban.sh,加入cronjob使每分钟执行一次。

此脚本的作用是:利用iptables屏蔽每分钟访问页面超过20的IP,这些页面已经排除图片,css,js等静态文件。

第二个脚本是通过在日志中查找cc攻击的特征进行屏蔽。

#!/bin/bash

keyword="cc-atack"

badip=`tail -n 5000 /home/www.fengxy.org/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

 

第一个脚本是通过查找日志中访问次数过多的ip,并用iptables屏蔽。

keyword则是日志中cc的特征,替换成有效的即可。

没有评论:

发表评论