SecRuleEngine设为On表示激活ModSecurity防火墙,检测并阻止恶意攻击;设为DetectionOnly则仅记录不拦截,生产环境必须设为On以确保防护实效。

SecRuleEngine设成On还是DetectionOnly
生产环境必须设为SecRuleEngine On,设成DetectionOnly只会记录不拦截,等于裸奔。但刚启用时建议先切到DetectionOnly跑24小时,看日志里Matched "rx..."的规则触发频率——如果id:980130(异常评分)每分钟刷屏,说明阈值太低或规则太激进,得调参再切回On。
CRS异常评分阈值怎么调才不误杀
默认tx.anomaly_score_threshold是5分,实际业务中常把正常表单提交、AJAX轮询、前端资源加载全打成攻击。直接关规则风险大,优先改阈值:
- 在虚拟主机配置里加
SecAction "id:900120,phase:1,pass,nolog,tag:'OWASP_CRS',setvar:tx.anomaly_score_threshold=10" - 若某接口固定触发
id:942100(SQLi URI检测),用SecRuleRemoveById 942100精准剔除,保留参数体检测(id:942110等) - 对API路径放行评分:比如
SecRule REQUEST_URI "@beginsWith /api/" "id:1002,phase:1,pass,nolog,ctl:ruleRemoveByTag=OWASP_CRS"
SecResponseBodyAccess影响哪些防护能力
不开启SecResponseBodyAccess On,所有基于响应体的规则都失效,比如防敏感信息泄露(数据库报错、源码泄漏)、防后门响应特征(eval(、base64_decode)。但开启后会增加CPU开销,尤其大响应体(如图片、JSON列表)。折中方案:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 只对动态路径开启:
SecResponseBodyAccess On放全局,再用SecRule REQUEST_URI "@streq /static/" "id:1003,phase:1,pass,nolog,ctl:forceRequestBodyVariable=Off,ctl:responseBodyAccess=Off" - 限制响应体扫描大小:
SecResponseBodyLimit 524288(512KB),超限跳过解析
APR版本不匹配会导致规则静默失效
ModSecurity: APR compiled version mismatch不是警告,是致命错误——模块加载成功但所有规则不执行。CentOS/RHEL上常见于系统自带Apache(用系统APR)和手动编译mod_security(用源码APR)混用。验证方式:
- 查错误日志:
tail -f /var/log/httpd/error_log,出现该错误就停用 - 确认APR版本:
httpd -V | grep -i apr和modsecurity -V 2>/dev/null | grep -i apr输出必须一致 - 修复路径:重装
mod_security包(用yum install mod_security而非源码编译),或统一用SCL仓库的httpd24套件
真正难调的不是参数本身,而是不同规则间的依赖关系——比如id:900100(基础初始化)没加载,后续所有SQLi规则都会跳过检测,但日志里连匹配记录都没有。上线前务必用curl -v "http://localhost/?id=1%27"配合tail -f error_log实测关键规则是否真生效。


















