首页 存档 技术 查看内容

nginx防止DDOS攻击配置(一)

2018-3-30 13:00 |来自: 互联网 987 0

摘要: 防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量 ...

防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还是可以做一些配置来防御的,例如前端是Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御。ngx_http_limit_conn_module 可以**单个IP的连接数,ngx_http_limit_req_module 可以**单个IP每秒请求数,通过**连接数和请求数能相对有效的防御CC攻击。下面是配置方法:

一. **每秒请求数

ngx_http_limit_req_module模块通过漏桶原理来**单位时间内的请求数,一旦单位时间内请求数超过**,就会返回503错误。配置需要在两个地方设置:

  • nginx.conf的http段内定义触发条件,可以有多个条件

  • 在location内定义达到触发条件时nginx所要执行的动作

例如:

http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip **每秒10个请求
  ...
  server {
    ...
    location ~ \.php$ {
      limit_req zone=one burst=5 nodelay;  //执行的动作,通过zone名字对应
        }
      }
   }

参数说明:

$binary_remote_addr 二进制远程地址
zone=one:10m  定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话
rate=10r/s;   **频率为每秒10个请求
burst=5     允许超过频率**的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率**。
nodelay     超过的请求不被延迟处理,设置后15个请求在1秒内处理。

二.**IP连接数

ngx_http_limit_conn_module的配置方法和参数与http_limit_req模块很像,参数少,要简单很多

http {
  limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件
  ...
  server {
    ...
    location /download/ {
      limit_conn addr 1;  // **同一时间内1个连接,超出的连接返回503
        }
      }
   }

三.白名单设置

http_limit_conn和http_limit_req模块**了单ip单位时间内的并发和请求数,但是如果Nginx前面有lvs或者haproxy之类的负载均衡或者反向代理,nginx获取的都是来自负载均衡的连接或请求,这时不应该**负载均衡的连接和请求,就需要geo和map模块设置白名单:

geo $whiteiplist {
    default 1;
    10.11.15.161 0;
  }
map $whiteiplist $limit {
    1 $binary_remote_addr;
    0 "";
  }
limit_req_zone $limit zone=one:10m rate=10r/s;
limit_conn_zone $limit zone=addr:10m;

geo模块定义了一个默认值是1的变量whiteiplist,当在ip在白名单中,变量whiteiplist的值为0,反之为1
如果在白名单中--

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部