Apache 防御慢速 HTTP 攻击需启用 mod_reqtimeout 模块并分阶段配置 header 和 body 超时,调优 KeepAliveTimeout、禁用高危接口复用,搭配 event MPM 与连接数限制,最后通过 slowhttptest 实测验证。

Apache 的 Timeout 参数本身防不住慢速 HTTP 攻击,它只管请求头读取初期的几个环节,对慢传 body、空闲长连接或逐字节发头完全无效。真正起效的是 mod_reqtimeout 模块的分阶段限速配置,配合 MPM 调优和连接限制才能形成闭环防护。
必须启用并正确配置 mod_reqtimeout
该模块是 Apache 防御 Slowloris 类攻击的核心,需显式加载并设置 header 和 body 两阶段超时:
- 确认模块已启用:
LoadModule reqtimeout_module modules/mod_reqtimeout.so - 在服务器级上下文(不能写在
块里)添加: RequestReadTimeout header=10-30,minrate=500RequestReadTimeout body=10,minrate=500 - 含义说明:
— header=10-30:客户端必须在 10 秒内开始发头,30 秒内发完全部头字段,且任意 2 秒内至少传 1000 字节(minrate=500 字节/秒)
— body=10,minrate=500:每 10 秒内至少收到 500 字节请求体,否则立即断连
合理调优 KeepAliveTimeout 和禁用高风险场景的 KeepAlive
KeepAlive 是慢速攻击复用连接的关键路径,不能只靠超时,更要控制复用行为:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 将
KeepAliveTimeout设为 2–5 秒,避免空闲连接长期滞留 - 面向公网的登录页、API 入口等高危接口,直接关闭复用:
KeepAlive Off - 若保留 KeepAlive,务必同步降低
MaxKeepAliveRequests至 20–50,防止单连接反复滥用
搭配 event MPM 与连接数限制
MPM 类型决定资源调度逻辑,event 模式是防御基础:
- 启用
eventMPM(非 prefork 或 worker),利用异步事件模型减少慢连接对线程的独占 - 设置
MaxRequestWorkers(旧版叫 MaxClients),建议 100–200,避免被耗尽 - 可选增强:加载
mod_evasive封禁高频短连接(如单 IP 每秒超 50 次新连),与 mod_reqtimeout 分层互补
验证配置是否真实生效
改完配置不等于防护就位,必须实测行为:
- 用
slowhttptest -c 10 -t GET -u http://your-site/ -i 10 -r 1模拟慢头注入,观察是否在 30 秒内断连 - 检查
ErrorLog中是否有request read timeout或client denied记录(确保 LogLevel 至少为 info) - 重启服务后运行
apachectl -M | grep reqtimeout确认模块已加载

















