Это продолжение моего предыдущего вопроса о захвате X-Forwarded-For IP-адрес через несколько прокси. Теперь я хочу записать IP-адрес клиента в журналы приложения (IdP Shibboleth).
Следующее:
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`:
<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-адрес в журналах аудита IdP Shibboleth. Это обсуждение говорит об использовании mod_rpaf
для Apache, но не вдавался в подробности. Надеюсь обойтись без установки дополнительных модулей.
Похоже, мне здесь не хватает пары (маленьких?) Деталей. Любые идеи? Большое спасибо!
Покопавшись в LogBack's документация по регистрации IP-адресов клиентов и соответствующий код для сервлета MDCInsertingServletFilter, оказывается, вы должны использовать X-Forwarder-For
заголовок.
Мы заменили ClientIP
с участием X-Forwarder-For
в балансировщике нагрузки обновлено httpd.conf
с LogFormat
войти X-Forwarder-For
, затем обновил Shibboleth's 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.
Надеюсь, это поможет другим.
Изменить 1: ведение журнала Tomcat
Оказывается, через некоторое время X-Forwarded-For
IP-адрес перестал отображаться в журналах IdP Шиба. В итоге мы добавили RemoteIpValve
в tomcat и перезапуск. Похоже, это все-таки нужно:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
trustedProxies="--IPs here--"
protocolHeaderHttpsValue="https" />