防范slowloris攻击的核心是主动切断低效连接、分阶段限速(mod_reqtimeout)、禁用高危入口keepalive、协同收紧timeout与keepalivetimeout、采用event mpm并限制maxrequestworkers,而非单纯调大超时。

防范慢速死连接攻击(如 Slowloris)的核心,不是单纯调大超时,而是主动切断低效连接、限制复用、分阶段校验传输节奏。Apache 本身不提供“按虚拟主机设 KeepAliveTimeout”的能力,但有更有效、更可控的组合策略。
禁用高危入口的 Keep-Alive
对登录页、API 接口、Webhook 等面向公网的入口,直接关闭连接复用最简单有效:
- 在对应
<virtualhost></virtualhost>块中添加:KeepAlive Off - 这样每个请求走独立短连接,避免攻击者用一个 TCP 连接反复发半截请求再静默等待
- 尤其适合无状态接口,HTTP/1.1 下的开销远小于被耗尽 MaxRequestWorkers 的风险
用 mod_reqtimeout 分阶段限速
这是 Apache 官方推荐的慢速攻击防御模块,比全局 Timeout 精准得多:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保已加载:
LoadModule reqtimeout_module modules/mod_reqtimeout.so - 在服务器级或虚拟主机配置中加入(不能放在
<directory></directory>内):RequestReadTimeout header=15-40,minrate=500 body=20,minrate=300 - 含义:头必须在 15 秒内开始传、40 秒内传完,且任意 2 秒至少 1000 字节;体传输每 20 秒至少 300 字节,否则断连
- HTTPS 站点建议 header 初始值放宽到 20 秒,避免 TLS 握手延迟误杀
收紧空闲与整体超时参数
两个超时要协同设置,避免逻辑冲突:
-
KeepAliveTimeout设为 2–5 秒(静态站可略高,API 服务建议 3 秒) -
Timeout建议压到 15–30 秒(默认 300 秒极易被利用) - 切忌
Timeout ,否则空闲连接还没等到释放就因总超时被杀,行为不可预测 - 若用反向代理(如 proxy to Tomcat),
ProxyTimeout必须小于后端超时,防止“悬挂连接”
配合 MPM 与连接数限制
底层模型和资源上限决定防御天花板:
- 优先使用
eventMPM(非 prefork/worker),它对慢连接的调度更高效 - 设
MaxRequestWorkers为合理值(如 128–256),避免线程池被占满 - 搭配
mod_evasive封禁高频新建连接的 IP:DOSPageCount 2(单页每秒最多 2 次)、DOSSiteCount 50(全站每秒最多 50 次) - 用
limit_req在更底层限流,例如每 IP 每秒最多 10 个新连接










