apache limitrequest*系列指令是防御头部型、体内容型ddos最直接低开销手段;limitrequestfields应设为40并全局配于主配置文件,配合limitrequestfieldsize 2048和limitrequestbody按路径设限,再验证生效。

Apache 的 LimitRequest* 系列指令是防御头部型、体内容型 DDoS 攻击最直接、最低开销的手段——不依赖第三方模块,不引入额外延迟,且在请求解析早期就拦截恶意流量。关键不在“配没配”,而在“配得准不准、放得对不对、验得实不实”。
LimitRequestFields:防“空头轰炸”,40 是当前合理基线
默认值 100 是为兼容老旧客户端妥协的结果,不是安全水位。现代 Web 应用(含前端 SDK、JWT 透传、多层代理注入)合法请求常达 30–60 个 Header;攻击者发 200 个 X-Foo-01: a 类空头,就能让 Apache 为每个头分配内存结构、复制字符串、维护链表,迅速拖垮 worker 进程。
- 必须写在主配置文件全局作用域:
/etc/apache2/apache2.conf(Debian/Ubuntu)或/etc/httpd/conf/httpd.conf(RHEL/CentOS),放在<ifmodule mpm_event_module></ifmodule>外的主段,不能 放.htaccess或单个<virtualhost></virtualhost>内部 - 推荐值设为
LimitRequestFields 40:覆盖绝大多数真实业务,同时把攻击成本抬高到需构造 41+ 头才能触发 - 配完立即验证:
apache2ctl -t -D DUMP_RUN_CFG | grep LimitRequest应输出你设置的数值;再用curl -H "X-1:a" -H "X-2:b" ... -H "X-41:z" http://localhost/测试,应返回400 Bad Request
LimitRequestFieldSize:堵住“长头绕过”,2048 字节是平衡点
只限数量不限长度,等于留后门。攻击者可发 35 个头,其中一个是 10KB 的伪造 Cookie 或超长 JWT,照样撑爆 Apache 内部栈缓冲区,触发堆分配,扩大攻击面。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 同步设置
LimitRequestFieldSize 2048:单位是字节(非字符),覆盖所有 Header 值,包括Host、User-Agent - 勿设为 0 或过大(如 65536):Apache 解析头时优先用固定大小栈缓冲,超出才 fallback 到堆,后者更易被利用
- 若业务含 IoT 设备等异常 UA,先抽样
access.log确认实际最大长度,再微调,避免误拦
LimitRequestBody:卡死大表单,按路径精准设限
这是防御 POST/PUT 类 DoS 最轻量有效的手段,但极易因作用域错配而失效——它不走 .htaccess,也不认 <location></location>(对 alias 无效),唯一可靠位置是 <virtualhost></virtualhost> 块内或明确的 <directory></directory> 路径块。
- 虚拟主机级统一限制:在
<virtualhost></virtualhost>块中直接加LimitRequestBody 5242880(5MB),覆盖全站上传与 API 接口 - 目录级精细控制:针对上传接口路径(如
/zentao/file-upload.html),在对应<directory></directory>块中设置,值建议比 PHP 的upload_max_filesize高 100KB,以容纳 multipart boundary 开销 - 验证必须用真实 multipart 请求:
curl -F "file=@test.bin" -F "desc=中文测试" http://yoursite.com/upload.php,预期返回413 Request Entity Too Large,而非 PHP 层报错
配套收紧,闭环防护
单靠一个 LimitRequest* 指令无法形成防线。攻击者会切换策略:绕过体大小限制发海量小请求,或用长 URL 触发未设防的 LimitRequestLine。
- 同步收紧
LimitRequestLine 8190:覆盖常见长查询、重定向跳转场景,除非你明确需要支持超长 URL(如某些调试工具),否则无需调大 - 搭配
Timeout 10:缩短请求解析与读取超时,防止慢速攻击(Slowloris)长期占用工作者连接 - 禁用无用模块、启用
mod_security基础规则、配合系统级ulimit限制文件描述符,构成纵深防御










