我可以在错误日志中打印 apache 环境变量吗?

我可以在错误日志中打印 apache 环境变量吗?

我想将 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}emod_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

相关内容