Timeout参数仅控制请求头读取阶段超时,不管理请求体传输;真正防御慢速攻击需依赖mod_reqtimeout模块的分阶段限速(如header=10-30,minrate=500、body=10,minrate=500),并协同调低Timeout避免成为长等待窗口。

单纯调大或调小 Timeout 参数并不能直接防御慢速 HTTP 头部攻击,它只是基础水位线。真正起效的是 mod_reqtimeout 模块配合合理的超时与速率控制,而 Timeout 需要协同调低,避免成为攻击者可利用的“长等待窗口”。
Timeout 参数的真实作用和风险点
Timeout 控制的是整个请求生命周期的最大等待时间(包括连接建立、头接收、体接收、响应生成等全部阶段),默认值通常是 300 秒。对慢速头部攻击而言:
- 如果设得过大(如 300 秒),攻击者发送一个 GET / 后停住,服务器会傻等整整 5 分钟才断连——这正是 Slowloris 类攻击最想要的效果
- 它不区分阶段,无法单独约束“只收头部”这个关键耗时环节
- 它不校验传输速率,哪怕每 20 秒只发一个字母,只要总时长没超,连接就一直挂着
必须搭配 mod_reqtimeout 才能精准防御头部攻击
mod_reqtimeout 是 Apache 中唯一专为慢速头部设计的内置模块。它不依赖 IP 封禁,而是通过“时间窗口 + 最小速率”双阈值实时丢弃异常连接:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- header=10-40,minrate=500:要求客户端在 10 秒内开始传头,任意 2 秒内至少传 1000 字节(500 字节/秒),且总头接收时间不能超过 40 秒
- 该指令必须放在服务器级上下文(httpd.conf、VirtualHost 或 global server config),不能写在
或 .htaccess 中 - 确认模块已启用:
LoadModule reqtimeout_module modules/mod_reqtimeout.so
HTTPS 站点需特别上调初始超时
SSL/TLS 握手本身有延迟,尤其在高负载或弱客户端环境下。若用 header=10-40,可能误杀合法 HTTPS 请求:
- 建议 HTTPS 站点将初始值设为 header=20-40,minrate=500
- 不要省略 body= 参数——否则 POST 的 body 阶段完全不受限,攻击者可绕过头部防护直击 body 慢速上传
- 典型安全配置示例:
RequestReadTimeout header=20-40,minrate=500 body=20-60,minrate=500
验证是否生效的三个关键动作
配完不等于防住,必须实测确认:
- 重启 Apache(
systemctl restart apache2或apachectl graceful),不是 reload - 用
slowhttptest -c 1 -t GET -u http://your-site/ -i 15 -r 1模拟每 15 秒发一个头部字符,观察连接是否在 40 秒内被主动关闭 - 检查 error_log,出现
client denied by server configuration或request timeout类日志才算成功拦截










