WAF能防慢速CC攻击吗?原理和配置详解

速读摘要:慢速 CC 攻击(Slowloris、Slow POST 等)不靠高频请求,而是用大量"半死不活"的连接占满服务器资源,传统频率限制对它几乎无效。WAF 通过连接超时、并发数限制、请求完整性检查来识别。本文讲清原理、判断方法和 Nginx/WAF 两侧的配置要点。
WAF 能防慢速 CC 攻击吗?
WAF 高级防护能力篇 · 第 25 问 · 主机吧 WAF 知识库

一、慢速 CC 为什么难防

常规 CC 防护看的是”请求频率”:1 分钟内请求超过 N 次就拦截。但慢速 CC 恰恰相反——它每分钟可能只发几个包,频率低得像个正常用户,却在服务器上挂着几百上千个未完成的连接,把连接数和内存悄悄吃光。

典型表现:服务器 CPU 不高、带宽不高,但就是打不开页面,Nginx 日志里出现大量 499 状态码。

二、四种典型慢速攻击

类型原理危害
Slowloris每几秒发一个 HTTP 头字节,永不发完占满工作连接,正常请求无连接可用
Slow POST声明大 Content-Length,但极慢发送 body占满读取缓冲与磁盘 IO
Slow Read请求大文件但极慢读取,撑住发送缓冲耗尽服务器发送队列
Slow TLSTLS 握手阶段故意拖延占满握手队列,CPU 升高

三、WAF 如何识别慢速攻击

  • 连接完整性:一个连接超过 N 秒仍未完成请求 → 判定异常
  • 并发统计:单 IP 或整站并发连接数异常抬升 → 触发限流
  • 速率分析:单位时间内连接建立速率与请求完成速率严重不匹配
  • 指纹辅助:同一 JA3 指纹对应大量未完成连接 → 直接封禁
  • 行为基线:与历史正常并发模型对比,偏离即告警

关键点在于:WAF 关注的不再是”请求次数”,而是连接的生命周期是否完整、是否高效。

四、Nginx 侧加固配置

如果源站是 Nginx(宝塔默认),一定要把超时参数收紧。默认值往往过长,给了慢速攻击可乘之机:

# 在 nginx.conf 的 http 块中设置
client_header_timeout   10s;   # 读请求头超时(默认 60s)
client_body_timeout     10s;   # 读请求体超时(默认 60s)
send_timeout            10s;   # 发送响应超时
keepalive_timeout       15s;   # 长连接保持时间
client_max_body_size    20m;   # 限制上传体积,防慢速大包

# 限制单 IP 并发连接数(需 http_limit_conn 模块)
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 20;           # 单 IP 最多 20 个并发
limit_conn_status 429;

# 限制单 IP 请求速率
limit_req_zone $binary_remote_addr zone=perreq:10m rate=10r/s;
limit_req zone=perreq burst=20 nodelay;

宝塔面板操作路径:软件商店 → Nginx → 配置修改,把上述参数写入 http 块,保存后重载。

五、云 WAF 侧配置建议

在 WAF 控制台开启对应的防护项,通常包括:

  1. 开启”慢速攻击防护”开关,设置单连接最大存活时间(建议 30-60 秒)
  2. 设置单 IP 并发连接阈值(按业务量,一般 20-50)
  3. 开启”请求体完整性校验”,拒绝 Content-Length 与实际不符的请求
  4. 对无完整请求的 IP 快速拉黑,加入临时封禁名单

六、验证防护是否生效

# 用慢速连接工具自测(仅用于自有站点)
# 观察服务器连接数变化
netstat -ant | grep :443 | wc -l

# 观察 Nginx 499 错误数量
tail -1000 /www/wwwlogs/access.log | grep -c " 499 "

# 若 499 数量在攻击期间不再飙升,说明超时限制已生效

七、小结

慢速 CC 攻击打的是”耐心”,防御的核心也是”耐心”——用更短的超时、更严的并发限制,把不肯痛快说完话的连接及时清理掉。Nginx 收超时 + WAF 收并发,两层配合就能有效压制。

给TA打赏
共{{data.count}}人
人已打赏
在线客服
在线客服
热线电话
QQ客服
电子邮箱
suduwangluo