在Shibboleth的审计日志中loggingX-Forwarded-For IP

这是我之前关于在多个代理中捕获X-Forwarded-For IP地址的后续问题。 现在,我正在寻找在应用程序(Shibboleth的IdP)日志中捕获客户端的IP。

以下是:

Client > Load Balancer > Apache httpd server > Tomcat server (running Shibboleth's IdP) 

负载平衡器上客户IP的variables是ClientIP ,我可以使用LogFormat "%{ClientIP}i ... " and similarly in Tomcat's access logs using these in在Web服务器的日志中捕获这个variables, LogFormat "%{ClientIP}i ... " and similarly in Tomcat's access logs using these in

 <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="ClientIP" protocolHeaderHttpsValue="https" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{ClientIP}i %h %l %u %t %r %>s %b %{Referer}i %{User-Agent}i" resolveHosts="false"/> 

现在,我正在寻找Shibboleth的IdP审计日志中的这个IP。 这个讨论讨论了使用Apache的mod_rpaf ,但没有涉及细节。 我希望没有安装额外的模块。

看起来我在这里错过了几个(小?)件。 有任何想法吗? 非常感谢!

挖掘LogBack 关于logging客户端IP的文档和MDCInsertingServletFilter servlet的相应代码后 ,事实certificate,您必须使用X-Forwarder-For头。

我们用X-Forwarder-Forreplace了ClientIP ,在负载均衡器中更新了httpd.confLogFormat以loggingX-Forwarder-For ,然后更新了Shibboleth的logging.xml文件,如下所示:

 <appender name="IDP_AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>/app/shibboleth-idp/logs/idp-audit.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>/app/shibboleth-idp/logs/idp-audit-%d{yyyy-MM-dd}.log</FileNamePattern> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <charset>UTF-8</charset> <Pattern>%msg|%X{req.xForwardedFor}|%n</Pattern> </encoder> </appender> 

我们也对idp进程进行了类似的更改,而不必更新Tomcat的日志logging

希望这可以帮助别人。

编辑1:Tomcat日志logging

原来,过了一会儿, X-Forwarded-For IP地址停止出现在Shib的IdP日志中。 我们最终在tomcat中添加了RemoteIpValve并重新启动。 看起来毕竟是需要的:

  <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" trustedProxies="--IPs here--" protocolHeaderHttpsValue="https" />