插件窝 干货文章 Nginx安全实战:防范DDoS攻击

Nginx安全实战:防范DDoS攻击

Nginx limit 限制 防护 92    来源:    2025-04-19

Nginx安全实战:防范DDoS攻击

DDoS攻击概述

DDoS(分布式拒绝服务)攻击通过大量恶意流量淹没服务器资源,导致合法用户无法访问服务。作为高性能Web服务器和反向代理,Nginx可以通过多种配置有效缓解DDoS攻击。

基础防护配置

1. 连接限制模块

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
    limit_conn conn_limit_per_ip 20;  # 每个IP最多20个连接

    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
    limit_req zone=req_limit_per_ip burst=20 nodelay;
}

2. 客户端请求限制

server {
    client_body_timeout   10s;
    client_header_timeout 10s;
    keepalive_timeout     15s;
    send_timeout          10s;

    client_max_body_size 1m;  # 限制请求体大小
    client_body_buffer_size 16k;
}

高级防护策略

3. 基于地理位置的访问控制

geo $blocked_country {
    default         0;
    include         /etc/nginx/conf.d/blocked_countries.conf;
}

server {
    if ($blocked_country) {
        return 444;  # 静默关闭连接
    }
}

4. 动态黑名单

map $remote_addr $deny_ip {
    default         0;
    include         /etc/nginx/conf.d/blacklist.conf;
}

server {
    if ($deny_ip) {
        return 403;
    }
}

5. 速率限制特定URL

http {
    limit_req_zone $binary_remote_addr zone=login_limit:10m rate=2r/s;

    server {
        location /login {
            limit_req zone=login_limit burst=5 nodelay;
            # 其他配置
        }
    }
}

性能优化配置

6. 调整文件描述符限制

worker_rlimit_nofile 65535;  # 每个worker进程的文件描述符限制
events {
    worker_connections 4096;
}

7. 启用SYN Cookie保护

net.ipv4.tcp_syncookies = 1  # 在/etc/sysctl.conf中设置

监控与日志分析

8. 自定义日志格式

http {
    log_format ddos '$remote_addr - $remote_user [$time_local] '
                   '"$request" $status $body_bytes_sent '
                   '"$http_referer" "$http_user_agent" '
                   'Request_Time=$request_time';

    access_log /var/log/nginx/ddos.log ddos;
}

9. 实时监控脚本示例

#!/bin/bash
# 监控异常请求
tail -f /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

综合防护方案

10. 多层防御架构

  1. 前端防护:使用Cloudflare等CDN服务
  2. 边缘防护:Nginx速率限制和连接限制
  3. 应用层防护:WAF(Web应用防火墙)
  4. 后端防护:应用服务器连接池限制

应急响应

当遭受攻击时: 1. 启用紧急限流规则 2. 临时屏蔽攻击源IP段 3. 切换到维护模式(503响应) 4. 联系ISP进行流量清洗

# 紧急限流规则示例
limit_req_zone $binary_remote_addr zone=emergency:10m rate=5r/m;

最佳实践

  1. 定期更新Nginx到最新稳定版
  2. 禁用不必要的模块(如autoindex)
  3. 使用fail2ban等工具自动封禁恶意IP
  4. 实施零信任网络架构
  5. 定期进行压力测试和DDoS演练

通过以上配置和策略,Nginx可以有效缓解大多数DDoS攻击,保护Web服务的可用性。