如何打造好用的ModSecurity系列 Part 2
字数 1515 2025-08-09 22:00:49
ModSecurity规则体系深度解析与配置指南
一、ModSecurity规则引擎配置
1.1 核心配置参数
-
SecRuleEngine:
- On:开启WAF功能
- Off:关闭WAF功能
- Detection Only:只检测不阻断
-
请求体处理:
SecRequestBodyAccess:控制是否检测请求体- 支持多种格式解析:
- XML:匹配
Content-Type为(?:application(?:/soap\+|/)|text/)xml - JSON:匹配
application/json - Multipart:严格格式校验
- XML:匹配
-
响应体处理:
SecResponseBodyAccess:控制是否检测响应包
-
调试与日志:
SecDebugLogLevel:调试日志级别(建议不要设置过高)SecAuditEngine:审计日志引擎SecAuditLogRelevantStatus:记录特定状态码的事务
1.2 审计日志配置
SecAuditLogParts参数控制审计日志记录内容:
- A:审计日志头(必须)
- B:请求头
- C:请求体(需
SecRequestBodyAccess开启) - I:替代C部分,不记录上传的文件
- J:multipart上传文件信息
- E:中间响应体
- F:最终响应头
- H:审计日志追踪
- K:匹配到的所有规则(V2.5.0+)
- Z:结尾分界线(必须)
二、ModSecurity规则体系解析
2.1 事务生命周期
-
阶段1:请求头处理
- 验证请求头相关规则
- 决定如何解析请求体
-
阶段2:请求体处理
- 解析请求体数据
- 验证请求体相关规则
-
阶段3:响应头处理
- 验证响应头相关规则
-
阶段4:响应体处理
- 解析响应体数据
- 验证响应体相关规则
-
阶段5:日志记录
- 记录事务信息
- 包括命中规则和处理方式
2.2 规则分级机制(PL)
-
分级原理:
- PL1-PL4四个级别
- 级别越高,漏报越少但误报越多
- 默认PL=1
-
实现方式:
- 使用
skipAfter和SecMarker指令 - 通过规则文件中的位置进行分级
- 使用
-
示例配置:
SecRule TX:EXECUTING_PARANOIA_LEVEL "@lt 1" "id:920011,phase:1,pass,nolog,skipAfter:END-REQUEST-920-PROTOCOL-ENFORCEMENT"
# PL1规则
SecRule TX:EXECUTING_PARANOIA_LEVEL "@lt 2" "id:920013,phase:1,pass,nolog,skipAfter:END-REQUEST-920-PROTOCOL-ENFORCEMENT"
# PL2规则
SecMarker "END-REQUEST-920-PROTOCOL-ENFORCEMENT"
2.3 检测模式
2.3.1 自主模式(Self-contained)
-
特点:
- 命中规则直接拦截
- 规则间无关联
- 性能较好但误报率高
-
配置示例:
SecDefaultAction "phase:1,log,auditlog,deny,status:403"
SecDefaultAction "phase:2,log,auditlog,deny,status:403"
2.3.2 评分模式(Anomaly Scoring) - 默认模式
-
特点:
- 规则赋予权重分数
- 累计分数达到阈值才拦截
- 更灵活但性能消耗较大
-
配置示例:
SecDefaultAction "phase:1,log,auditlog,pass"
SecDefaultAction "phase:2,log,auditlog,pass"
2.4 评分机制详解
- 权重初始化:
SecAction "
id:901200,
phase:1,
pass,
t:none,
nolog,
setvar:'tx.anomaly_score=0',
setvar:'tx.sql_injection_score=0',
setvar:'tx.xss_score=0',
..."
-
规则严重级别:
- CRITICAL:5分
- ERROR:4分
- WARNING:3分
- NOTICE:2分
-
拦截判断:
SecRule TX:ANOMALY_SCORE "@ge %{tx.inbound_anomaly_score_threshold}" "
id:949110,
phase:2,
deny,
t:none,
msg:'Inbound Anomaly Score Exceeded (Total Score: %{TX.ANOMALY_SCORE})'"
- 分数类型:
- 全局分数:
tx.anomaly_score - 漏洞类型分数:如
tx.xss_score - PL级别分数:
tx.anomaly_score_pl1等
- 全局分数:
三、最佳实践建议
-
规则分级:
- 生产环境建议从PL1开始
- 逐步提高PL级别并监控误报
-
评分机制优化:
- 调整权重分数分配
- 设置合理的拦截阈值
- 考虑多维度评分(全局+类型+PL)
-
性能考量:
- 避免过高的调试日志级别
- 合理选择审计日志记录内容
- 根据业务特点选择检测模式
-
格式校验:
- 利用严格的multipart解析防御绕过
- 注意可能导致的误报情况
四、总结
ModSecurity提供了灵活的规则体系,通过:
- 多阶段事务处理
- 可配置的规则分级
- 智能的评分机制
- 多种检测模式
管理员可以根据实际业务需求,在安全防护和性能消耗之间找到平衡点。建议初次部署时采用评分模式,从低PL级别开始,逐步调整配置参数,最终形成适合自身业务的安全防护方案。