使用 Logformat 将掩码应用于 IP

elh*_*tis 4 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
Run Code Online (Sandbox Code Playgroud)

要获得第二个日志,我可以通过管道传输这样的 perl/shell post 脚本:

CustomLog |/usr/local/shl/apache_syslog2
Run Code Online (Sandbox Code Playgroud)

但我对这个解决方案并不满意。可以用 Apache 做到这一点吗?

谢谢。

埃里克

小智 5

它可以更简化:

  1. 只需使用SetEnvIffrom module mod_setenvif来创建基于Remote_Addr.
  2. 使用正则表达式来确定要屏蔽的部分。
  3. 最后MASKED_IP_ADDR在 LogFormat 语句中引用变量(例如),如下所示:

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

当然,您也可以选择正确的 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]?)$
Run Code Online (Sandbox Code Playgroud)

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