4

我需要在 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 脚本:

CustomLog |/usr/local/shl/apache_syslog2

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

谢谢。

埃里克

4

2 回答 2

6

它可以更简化:

  1. 只需使用SetEnvIffrom 模块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
    

当然,您也可以选择正确的 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'.

于 2018-08-21T14:47:59.617 回答
1

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

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

参考

于 2013-10-25T22:10:00.503 回答