これは、 X-Forwarded-複数のプロキシにまたがるIPアドレスの場合 のキャプチャに関する以前の質問からのフォローアップです。今、私はアプリケーションの(ShibbolethのIdP)ログにクライアントのIPをキャプチャしようとしています。
以下は次のとおりです。
Client > Load Balancer > Apache httpd server > Tomcat server (running Shibboleth's IdP)
ロードバランサーでのクライアントのIPを持つ変数はClientIP
であり、これはLogFormat "%{ClientIP}i ... " and similarly in Tomcat's access logs using these in
server.xml`を使用してWebサーバーのログに取り込むことができます。
<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"/>
今、私はこのIPをShibbolethのIdP監査ログに記録しようとしています。 このディスカッション Apacheでのmod_rpaf
の使用について説明していますが、詳細については説明していません。追加のモジュールをインストールせずにやりたいと思っています。
ここにいくつかの(小さい?)部分が欠けているようです。何か案は?どうもありがとう!
LogBackの クライアントIPのログ記録に関するドキュメント および MDCInsertingServletFilterサーブレットの対応するコード を調べた後、X-Forwarder-For
ヘッダーを使用する必要があることがわかりました。
ロードバランサーでClientIP
をX-Forwarder-For
に置き換え、httpd.conf
のLogFormat
をログX-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-processにも同様の変更を加えました、およびはTomcatのログを更新する必要はありませんでした。
これが他の人に役立つことを願っています。
編集1:Tomcatロギング
しばらくすると、X-Forwarded-For
IPアドレスがShibのIdPログに表示されなくなったことが判明しました。最終的にTomcatにRemoteIpValve
を追加し、再起動しました。結局必要なようです:
<Valve className="org.Apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
trustedProxies="--IPs here--"
protocolHeaderHttpsValue="https" />