本文目录导读:

慢速攻击(Slow Rate Attack,如 Slowloris、Slow HTTP POST、Slow Read 等)是一种利用 HTTP 协议设计缺陷的拒绝服务攻击,它不像传统 DDoS 那样发送大量流量,而是通过极慢的速度发送不完整的请求,占用服务器连接池,导致正常用户无法访问。
拦截慢速攻击需要结合反向代理、Web 服务器配置、专业防护设备以及网络层策略,以下是具体、可行的拦截方法:
核心思路:缩短超时时间与限制连接资源
优化 Web 服务器配置(最直接有效)
这是针对应用层(如 Nginx、Apache、IIS)的根治疗法。
-
针对 Nginx:
-
client_body_timeout:设置读取客户端请求体的超时时间(建议 5-10 秒)。 -
client_header_timeout:读取客户端请求头的超时时间(建议 5-10 秒)。 -
keepalive_timeout:长连接保持时间(建议 15-30 秒)。 -
limit_conn:限制单个 IP 的并发连接数。 -
limit_req:限制单个 IP 的请求速率。 -
配置示例:
http { client_body_timeout 10s; client_header_timeout 10s; keepalive_timeout 15s; # 限制每个 IP 最多 10 个连接 limit_conn_zone $binary_remote_addr zone=conn_limit:10m; limit_conn conn_limit 10; # 限制每个 IP 每秒最多 5 个请求 limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s; limit_req zone=req_limit burst=10 nodelay; }
-
-
针对 Apache:
TimeOut:设置全局超时(建议 10-30 秒)。KeepAliveTimeout:长连接超时(建议 5-15 秒)。MaxRequestWorkers:限制最大并发请求数。LimitRequestBody:限制请求体大小(对抗慢速 POST)。- 推荐模块:安装
mod_reqtimeout模块。<IfModule reqtimeout_module> RequestReadTimeout header=10-20,minrate=500 RequestReadTimeout body=10-20,minrate=500 </IfModule>解释:10-20 秒后超时,且传输速率低于 500 字节/秒则断开。
-
针对 IIS:
- 在“请求筛选”中设置:
maxAllowedContentLength长度上限)、maxUrl(URL 长度)、maxQueryString(查询字符串长度)。 - 在“ASP.NET”或“HTTP 响应标头”中,调整
connectionTimeout和headerWaitTimeout。
- 在“请求筛选”中设置:
部署反向代理与负载均衡器
在前端架设 Nginx、HAProxy、Traefik、Cloudflare 或 AWS ELB。
- HAProxy 配置示例:
# 限制 HTTP 请求头大小 tune.http.maxhdr 50 # 超时设置 timeout http-request 10s timeout http-keep-alive 30s # 限制单个 IP 的连接数(每个后端) stick-table type ip size 100k expire 30s store conn_cur tcp-request content track-sc0 src tcp-request content reject if { src_conn_cur ge 10 } - 作用:反代作为“缓冲层”,可以丢弃不符合预期行为(如长时间不发送完整数据)的连接,保护后端真实服务器。
使用 Web 应用防火墙(WAF)
无论是云 WAF(AWS WAF、Cloudflare、阿里云 WAF)还是开源 WAF(ModSecurity),通常都内置了针对慢速攻击的规则。
- 关键行为:WAF 检测并阻止那些长时间未完成请求头或请求体的会话。
- 配置项:开启“HTTP 协议验证”、“请求速率限制”、“连接数限制”。
网络层与系统层优化
- iptables 连接限制(Linux):
# 限制每个 IP 对 80 端口的并发连接数为 50 iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j REJECT --reject-with tcp-reset
- 内核参数调优:加速半连接(SYN)回收和超时。
sysctl -w net.ipv4.tcp_syn_retries=2 # 减少 SYN 重试次数 sysctl -w net.ipv4.tcp_synack_retries=2 sysctl -w net.ipv4.tcp_fin_timeout=10 # 缩短 TIME_WAIT sysctl -w net.ipv4.tcp_tw_reuse=1 # 允许重用 TIME_WAIT 连接 sysctl -w net.ipv4.tcp_tw_recycle=0 # 不建议开启(NAT 环境有问题),建议关闭
专业 DDoS 防护服务
如果攻击规模较大(超过服务器带宽或并发能力),上述方法可能不足,此时应使用专业服务:
- CDN + DDoS 防护:Cloudflare、Akamai、阿里云 DDoS 高防、腾讯云 DDoS 防护,它们在全球节点自动丢弃慢速攻击流量。
- 流量清洗服务:机房或上游 ISP 提供的 Anti-DDoS 设备(如 Arbor、Radware)。
标准防御配置(以 Nginx 为例)
建议按以下顺序执行:
- 配置 Nginx 超时:
client_body_timeout 10s; client_header_timeout 10s; - 启用 HTTP 请求速率限制:限制每 IP 每秒的请求数。
- 启用连接数限制:限制每 IP 的并发连接。
- 安装 ModSecurity + OWASP CRS:开启
slowloris等相关规则。 - 配置内核参数:缩短 FIN_WAIT/TIME_WAIT 超时。
- 如果服务器满载:立即添加 Cloudflare 或其他 CDN/WAF 作为前端。
注意:配置超时和连接限制时,需结合业务正常情况(例如上传大文件需要较长时间)进行调优,如果误杀正常用户(如校园网、企业 VPN 后的用户),可以将限制放宽至 30s 或通过 IP 白名单豁免。