Considere el escenario/flujo:
remote user (client) > proxy1 > proxy2 > AWS ALB > httpd/reverse_proxy > my_application
A medida que la solicitud del usuario sale de su red, el encabezado X-Forwarded-For (XFF) se agrega con la dirección IP de cada proxy sucesivo. Por ejemplo, cuando llega al ALB, el encabezado XFF contiene "192.168.1.100, 100.99.98.97". Luego, ALB agregará ClientIP a este encabezado y, en este caso, esa es la IP de proxy2. Finalmente, cuando la solicitud llega al proxy inverso que se encuentra frente a mi aplicación, el encabezado XFF ahora es: "192.168.1.100, 100.99.98.97, 95.94.93.92".
Problema que veo: en el proxy inverso, httpd parece estar ignorando o descartando la última/más correcta IP en la cadena de encabezado X-Forwarded-For, específicamente cuando hay más de 2 direcciones.
Require (mod_authz_host), después de configurar RemoteIPHeader X-Forwarded-For en el vhost.proxy1 del flujo, veo la dirección de proxy2 en el encabezado XFF en el proxy inverso sin problemas.No estoy seguro de lo que me perdí en mi configuración o prueba, y aunque no es un estándar, es común que haya varias direcciones en el encabezado XFF. Enfrento este problema solo en Apache httpd 2.4. En la versión 2.2, esto no fue un problema y puedo repetir la misma configuración/flujo y veo las 3 direcciones en la cadena. Gracias por adelantado.
host virtual de ejemplo:
<VirtualHost *:80> ProxyPreserveHost On ServerName myapp.mydomain.com Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;" RemoteIPHeader X-Forwarded-For ProxyPass / http://10.1.2.3:8080/ timeout=3600 ProxyPassReverse "/" http://10.1.2.3:8080/ SetEnv proxy-sendchunked ErrorLog /var/log/httpd/error_myapp LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined2 CustomLog /var/log/httpd/access_myapp combined2 </VirtualHost>A Vhost le falta la directiva RemoteIPTrustedProxy.
"Cuando se enumeran varias direcciones IP de agente de usuario delimitadas por comas en el valor del encabezado, se procesan en orden de derecha a izquierda. El procesamiento se detiene cuando no se confía en una dirección IP de agente de usuario dada para presentar la dirección IP anterior. El campo de encabezado se actualiza a esta lista restante de direcciones IP no confirmadas, o si todas las direcciones IP eran de confianza, este encabezado se elimina por completo de la solicitud".
https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html#remoteiptrustedproxy
La respuesta estaba justo frente a mí, como de costumbre.