防御CC攻击

防御CC攻击

什么是CC攻击:

攻击者借助代理服务器生成指向受害主机的合法请求,实现DOS和伪装就叫:cc(Challenge Collapsar)。

CC攻击的原理:

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

CC攻击的症状:

CC攻击有一定的隐蔽性,一般服务器受到CC攻击的时候,网站会时不时无法打开,CPU的使用率和并发连接数会很高,导致网站出现”抽风“的现象。

如何检测:

1.查看CPU的使用率:



top

2.查看Apache的并发连接数:



ps aux | grep httpd | wc -l

如果CPU的使用率接近100%,并且Apache的并发连接数很高,一般就可以断定受到CC攻击了。

如何防御:

1.通过分析Apache访问日志,先找到被CC攻击的页面



cat access.log | tail -n 10000 | egrep -v ".(gif|jpg|jpeg|png|css|js|ico)" | awk '{print $7}' | sort | uniq -c | sort -nr | head -20

2.然后在页面的头部添加代理检测的语句,可以屏蔽大部分的代理访问:



if(empty($_SERVER['HTTP_VIA']) and empty($_SERVER['HTTP_X_FORWARDED_FOR']) and empty($_SERVER['HTTP_XROXY_CONNECTION']) and empty($_SERVER['HTTP_PRAGMA']) ){
 // 没有使用代理
}else{
 exit('禁止使用代理访问');
}

3.通过分析Apache日志,封锁一些异常频繁访问服务器的IP地址:



#!/bin/bash
cur=`date +%H%M%S`
becur=`date -d "1 minute ago" +%H%M%S`
badip=`tail -n 10000 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

把以上脚本里的access.log修改为apache访问日志的路径,然后保存为脚本,用crontab每10分钟执行一次(或者更短的时间)。

注意:此方法需要服务器开启iptables防火墙服务

发表评论