nginx防dos/ddos/redos/ssl dos攻击需分层拦截、提前失败、资源可控:通过limit_conn_zone和limit_req_zone限连限速,ssl_handshake_timeout等收紧tls握手,禁用贪婪正则并锚定匹配,及时修复cve-2026-42945和cve-2026-27654漏洞。

防范 Nginx 环境下的拒绝服务(DoS/DDoS/ReDoS/SSL DoS)攻击,关键不是堆砌规则,而是分层拦截、提前失败、资源可控。核心思路是:让恶意流量在进入业务逻辑前就被识别、限流或丢弃,不给其消耗 CPU、内存、连接数的机会。
限制连接与请求频率,守住资源底线
这是最直接有效的防线,适用于 HTTP 洪水、CC 攻击等常见场景:
- 在 http 块中定义连接和请求限制区域:
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=5r/s; - 在 server 或 location 块中启用限制:
limit_conn conn_per_ip 30;
limit_req zone=req_per_ip burst=15 nodelay;
burst 允许短时突发,nodelay 避免排队延迟,适合 API 或登录页等需响应及时的路径。 - 对 HTTPS 流量单独设限更稳妥,尤其在
listen 443 ssl的 server 块中加:
limit_conn ssl_conn 20;
收紧 TLS 握手与连接生命周期
针对 SSL/TLS 协商耗尽类攻击(如 Slow-SSL、ClientHello 洪水),必须控制握手阶段行为:
- 强制握手超时:
ssl_handshake_timeout 5s;(Nginx 1.19.0+ 必配) - 约束请求头发送窗口:
client_header_timeout 8s; - 缩短长连接保持时间,避免连接池被占满:
keepalive_timeout 25s; - 快速释放超时连接状态:
reset_timedout_connection on;
规避正则表达式性能陷阱(ReDoS)
Nginx 的 PCRE 引擎回溯极易被滥用,一条危险正则就可拖垮整个 worker 进程:
- 静态路径优先用前缀匹配,例如:
location /static/ { ... },而非 location ~ ^/static/.*\.(js|css)$ - 禁用贪婪量词,改用明确字符集:
用 [a-zA-Z0-9_-]+ 替代 .+;用 [^/]+ 替代 .* - 所有正则必须加锚点:
~ ^/api/v\d+/user$ 安全,~ /api 极危险 - 对用户输入参与的匹配(如 $arg_token),先做长度校验再进正则:
if ($arg_token = "") { return 400; }
if ($arg_token ~ "^[a-zA-Z0-9_]{16,64}$") { ... }
堵住已知高危漏洞入口
当前(2026年6月)需重点关注两个活跃在野利用的严重漏洞:
-
CVE-2026-42945(“Rift”):影响 Nginx 0.6.27–1.30.0,rewrite 模块堆溢出,可导致 RCE 或崩溃。
✅ 紧急修复:升级至 1.30.1 或 1.29.7+(稳定版建议 1.28.4+) -
CVE-2026-27654(WebDAV):影响启用 alias + WebDAV COPY/MOVE 的配置,可读写任意文件。
✅ 临时缓解:禁用 WebDAV 模块(注释掉 load_module modules/ngx_http_dav_module.so;),或移除 alias 与 dav_methods 共存的 location 块 - 同时检查是否暴露敏感路径(如
.git、.conf),添加:
location ~ /\. { deny all; }











