Apache防范慢速HTTP攻击不能靠Timeout指令,必须启用mod_reqtimeout模块并配置RequestReadTimeout header=20-40,minrate=500和body=10-40,minrate=500,同时关闭KeepAlive或收紧KeepAliveTimeout、协调Timeout与MPM参数。

Apache 防范慢速 HTTP 攻击(如 Slowloris、Slow POST)不能靠单个 Timeout 指令解决,必须启用并正确配置 mod_reqtimeout 模块,配合连接层参数协同生效。关键在于控制请求头和请求体的接收速率与时间窗口,而不是简单拉长全局超时。
启用 mod_reqtimeout 并配置 RequestReadTimeout
该模块是 Apache 官方推荐的慢连接防护核心机制,只能在服务器级或 VirtualHost 级使用,不支持写在 <Directory> 或 .htaccess 中。
- 确认模块已加载:在
httpd.conf中取消注释这行(路径可能因安装方式略有不同):LoadModule reqtimeout_module modules/mod_reqtimeout.so - 添加如下配置(建议放在
<IfModule reqtimeout_module>块内):RequestReadTimeout header=20-40,minrate=500 body=10-40,minrate=500 - 含义说明:
•header=20-40,minrate=500:请求头必须在 20 秒内开始接收,之后每 500 字节至少要传一次数据,超时上限为 40 秒;HTTPS 站点建议起始值设为 20 秒以上。
•body=10-40,minrate=500:请求体从第一个字节起,每 500 字节需在 1 秒内送达,总耗时不超过 40 秒。
关闭 KeepAlive 或收紧空闲等待时间
Slowloris 类攻击依赖长期保持半开连接,禁用持久连接可直接切断攻击路径。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 对高风险接口(如登录页、API 入口),在对应
<VirtualHost>中设置:KeepAlive Off - 若需保留 KeepAlive(如静态资源站),则严格限制:
KeepAliveTimeout 3MaxKeepAliveRequests 100 - 避免
KeepAliveTimeout大于RequestReadTimeout的上限,否则攻击者可能绕过速率控制。
同步调整基础连接超时参数
这些参数虽不直接防慢攻击,但构成整体连接生命周期控制的基础,必须与 RequestReadTimeout 协调。
-
Timeout 25:控制请求接收、响应发送等 I/O 阻塞环节,设为略大于RequestReadTimeout的最大值(如 40),避免冲突;生产环境严禁设为 0。 -
ProxyTimeout 20(如使用反向代理):专用于后端响应等待,必须显式设置且 ≤Timeout,否则代理请求会卡死。 - 确保
ServerLimit、MaxRequestWorkers等 MPM 参数合理,防止连接池被慢连接耗尽。
验证与生效步骤
配置不是写完就起效,漏掉验证容易白忙一场。
- 语法检查:
Debian/Ubuntu 执行sudo apachectl configtest;RHEL/CentOS 执行sudo httpd -t - 重启服务:
sudo systemctl restart apache2(Debian系)或sudo systemctl restart httpd(RHEL系) - 观察日志:
实时查看错误日志:tail -f /var/log/apache2/error.log或/var/log/httpd/error_log,留意是否出现request timed out或client denied by server configuration类告警。

















