web-dev-qa-db-ja.com

X-Forwarded-ForIPをShibbolethの監査ログに記録する

これは、 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 inserver.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の使用について説明していますが、詳細については説明していません。追加のモジュールをインストールせずにやりたいと思っています。

ここにいくつかの(小さい?)部分が欠けているようです。何か案は?どうもありがとう!

1
KM.

LogBackの クライアントIPのログ記録に関するドキュメント および MDCInsertingServletFilterサーブレットの対応するコード を調べた後、X-Forwarder-Forヘッダーを使用する必要があることがわかりました。

ロードバランサーでClientIPX-Forwarder-Forに置き換え、httpd.confLogFormatをログ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-ForIPアドレスがShibのIdPログに表示されなくなったことが判明しました。最終的にTomcatにRemoteIpValveを追加し、再起動しました。結局必要なようです:

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