Nginx中CC攻击与DDoS防御的高级策略指南

 更新时间:2025年07月06日 08:59:48   作者:码上有潜  
这篇文章主要为大家详细介绍了Nginx中CC攻击与DDoS防御的高级策略,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一、分层防御体系架构

二、CC 攻击防御策略

1. 请求频率限制(核心防御)

# 在 http 块中定义限制区域
http {
    # 定义请求限制区域
    limit_req_zone $binary_remote_addr zone=req_perip:10m rate=10r/s;
    limit_req_status 429;  # 自定义限流状态码
    
    # 定义并发连接限制
    limit_conn_zone $binary_remote_addr zone=conn_perip:10m;
}

2. 关键位置应用限流

server {
    # 登录接口严格限制
    location = /login {
        limit_req zone=req_perip burst=5 nodelay;
        limit_conn conn_perip 3;
        proxy_pass http://backend;
    }
    
    # API 接口限制
    location /api/ {
        limit_req zone=req_perip burst=10;
        limit_conn conn_perip 5;
        proxy_pass http://backend;
    }
    
    # 静态资源宽松限制
    location ~* \.(js|css|png|jpg)$ {
        limit_req zone=req_perip burst=20;
        access_log off;  # 减少日志压力
    }
}

3. 人机验证挑战

location / {
    # 当请求超过阈值时重定向到验证页面
    error_page 429 = @verify;
    limit_req zone=req_perip burst=15 nodelay;
    
    # 正常请求处理
    proxy_pass http://backend;
}

location @verify {
    # 返回验证码挑战
    add_header Content-Type text/html;
    return 200 '<html><body>
        <h1>请验证</h1>
        <script src="https://challenges.cloudflare.com/turnstile/v0/api.js"></script>
        <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
        </body></html>';
}

三、DDoS 防御策略

1. 连接限制配置

# 全局连接限制
events {
    worker_connections 4096;  # 根据服务器性能调整
}

http {
    # 限制单个IP的连接数
    limit_conn_zone $binary_remote_addr zone=conn_limit_perip:10m;
    limit_conn conn_limit_perip 50;
    
    # 限制每个连接的速率
    limit_rate 500k;  # 全局默认限速
    
    # 限制请求体大小
    client_max_body_size 10m;
}

2. 慢连接防护

http {
    # 防止慢速攻击
    client_body_timeout 10s;    # 请求体超时
    client_header_timeout 10s;  # 请求头超时
    keepalive_timeout 15s;      # 保持连接超时
    send_timeout 10s;           # 发送响应超时
    
    # 关闭不必要的HTTP方法
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 444;
    }
}

3. 高级防护模块

# 启用Nginx Plus或第三方模块
load_module modules/ngx_http_modsecurity_module.so;
load_module modules/ngx_http_geoip2_module.so;

http {
    # 使用GeoIP限制地区访问
    geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
        $geoip2_country_code country iso_code;
    }
    
    map $geoip2_country_code $allowed_country {
        default 0;
        CN      1;  # 只允许中国IP
        US      1;
        JP      1;
    }
    
    server {
        # 应用地区限制
        if ($allowed_country = 0) {
            return 403;
        }
        
        # 启用WAF
        modsecurity on;
        modsecurity_rules_file /etc/nginx/modsec/main.conf;
    }
}

四、Nginx 调优增强防御

1. 内核级优化 (sysctl.conf)

# 防止SYN洪水攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096

# 加快TIME-WAIT回收
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

# 连接追踪优化
net.netfilter.nf_conntrack_max = 1000000
net.netfilter.nf_conntrack_tcp_timeout_established = 1200

2. Nginx 工作进程优化

# 调整工作进程
worker_processes auto;  # 自动匹配CPU核心
worker_rlimit_nofile 65535;  # 每个进程最大文件描述符

# 使用多核处理连接
events {
    use epoll;
    worker_connections 4096;
    multi_accept on;
}

3. 缓存优化减少后端压力

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;

server {
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating;
        
        # 缓存锁定防止缓存击穿
        proxy_cache_lock on;
        proxy_cache_lock_timeout 5s;
    }
}

五、云平台集成防御

1. 阿里云/腾讯云集成

# 通过HTTP头传递真实客户端IP
real_ip_header X-Forwarded-For;
set_real_ip_from 100.64.0.0/10;  # 云平台内网段

# 启用云平台WAF
location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    # 云平台特定头
    proxy_set_header Ali-CDN-Real-IP $remote_addr;
    proxy_set_header Qcloud-Real-IP $remote_addr;
}

2. Cloudflare 集成

# 只接受来自Cloudflare IP的请求
include /etc/nginx/cloudflare-ips.conf;

server {
    listen 80;
    server_name yourdomain.com;
    
    # 仅允许Cloudflare IP访问
    allow 103.21.244.0/22;
    allow 103.22.200.0/22;
    # ... 其他Cloudflare IP段
    deny all;
    
    location / {
        proxy_pass http://backend;
    }
}

六、监控与自动化响应

1. 实时监控配置

