本文真的很好,我现在的防御方法都来自于此文,再次我转载这位高手的文章来共享给大家

CC攻击可以归 为DDoS攻击的一种。他们之间都原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击。CC攻击又可分为代理CC攻击,和肉鸡 CC攻击。代理CC攻击是黑客借助代理服务器生成指向受害主机的合法网页请求,实现DOS,和伪装就叫:cc(ChallengeCollapsar)。 而肉鸡CC攻击是黑客使用CC攻击软件,控制大量肉鸡,发动攻击,相比来后者比前者更难防御。因为肉鸡可以模拟正常用户访问网站的请求。伪造成合法数据 包。防御CC攻击可以通过多种方法,禁止网站代理访问,尽量将网站做成静态页面,限制连接数量等。

  Nginx是一款轻量级的Web服务器,由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引Rambler使用。 其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网站服务器中表现较好。

  Nginx虽然可以比Apache处理更大的连接数,但是HTTP GET FLOOD针对的不仅仅是WEB服务器,还有数据库服务器。大量HTTP请求产生了大量的数据库查询,可以在几秒之内使数据库停止响应,系统负载升高,最终导致服务器当机。

   本文主要介绍Centos+Nginx下如何快速有效得防御CC攻击。至于如何安装Nginx就不详细介绍了,有兴趣的读者可以在Nginx官方网站 (http://www.nginx.org/)下载源代码进行编译。如果你使用的是Centos5,也可以使用rpm包进行安装(http: //centos.alt.ru/repository/centos/5/i386/nginx-stable- 0.7.65-1.el5.i386.rpm)。

一、主动抑制方法

  为了让Nginx支持更多的并发连接数,根据实际 情况对工作线程数和每个工作线程支持的最大连接数进行调整。例如设置"worker_processes 10"和"worker_connections 1024",那这台服务器支持的最大连接数就是10×1024=10240。

worker_processes 10;
events {
use epoll;
worker_connections 10240;
}

  Nginx 0.7开始提供了2个限制用户连接的模块:NginxHttpLimitZoneModule和NginxHttpLimitReqModule。NginxHttpLimitZoneModule可以根据条件进行并发连接数控制。

例如可以定义以下代码

http {
limit_zone   my_zone  $binary_remote_addr  10m;
server {
location /somedir/ {
limit_conn   my_zone  1;
}
}
}

   其中"limit_zone my_zone $binary_remote_addr 10m"的意思是定义一个名称为my_zone的存储区域、my_zone中的内容为远程IP地址、my_zone的大小为10M;"location /somedir/"的意思是针对somedir目录应用规则;"limit_conn my_zone 1"的意思是针对上面定义的my_zone记录区记录的IP地址在指定的目录中只能建立一个连接。

  Nginx Http Limit Req Module可以根据条件进行请求频率的控制。例如可以定义以下代码:

http {
limit_req_zone  $binary_remote_addr  zone=my_req_zone:10m   rate=1r/s;
...
server {
...
location /somedir/ {
limit_req_zone   zone= my_req_zone  burst=2;
}

   其中"limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s"的意思是定义一个名称为my_req_zone的存储区域,my_req_zone内容为远程IP地址,my_req_zone大小 为10M,my_req_zone中的平均请求速率只能为1个每秒;"location /somedir/"的意思是针对somedir目录应用规则;"limit_req_zone zone= my_req_zone burst=2"的意思是针对上面定义的my_req_zone记录区记录的IP地址在请求指定的目录中的内容时最高2个每秒的突发请求速率。

  当有连接触发上诉规则时,Nginx会报"503 Service Temporarily Unavailable"的错误,停止用户请求。返回一个503,对服务器来说影响不大,只占用一个nginx的线程而已,相对来说还是很划算的。

   为了测试效果,我将以上代码放入Nginx的配置文件,并编写了一个php文件显示phpinfo;另外还写了一个html文件,其中嵌入了多个 iframe调用php文件。当我打开这个html文件了,可以看到只有一个iframe中的php文件正常显示了,其他的iframe都显示503错 误。

应用举例(Discuz!)

  Discuz!是使用比较多的一个php论坛程序。 以Discuz!7.0为例,程序目录下有比较多的可以直接访问的php文件,但其中最容易受到攻击的一般有index.php(首页)、 forumdisplay.php(板块显示)、viewthread.php(帖子显示)。攻击者一般会对这些页面发起大量的请求,导致HTTP服务器 连接数耗尽、mysql数据库停止响应,最终导致服务器崩溃。为了防止上述页面被攻击,我们可以设定以下的规则进行防御:

http {
limit_zone   myzone_bbs  $binary_remote_addr  10m;
limit_req_zone $binary_remote_addr zone=bbs:10m rate=1r/s;
...
server {
...
location ~ ^/bbs/(index|forumdisplay|viewthread).php$ {
limit_conn   myzone_bbs  3;
limit_req zone=bbs burst=2 nodelay;
root           html;
fastcgi_pass   unix:/dev/shm/php-cgi.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
include        fastcgi_params;
}
}
}

应用这条规则后,bbs目录下的index.php、forumdisplay.php和viewthread.php这些页面同一个IP只许建立3个 连接,并且每秒只能有1个请求(突发请求可以达到2个)。虽然这样的规则一般来说对正常的用户不会产生影响(极少有人在1秒内打开3个页面),但是为了防 止影响那些手快的用户访问,可以在nginx中自定义503页面,503页面对用户进行提示,然后自动刷新。在Nginx中自定义503页面:

error_page   503   /errpage/503.html;

503页面的源代码:

<html>
<head>
<title>页面即将载入....</title>
<meta http-equiv=content-type c>
<META NAME="ROBOTS" C>
</head>
<body bgcolor="#FFFFFF">
<table cellpadding="0" cellspacing="0" border="0" width="700" align="center" height="85%">
<tr align="center" valign="middle">
<td>
<table cellpadding="10" cellspacing="0" border="0" width="80%" align="center" style="font-family: Verdana, Tahoma; color: #666666; font-size: 11px">
<tr>
<td valign="middle" align="center" bgcolor="#EBEBEB">
<br /><b style="font-size: 16px">页面即将载入</b>
<br /><br />你刷新页面的速度过快。请少安毋躁,页面即将载入...
<br /><br />[<a href="javascript:window.location.reload();"><font color=#666666>立即重新载入</font></a>]
<br /><br />
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html><SCRIPT language=javascript>
function update()
{
window.location.reload();
}
setTimeout("update()",2000);
</script>

二、被动防御方法

  虽然主动防御已经抵挡了大多数HTTP GET FLOOD攻击,但是道高一尺魔高一丈,攻击者会总会找到你薄弱的环节进行攻击。所以我们在这里也要介绍一下被动防御的一些方法。

封IP地址

  访问者通过浏览器正常访问网站,与服务器建立的连接一般不会超过20个,我们可以通过脚本禁止连接数过大的IP访问。以下脚本通过netstat命令列举所有连接,将连接数最高的一个IP如果连接数超过150,则通过 iptables阻止访问:

#!/bin/sh
status=`netstat -na|awk '$5 ~ /[0-9]+:[0-9]+/ {print $5}' |awk -F ":" -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1`
NUM=`echo $status|awk '{print $1}'`
IP=`echo $status|awk '{print $2}'`
result=`echo "$NUM > 150" | bc`
if [ $result = 1 ]
then
echo IP:$IP is over $NUM, BAN IT!
/sbin/iptables -I INPUT -s $IP -j DROP
fi

运行crontab -e,将上述脚本添加到crontab每分钟自动运行:

* * * * * /root/xxxx.sh

通过apache自带的ab工具进行服务器压力测试:

# ab -n 1000 -c 100 http://www.xxx.com/bbs/index.php

测试完成后,我们就可以看到系统中有IP被封的提示:

#tail /var/spool/mail/root
Content-Type: text/plain; charset=ANSI_X3.4-1968
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <;PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>IP:58.246.xx.xx is over 1047, BAN IT!

至此,又一次HTTP GET FLOOD防御成功。

根据特征码屏蔽请求(对CC攻击效果较好)

   一般同一种CC攻击工具发起的攻击请求包总是相同的,而且和正常请求有所差异。当服务器遭遇CC攻击时,我们可以快速查看日志,分析其请求的特征,比如 User-agent。下面的是某一次CC攻击时的User-agent,Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate几乎没有正常的浏览器会在User-agent中带上"must-revalidate"这样的关键字。所以我们可以以这 个为特征进行过滤,将User-agent中带有"must-revalidate"的请求全部拒绝访问:

if ($http_user_agent ~ must-revalidate) {
return 403;
}

本文主要介绍了nginx下的HTTP GET FLOOD防御,如果有不对的地方,希望大家可以向我提出。同时,也希望大家能够举一反三,把这种思路应用到apache、lighttpd等常见的web服务器中。

比较全面的vps防止cc攻击相关推荐

  1. 最全面的VPS主机常见问题及解答集锦

    原文豆丁博客:https://www.shluqu.cn/3573.html VPS主机是现在用户比较常用的一种虚拟主机,VPS主机不同于其他主机空间,拥有其独特的优势.但不免有一些用户对服务器的类型 ...

  2. CC攻击介绍及如何防御

       CC攻击介绍 CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,前身名为Fatboy攻击,也是一种常见的网站攻击方法.攻击者借助代理服务器生成指向受害主机的合 ...

  3. CC攻击及其解决方法

    好久不关心网络安全之类,今天突然间听说CC攻击一词,不是太理解,现摘录一段介绍,相信对今后的代码编写会有一定好处的 很多朋友都知道木桶理论,一桶水的最大容量不是由它最高的地方决定的,而是由它最低的地方 ...

  4. 防CC攻击 软件防火墙和WEB防火墙大比较

    本文讲的是 :   防CC攻击 软件防火墙和WEB防火墙大比较 ,   CC攻击是一种成本极低的DDOS攻击方式,只要有上百个IP,每个IP弄几个进程,那么可以有几百上千个并发请求,很容易让服务器资源 ...

  5. 企业网站防CC攻击软件防火墙和WEB防火墙大比较

    微信:root143  作者:王涛   (www.deshengidc.cn) CC攻击是一种成本极低的DDOS攻击方式,只要有上百个IP,每个IP弄几个进程,那么可以有几百上千个并发请求,很容易让服 ...

  6. 网站防CC攻击软件防火墙和WEB防火墙大比较

    CC攻击是一种成本极低的DDOS攻击方式,只要有上百个IP,每个IP弄几个进程,那么可以有几百上千个并发请求,很容易让服务器资源耗尽,从而造成网站宕机:防御CC攻击,硬件防火墙的效果不怎么明显,因为C ...

  7. DDoS攻击、CC攻击

    DDoS 1.简介 DDoS即"分布式拒绝服务",简而言之,凡是能导致合法用户不能够访问正常网络服务的行为都算是拒绝服务攻击.也就是说拒绝服务攻击的目的就是要阻止合法用户对正常网络 ...

  8. 阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) ,阿里百万级QPS资源调度系统,一般的服务器qps多少? QPS/TPS/并发量/系统吞吐量...

    阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) 作者:用户 来源:互联网 时间:2016-03-30 13:32:40 安全流量事件https互联网资源 摘要:  ...

  9. 网站被CC攻击的解决方法

    作为站长或者公司的网站的网管,什么最可怕?显然是网站受到的DDoS攻击.大家都有这样的经历,就是在访问某一公司网站或者论坛时,如果这个网站或者论坛流量比较大,访问的人比较多,打开页面的速度会比较慢,对 ...

最新文章

  1. 送你一份概率图模型笔记
  2. mongodb,redis,mysql 简要对比
  3. linux内核如何修改lowmem,技术内幕:Android对Linux内核的增强 Low Memory Killer
  4. 单点登录Redis存储Session及SessionId问题说明与集群实战-4
  5. 工作多年,怀才不遇你该怎么办?
  6. android包名更换后升级方案,Android增量升级方案
  7. 法证先锋3中的Apps软件
  8. Pango Reference Manual 【文本和字体处理函数库】
  9. 小学计算机课的评语,小学信息技术评课稿
  10. 孩子们的游戏(圆圈中最后剩下的数)
  11. mysql 删除 修改密码_MySQL新建用户,授权,删除用户,修改密码
  12. 元素之和最接近 0 的区间(部分和)
  13. zabbix_nginx监控
  14. Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流
  15. 微信小程序 异步加载f2图表
  16. 手机上将mp4转换成amv_如何在Linux上将tiff图像从RGB颜色转换为CMYK颜色?
  17. MFC学习笔记整理:002_腾讯游戏连连看外挂制作(一)
  18. 电商平台的开发需要注意的问题有哪些?
  19. 微信小程序:for循环与if判断
  20. java实现客户端 与服务端的对话_Socket实现单客户端与服务器对话功能

热门文章

  1. 网络直播电视之寻找直播地址
  2. 请求被挂起导致页面加载缓慢
  3. 使用ALTER USER命令修改用户的密码、密码过期,锁定,解锁
  4. 爬虫技术-滑块验证码
  5. 邮箱正则验证(vant实例)
  6. 约瑟夫问题(算法设计与C代码实现)
  7. 统计学原理 合理使用图表
  8. 带有对话的整人html,整人语言陷阱
  9. 防火墙如何阻止SYN Flood攻击?
  10. 四参数拟合曲线_如何用GraphPad Prism 8.0对散点图进行拟合?