Registrando o X-Forwarded-Para IP nos Logs de Auditoria do Shibboleth

1

Este é um acompanhamento da minha pergunta anterior sobre como capturar as X-Forwarded-For Endereço IP em vários proxies . Agora, estou procurando capturar o IP do cliente nos logs do aplicativo (Idib do Shibboleth).

O seguinte é:

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

A variável com o IP do Cliente no Load Balancer é ClientIP , que eu posso capturar nos registros do servidor da Web usando 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"/>

Agora, estou tentando capturar esse IP nos logs de auditoria do IdP do Shibboleth. Esta discussão fala sobre o uso de mod_rpaf para o Apache mas não entra nos detalhes. Eu estou esperando para fazer sem instalar módulos adicionais.

Parece que estou perdendo algumas (pequenas?) peças aqui. Alguma ideia? Muito obrigado!

    
por KM. 17.06.2013 / 17:03

1 resposta

1

Após analisar a documentação do LogBack sobre o registro de IPs do cliente e o correspondente código para o servlet MDCInsertingServletFilter , você deve usar o X-Forwarder-For header.

Substituímos ClientIP por X-Forwarder-For no balanceador de carga, atualizamos httpd.conf LogFormat para log X-Forwarder-For e, em seguida, atualizamos o arquivo logging.xml do Shibboleth da seguinte forma para os registros de auditoria:

<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>

Também fizemos alterações semelhantes no processo idp e não precisou atualizar o log do Tomcat .

Espero que isso ajude os outros.

Editar 1: registro do Tomcat

Acontece que, depois de um tempo, o endereço IP X-Forwarded-For parou de aparecer nos registros de IdP do Shib. Acabamos adicionando o RemoteIpValve no tomcat e reiniciando. Parece que é necessário depois de tudo:

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