`

nginx防止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
如果在白名单中--> whiteiplist=0 --> $limit="" --> 不会存储到10m的会话状态(one或者addr)中 --> 不受限制
反之,不在白名单中 --> whiteiplist=1 --> $limit=二进制远程地址 -->存储进10m的会话状态中 --> 受到限制

四.测试

使用ab命令来模拟CC攻击,http_limit_conn和http_limit_req模块要分开测试,同时注意http_limit_conn模块只统计正在被处理的请求(这些请求的头信息已被完全读入)所在的连接。如果请求已经处理完,连接没有被关闭时,是不会被统计的。这时用netstat看到连接数可以超过限定的数量,不会被阻止。

ab -n 请求数 -c 并发 http://10.11.15.174/i.php

 如果被阻止前台会返回503,同时在nginx的error_log中会看到如下错误日志:
被限制连接数:

2015/01/28 14:20:26 [error] 4107#0: *65525 limiting connections by zone "addr", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

 被限制请求数:

2015/01/28 14:18:59 [error] 4095#0: *65240 limiting requests, excess: 5.772 by zone "one", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

 

五.其它一些防CC的方法

1.Nginx模块 ModSecurity、http_guard、ngx_lua_waf

  • ModSecurity 应用层WAF,功能强大,能防御的攻击多,配置复杂
  • ngx_lua_waf 基于ngx_lua的web应用防火墙,使用简单,高性能和轻量级
  • http_guard 基于openresty

2.软件+Iptables

  • fail2ban 通过分析日志来判断是否使用iptables拦截
  • DDoS Deflate 通过netstat判断ip连接数,并使用iptables屏蔽

开头说过抗DDOS是一个系统工程,通过优化系统和软件配置,只能防御小规模的CC攻击,对于大规模攻击、四层流量攻击、混合攻击来说,基本上系统和应用软件没挂,带宽就打满了。下面是我在工作中使用过的防御DDOS的方式:

  1. 高防服务器和带流量清洗的ISP 通常是美韩的服务器,部分ISP骨干供应商有流量清洗服务,例如香港的PCCW。通常可以防御10G左右的小型攻击
  2. 流量清洗服务 例如:akamai(prolexic),nexusguard 我们最大受到过80G流量的攻击,成功被清洗,但是费用非常贵
  3. CDN 例如:蓝讯 网宿 cloudflare 等,CDN针对DDOS的分布式特点,将流量引流分散,同时对网站又有加速作用,效果好,成本相对低。

总结一下:发动攻击易,防御难。七层好防,四层难防;小型能防,大型烧钱

分享到:
评论

相关推荐

    Nginx防御DDOS攻击的配置方法教程

    本文将详细介绍如何通过Nginx的配置来防御DDoS攻击。 首先,DDoS攻击分为四层流量攻击和七层应用攻击。四层攻击主要针对网络层的带宽,而七层攻击则针对应用程序的处理能力。Nginx作为应用服务器,主要关注七层防御...

    nginx如何防DDOS攻击(针对WEB服务器和数据库服务器)1

    Nginx,作为一个高效的反向代理和负载均衡器,可以通过多种策略来帮助抵挡DDoS攻击。 1. **分离主域名和图片域名** 分离主域名和图片域名可以有效分散流量,减轻服务器压力。单独的图片服务器可以减少读取Cookie...

    配置Nginx实现简单防御cc攻击

    ddos攻击:分布式拒绝服务攻击,就是利用大量肉鸡或伪造IP,发起大量的服务器请求,最后导致服务器瘫痪的攻击。 cc攻击:类似于ddos攻击,不过它的特点是主要是发起大量页面请求,所以流量不大,但是却能导致页面...

    Nginx教程 防御ddos,用户访问控制,限流.zip

    Nginx提供了以下几种策略来抵御DDoS攻击: 1. **IP黑名单**:通过`deny`指令阻止特定IP地址或IP段的访问。在`nginx.conf`或相应的server block中添加规则,例如: ```nginx deny 192.168.0.0/24; ``` 2. **...

    Nginx防攻击的调研

    **问题三:防止DDoS攻击** DDoS攻击是分布式拒绝服务攻击,通过大量源头同时发起攻击。防范措施包括: 1. **限制最大连接数**:设置Nginx的最大并发连接数,避免资源耗尽。 2. **缩短超时时间**:减少长时间未响应的...

    nginx基础和优化配置.rar

    通过proxy_pass指令指定后端服务器,proxy_set_header设置请求头,以及limit_conn和limit_rate限制连接数和带宽,防止DDoS攻击。 **4. Nginx的Rewrite规则** Nginx支持基于正则表达式的URL重写规则,通过`rewrite`...

    nginx-1.18.0+配置注释.rar

    6. **限速与限制连接**:Nginx可以通过`limit_conn`和`limit_req`模块来限制并发连接数和请求速率,防止DDoS攻击。例如: ``` limit_conn conn_limit_per_ip 10; limit_req zone=req_limit_per_ip burst=5 ...

    nginx 安装及配置文档

    3. **限制速率**:通过 `limit_rate` 和 `limit_conn` 防止 DDoS 攻击。 **监控与故障排查** 1. **使用 `nginx -t` 检查配置文件语法是否正确**。 2. **通过 `/status` 端点查看 Nginx 运行状态(需要配置 `...

    Nginx 安全配置指南技术手册.zip

    1. IP限制:通过`allow`和`deny`指令控制特定IP或IP段的访问,防止DDoS攻击。 2. 防止目录遍历:禁用目录索引并限制对无效路径的访问,防止恶意用户获取系统信息。 3. 避免敏感文件暴露:隐藏`.htaccess`等敏感...

    nginx配置

    - **限速**:通过`limit_rate`限制客户端下载速度,防止DDoS攻击。 - **访问控制**:使用`allow`和`deny`控制IP访问权限。 - **Gzip压缩**:开启`gzip`压缩,减少网络传输数据量。 - **SSL/TLS**:配置HTTPS支持,...

    freebsd+nginx+php+mysql+zend系统优化防止ddos +傻瓜式ports安装

    根据给定的信息,本文将详细解释FreeBSD操作系统上部署Nginx、PHP、MySQL和Zend环境的方法,并介绍如何通过系统优化来防止DDoS攻击。同时,我们也会介绍一种简便的Ports安装方法。 ### 一、FreeBSD + Nginx + ...

    nginx-1.12.2和安装配置文档.zip

    - **安全设置**:使用 `limit_conn` 和 `limit_req` 模块限制并发连接和请求速率,防止 DDoS 攻击。 总结,Nginx 1.12.2 的安装和配置涉及到多个层面,从基础的系统环境准备到具体的负载均衡策略,每个环节都需要...

    nginx1.0.4 配置

    4. **限速限制**:通过 `limit_rate` 或 `limit_conn` 控制客户端的请求速率和连接数,防止 DDoS 攻击。 5. **错误页面**:自定义错误页面,提供更好的用户体验。 ### 四、监控与调试 - 使用 `nginx -t` 检查配置...

    Nginx安全配置指南技术手册.pdf(应用技术指南).txt

    在当今数字化时代,网络安全威胁不断增加,包括但不限于DDoS攻击、SQL注入、XSS攻击等。这些威胁可能对网站造成严重的损害,如数据泄露、服务中断等。因此,合理地配置Nginx的安全策略可以有效地提高系统的安全性,...

    nginx-1.10.3附带conf配置

    8. **限速和限制连接**:`limit_rate`可以限制客户端下载速度,`limit_conn`和`limit_req`可以限制同一IP的连接数和请求速率,以防止DDoS攻击。 9. **SSL/TLS支持**:通过`ssl on`开启HTTPS,`ssl_certificate`和`...

    ngx_lua_anticc:Nginx 的 HTTP 洪水攻击缓解工具

    CC 攻击(即 HTTP 请求泛洪)是一种第 7 层 DDoS 攻击。 ngx_lua_anticc 是 Nginx 基于的扩展。 有了它,您可以轻松地为您的 Web 服务器添加 CC 攻击保护。 下载 当前版本: 。 配置&&安装 1.准备你的nginx 要使用...

    nginx-1.21.6.zip和nginx-1.21.6.tar.gz

    - 资源限制:通过限速、连接数控制等手段防止DDoS攻击,保护服务器资源。 - 错误处理:自定义错误页面,提高用户体验。 6. 扩展与模块 Nginx有丰富的第三方模块,如mod_security用于安全防护,lua模块实现动态...

    nginx1.24.0 windows版

    - 限制速率防止DDoS攻击,可以使用`limit_req`模块限制请求速率。 - 调整工作进程数量和事件模型以优化性能。 7. **整合其他服务**: - Nginx 可以与PHP-FPM、FastCGI配合实现动态内容处理,比如搭建WordPress、...

    防ddos攻击

    在Linux环境下,防范CC(Challenge Collapsar)这种特定类型的DDoS攻击是一项重要的任务。CC攻击主要针对Web服务,通过模拟大量合法用户请求来耗尽服务器资源。 以下是一些在Linux系统下防止CC攻击的策略和工具: ...

    nginx.config_nginx_

    - 可以通过配置限制访问,防止DDoS攻击: ```nginx limit_conn zone_name max_conns; limit_rate rate; deny all; ``` `limit_conn`限制连接数,`limit_rate`限制速率,`deny`阻止所有请求。 以上仅是Nginx...

Global site tag (gtag.js) - Google Analytics