apache可通过mod_evasive限频、limitrequestfields/size防内存耗尽、mod_security防特征攻击三项配置构建轻量纵深防护,每项均可独立验证生效。

启用并调优 mod_evasive(防高频请求)
这是中小站点最常用的请求频率控制模块,对单 IP 刷首页、爆破登录页、CC 类攻击响应快、内存占用小。
- 确认已启用:
sudo a2enmod evasive(Debian/Ubuntu)或检查/etc/httpd/conf.d/mod-evasive.conf是否存在且未被注释(RHEL/CentOS) - 日志目录必须提前创建并赋权:
sudo mkdir -p /var/log/mod_evasive && sudo chown www-data:www-data /var/log/mod_evasive - 核心参数建议(按典型业务微调):
- DOSPageCount 3 + DOSPageInterval 1:同一 IP 1 秒内访问相同页面超 3 次即触发(适合防护登录页、搜索页)
- DOSSiteCount 50 + DOSSiteInterval 1:整站每秒最多 50 请求(SPA 首屏加载通常含 10–20 个资源,此值留有余量)
- DOSBlockingPeriod 600:封禁时长设为 600 秒(10 分钟),太短易绕过,太长易误伤
- 加白可信来源:
DOSWhitelist 127.0.0.1 192.168.1.0/24,避免监控或内网工具被误封
- 验证是否生效:用
ab -n 100 -c 30 http://your-site/发起压测,立即查看tail -f /var/log/mod_evasive.log,应出现Blacklisted for exceeding request limits
强制限制请求头数量与长度(防内存耗尽)
攻击者可构造数百空 Header 或超长 Cookie,导致 Apache 解析时内存暴涨甚至崩溃。默认 LimitRequestFields 100 是历史兼容值,非安全值。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 该指令只能写在主配置文件中(
/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf),不可放在 .htaccess 或虚拟主机内 - 添加两行(缺一不可):
- LimitRequestFields 40:单个请求最多允许 40 个 Header 字段(覆盖现代前端 SDK、JWT、多层代理等常见场景)
- LimitRequestFieldSize 2048:每个 Header 值最大 2048 字节(防止单个超长字段撑爆栈缓冲区)
- 验证方式:
curl -H "X-Test-01: a" -H "X-Test-02: b" ...逐步增加头数量,第 41 个头时应返回400 Bad Request - 运行时检查:
apache2ctl -t -D DUMP_RUN_CFG | grep LimitRequest,输出需包含你设置的数值
启用 mod_security 基础规则(防特征化攻击)
作为 Web 应用防火墙(WAF),它能识别 SQL 注入、XSS、扫描路径等恶意模式,是 mod_evasive 的重要补充。
- 安装后启用:
sudo a2enmod security2(Debian/Ubuntu)或确保mod_security2.so已加载 - 最小必要配置(避免规则过严影响业务):
- SecRuleEngine On:开启引擎
- SecRequestBodyAccess On:检查 POST 数据体
- SecResponseBodyAccess Off:响应体检查可先关闭,减少开销
- SecRequestBodyLimit 134217728(128MB):防大文件上传耗尽内存
- 搭配一条简单规则防暴力请求:
SecRule REQUEST_LINE "@rx /wp-login\.php|/admin/login\.php" "id:1002,phase:1,deny,status:403"(按实际后台路径调整)
- 务必使用
apache2ctl configtest检查语法,再重启服务










