中国领先的IT技术网站
|
|

使用Nginx防御CC攻击

本文主要介绍了有关使用Nginx防御CC攻击的一些配置。CC攻击针对的是服务器上面的内存和CPU资源,因此通常会找到一些比较高消耗的接口,例如search.php之类的需要大量sql查询的接口。因此,明白了这一点,我们就很好防御了,主要是针对单个ip地址的连接数和请求php文件的密度来控制的。

作者:Jarett来源:博客|2013-06-24 10:16

Tech Neo技术沙龙 | 11月25号,九州云/ZStack与您一起探讨云时代网络边界管理实践


本文主要介绍了有关使用Nginx防御CC攻击的一些配置。CC攻击针对的是服务器上面的内存和CPU资源,因此通常会找到一些比较高消耗的接口,例如search.php之类的需要大量sql查询的接口。因此,明白了这一点,我们就很好防御了,主要是针对单个ip地址的连接数和请求php文件的密度来控制的。

我们主要用到的是Nginx中提供的两个limit模块:

  1. ngx_http_limit_conn_module  
  2. ngx_http_limit_req_module 

一、白名单

首先这两个模块是支持白名单的,就是可能有某些IP地址,我们是不需要进行限制的,比如可能会是搜索引擎啦什么的或者自己的IP,因此需要设置一个白名单,不需要的可跳过本步。具体方法:

在HTTP段中插入如下格式内容,声明白名单IP

  1. http{    
  2. .......    
  3. geo $limited{    
  4.       default 1;    
  5.       #公司    
  6.      119.123.5.0/24 0;   
  7.   }    
  8. .........    
  9. }   

geo指令定义了一个白名单$limited变量,默认值为1,如果客户端IP在上面的范围内,$limited的值为0。

然后紧跟在上面内容后使用map指令映射搜索引擎客户端的ip为空串,如果不是白名单IP就显示本身真实的IP,这样搜索引擎iIP就不能存到limit模块的内存session中,所以不会限制白名单的IP访问。

  1. map $limited $limit {    
  2.                   1 $binary_remote_addr;   
  3.                   0 "";    
  4.         }  

二、访问频率限制

访问频率限制使用到的是ngx_http_limit_req_module,需要在两个地方配置,首先在HTTP段中,声明好这个模块一些参数,如果有设置白名单,设置如下

  1. http{    
  2. ...    
  3. limit_req_zone $limit zone=one:10m rate=20r/m; ##平均20r/m 每分钟20个请求    
  4. ...    
  5. }   

如果没有配置白名单,所有来访IP都会限制,配置如下

  1. http{    
  2. ...    
  3. limit_req_zone $binary_remote_addr zone=one:10m rate=20r/m; ##平均20r/m 每分钟20个请求  
  4. ...   
  5. }   

解释一下上面的参数,第一个代表的是需要限制的ip群,这个很好理解,第二个zone=one表示这个limit_zone的名字叫做one,后面的使用中可以用这个one来进行指代,后面的15m,代表为这个zone分配10m的内存,1m可以保存16000的$binary_remote_addr。最后一个是频率,如果要按秒来算可以设置20r/s这样。

最后是配置到Nginx的php的解析段

  1. location ~ \.php$ {    
  2. ...    
  3. limit_req zone=one burst=5 nodelay;   
  4. ...    
  5. }   

指定了使用名字为one的zone,然后缓冲队列为5,无延迟,如果不设置无延迟,访问会卡住。

三、访问连接限制

访问连接限制使用到的是ngx_http_limit_conn_module,也是需要在两个地方配置,首先在HTTP段中,声明好这个模块一些参数,如果有设置白名单,设置如下

  1. http{   
  2. ...    
  3. limit_conn_zone $limit zone=addr:10m;    
  4. ...    
  5. }   

如果没有配置白名单,所有来访IP都会限制,配置如下

  1. view sourceprint?http{    
  2. ...    
  3. limit_conn_zone $binary_remote_addr zone=addr:10m;   
  4. ...    
  5. }   

参数的意思跟上面的差不多也就不多解释了。

后面的就是在server段中进行设置了,可以具体到某个目录什么的了

  1. server {    
  2.     location /download/ {   
  3.         limit_conn addr 5;    
  4.     }  

大功告成,打完收工,记得要nginx -s reload一下哦~

【编辑推荐】

  1. 如何在VPS下化解CC攻击
  2. 防范CC攻击的六项措施
  3. 网站防止CC攻击的方法
  4. 在Linux下如何查CC攻击?
  5. 浅谈WEB服务器被CC攻击的症状以及防护
【责任编辑:蓝雨泪 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Ajax经典案例开发大全

针对Ajax技术的日益流行,本书对Ajax技术的典型应用进行了归纳总结,基本上覆盖了Ajax技术应用的典型场景。书中共有45个实例,分为9章:动...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× CTO训练营(深圳站)