使用Logformat将掩码应用于IP

时间:2013-10-18 14:49:42

标签: apache ip masking

我需要在Apache的日志中对IP应用掩码。

例如,我有这个日志: 192.168.234.111 - - [18 / Oct / 2013:16:29:40 +0200]“GET ........”

我想保存: 192.168.234.xxx - - [18 / Oct / 2013:16:29:40 +0200]“GET ........”

要做第一个日志,我正在使用这样的日志格式。

LogFormat "%h %l %u %t" combined-syslog2
CustomLog /var/log/toto combined-syslog2

要获得第二个日志,我可以像这样管道perl / shell post脚本:

CustomLog |/usr/local/shl/apache_syslog2

但我对这个解决方案不满意。是否有可能用Apache做到这一点?

感谢。

埃里克

2 个答案:

答案 0 :(得分:4)

它甚至可以进一步简化:

  1. 只需使用模块mod_setenvif中的SetEnvIf,即可基于Remote_Addr创建一个环境变量。
  2. 使用正则表达式确定要遮罩的部分。
  3. 最后在您的LogFormat语句中引用变量(例如MASKED_IP_ADDR),如下所示:

    SetEnvIf Remote_Addr "((?:\d{1,3}\.){3})\d{1,3}" MASKED_IP_ADDR=$1XXX
    LogFormat "%{MASKED_IP_ADDR}e %l %u %t" combined-syslog2
    

当然,您也可以使用正确的IP地址正则表达式:

^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3})(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

这一个捕获了前三个八位字节,因此最后一个可以被'XXX'替换。

答案 1 :(得分:1)

以下是在Apache中执行此操作的方法:

  • 使用与所有IP地址匹配的RewriteCondition
  • 将部分IP地址存储在反向引用中
  • 使用RewriteRule将部分IP + xxx存储在环境变量中(例如VARNAME
  • 通过LogFormat
  • %{VARNAME}e声明中引用环境变量

<强>参考