我想将 mod_security 异常分数打印到 apache 错误日志中。我使用setenv
设置环境变量和%{name}e
语法将其打印到日志中。
Modsecurity 配置:
SecAction "id:90100,phase:5,pass, nolog, setenv:ModSecAnomalyScoreIn=%{tx.anomaly_score}, setenv:ModSecAnomalyScoreOut=%{TX.outbound_anomaly_score}"
Apache 配置:
ErrorLogFormat "[...] [anomaly_score_in: %-{ModSecAnomalyScoreIn}e, anomaly_score_out: %-{ModSecAnomalyScoreOut}e ]"
但输出是空的:
[...] [anomaly_score_in: -, anomaly_score_out: - ]
如果我添加SecAction "id:9990101,phase:5,pass, log, msg:'in: %{env.anomaly_score}, out: %{env.ModSecAnomalyScoreOut}'
,分数就会打印出来,但在新的日志行中。
我哪里做错了?
在%{name}e
错误日志格式等于%{VARNAME}e
mod_log_config?
答案1
为什么在第一个不起作用的示例中,在%
和之间有一个破折号?{
此外Modsecurity 参考手册说你应该使用%{modsecurity_variable_name}M
而不是%{modsecurity_variable_name}e
。
所以我相信你的最终配置应该是:
ErrorLogFormat "[...] [anomaly_score_in: %{ModSecAnomalyScoreIn}M, anomaly_score_out: %{ModSecAnomalyScoreOut}M ]"
还要注意,自定义 ErrorLogFormats 仅适用于 ModSecurity 2.9.1 或更高版本:https://github.com/SpiderLabs/ModSecurity/pull/840