# 启用状态监控
server {
    listen 127.0.0.1:8080;
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

2. 自动封禁脚本

#!/bin/bash
# 自动封禁高频IP
LOG_PATH="/var/log/nginx/access.log"
THRESHOLD=100  # 每分钟请求阈值
BAN_TIME=3600  # 封禁时间(秒)

tail -F $LOG_PATH | while read LINE
do
    IP=$(echo $LINE | awk '{print $1}')
    COUNT=$(grep $IP $LOG_PATH | wc -l)
    
    if [ $COUNT -gt $THRESHOLD ]; then
        # 添加到防火墙
        iptables -A INPUT -s $IP -j DROP
        # 定时解封
        (sleep $BAN_TIME && iptables -D INPUT -s $IP -j DROP) &
    fi
done

3. Prometheus + Grafana 监控面板

# nginx-prometheus-exporter 配置
scrape_configs:
  - job_name: 'nginx'
    static_configs:
      - targets: ['nginx-host:9113']
    metrics_path: /metrics

监控指标:

  • 请求率
  • 活动连接数
  • 错误率
  • 带宽使用
  • 上游响应时间

七、应急响应计划

攻击发生时的处理流程:

1.启用紧急模式

# 在http块添加
limit_req_zone $binary_remote_addr zone=emergency:10m rate=5r/s;

server {
    location / {
        limit_req zone=emergency burst=10 nodelay;
    }
}

2.切换至静态维护页面

location / {
    root /var/www/emergency;
    try_files $uri /maintenance.html;
}

3.启用云平台DDoS防护

  • 阿里云:启用DDoS高防IP
  • 腾讯云:启用大禹BGP高防
  • AWS:启用Shield Advanced

4.分析攻击模式

# 分析访问日志
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20

# 实时监控
tail -f access.log | grep -E ' (429|444|503) '

最佳实践总结

  • 分层防御:网络层 + Nginx层 + 应用层
  • 速率限制:基于IP和关键端点
  • 连接管理:限制并发和超时
  • 自动封禁:实时监控 + 自动响应
  • 云平台集成:利用云WAF和DDoS防护
  • 定期演练:每季度进行防御压力测试

关键建议:对于大规模DDoS攻击,建议结合云服务商的DDoS防护服务(如阿里云高防IP、Cloudflare Pro),这些服务提供TB级的清洗能力,远超单台Nginx服务器的防御能力。

最终部署前,务必进行压力测试:

# 使用wrk进行压力测试
wrk -t12 -c400 -d30s --timeout 10s https://yourdomain.com

根据测试结果调整限流阈值和防护策略,确保在防护攻击的同时不影响正常用户访问。

到此这篇关于Nginx中CC攻击与DDoS防御的高级策略指南的文章就介绍到这了,更多相关Nginx防御CC攻击与DDoS内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx配置缓存关闭的实现

    nginx配置缓存关闭的实现

    本文将介绍nginx缓存关闭,以及配置的具体步骤和示例,通过调整Nginx的配置文件,可以确保浏览器不会缓存网站的内容,从而提高网站的安全性和性能
    2023-10-10
  • Nginx自定义访问日志的配置方式

    Nginx自定义访问日志的配置方式

    Nginx日志主要分为两种:访问日志和错误日志。访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。下面这篇文章主要给大家介绍了Nginx自定义访问日志的配置方式,需要的朋友可以参考学习,下面来一起看看吧。
    2017-05-05
  • Nginx限制某个IP同一时间段的访问次数和请求数示例代码

    Nginx限制某个IP同一时间段的访问次数和请求数示例代码

    nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数.具体示例代码大家参考下本文
    2017-08-08
  • 使用Nginx配置文件服务器方式

    使用Nginx配置文件服务器方式

    这篇文章主要介绍了使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • NGINX 配置内网访问的实现步骤

    NGINX 配置内网访问的实现步骤

    本文主要介绍了NGINX 配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下
    2025-05-05
  • nginx的location的优先级和匹配方式

    nginx的location的优先级和匹配方式

    location是Nginx中的块级指令,本文主要介绍了nginx的location的优先级和匹配方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Windows系统下Nginx服务器的基本安装和配置方法介绍

    Windows系统下Nginx服务器的基本安装和配置方法介绍

    这篇文章主要介绍了Windows系统下Nginx服务器的基本安装和配置方法,文中给出了一个配置文件的实例并作出了些说明,需要的朋友可以参考下
    2015-12-12
  • 详解 Nginx 301重定向的配置

    详解 Nginx 301重定向的配置

    这篇文章主要介绍了详解 Nginx 301重定向的配置的相关资料,需要的朋友可以参考下
    2017-03-03
  • nginx配置gzip压缩页面

    nginx配置gzip压缩页面

    gzip(GNU-ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会块得多,下面看一下Nginx配置Gzip的方法
    2013-12-12
  • Nginx配置之实现多台服务器负载均衡

    Nginx配置之实现多台服务器负载均衡

    这篇文章主要介绍了Nginx配置之实现多台服务器负载均衡,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论