ModSecurity 引擎模式是什么
ModSecurity 用 SecRuleEngine 指令控制引擎的整体行为,共三种模式:On 表示规则生效并执行动作,DetectionOnly 表示规则只记录不拦截,Off 表示完全关闭。工程实践里的标准路径是先用 DetectionOnly 调优——观察哪些规则在真实业务流量上误报,逐条处理后,再切到 On 正式防护。需要特别注意:DetectionOnly 下所有阻断动作都不生效,配置看起来有防护,实际上是只有日志、没有拦截。
基本信息
| On | 规则生效并执行动作,包括阻断 |
|---|---|
| DetectionOnly | 规则只记录不拦截,用于调优与观察 |
| Off | 完全关闭引擎,仅用于排障 |
| 配置位置 | 主配置文件中通过 SecRuleEngine 指令设置,可按虚拟主机覆盖 |
| 生效方式 | 修改后需重载或重启 Web 服务 |
| 配套设置 | 规则级动作(deny、pass)与例外需单独配置 |
典型使用场景
- 新站点接入:先用 DetectionOnly 跑一个完整业务周期,收集误报情况
- 调优完成后切换到 On,开始真正执行拦截
- 排查防护规则引发的问题:临时切 DetectionOnly,确认是否与本引擎相关
- 规则集大版本升级后重新进入观察模式,重新评估兼容性
- 排障场景:确认是否由 ModSecurity 引起时短暂使用 Off
- 多站点差异化:按虚拟主机设置不同模式,让新站点先观察、老站点继续拦截
配置示例
配置示例
# 调优阶段:规则命中只记录,不阻断请求
SecRuleEngine DetectionOnly
# 误报处理完成、观察期结束后切换为正式防护:
# SecRuleEngine On
# 仅在排障时使用,切勿长期保留:
# SecRuleEngine Off
# 提示:改完配置需重载服务,且要在日志中确认规则确实在命中模式对比
| 模式 | 是否拦截 | 适用阶段 | 风险 |
|---|---|---|---|
| On | 是,按规则动作执行 | 正式防护,误报已治理后 | 规则误报会直接影响业务 |
| DetectionOnly | 否,只记录 | 上线调优、规则大改后观察 | 误以为已防护,实际全部放行 |
| Off | 否,引擎不工作 | 排障,禁止长期使用 | 完全无防护且无告警日志 |
引擎模式是全局或按虚拟主机生效的粗粒度开关,规则级动作还需在规则本身或按规则标识的例外里设置,两者配合才能做到「总体拦截、个别规则只告警」。
切换模式属于变更操作:切换前保留配置备份与回退命令,切换后按业务功能清单复测一遍,避免因为误报导致功能不可用。
长期停留在 DetectionOnly 会让人误以为防护已生效:攻击流量被完整记录也完整放行,日志看起来热闹,实际没有任何拦截。