Introducción
Tenemos una plataforma montada de la siguiente manera:
INTERNET <-> HAPROXY <-> APACHE
Cuando una persona accede a la plataforma y revisamos los logs de APACHE vemos que nos está llegando la IP del balanceador. Lo que queremos es que llegue directamente la IP de la persona que se conecta.
Por lo tanto nuestro objetivo es que en APACHE llegue la IP pública que accede a nuestra plataforma/portal.
Si quieres ver el otro post de HAPROXY+NGINX = Obtener IP Real.
Configuraciones
HAPROXY
Lo primero que debemos hacer es configurar nuestro HAPROXY, vamos a poner una configuración de ejemplo usada:
frontend test_http bind *:80 option forwardfor default_backend bk_test_http backend bk_test_http mode http balance source server server01 10.192.28.60:80 cookie node1 check inter 5000 fall 3 rise 2
Comprobamos que la sintaxis es correcta:
haproxy -f /etc/haproxy/haproxy.cfg -c
Reiniciamos el servicio:
systemctl restart haproxy
Modo debug del HAPROXY
haproxy -f /etc/haproxy/haproxy.cfg -d
En este punto lo único que hemos añadido extra ha sido:
option forwardfor
APACHE
Lo segundo es configurar nuestros frontales APACHE para que recojan la IP real. Para ello debemos activar el módulo de apache remoteip:
# Ubuntu/Debian a2enmod remoteip
Para versiones de CentOS/RedHat ya viene activado el módulo por defecto. Lo podemos comprobar con el siguiente comando:
apachectl -M | grep remoteip
Después tenemos que rellenar la configuración en la siguiente ruta: «/etc/apache2/conf-available/remoteip.conf» (Ubuntu/Debian) o «/etc/httpd/conf.d/remoteip.conf» (CentOS/RedHat):
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 10.192.28.59
Habilitamos la configuración:
a2enconf remoteip
Comprobamos que la configuración es correcta:
apachectl2 -t
Reiniciamos el Servicio
systemctl restart apache2
Como podéis ver hemos añadido los parámetros RemoteIPTrustedProxy (Aquí debemos indicar la IP de nuestro HAPROXY) y RemoteIPHeader. Con esto conseguimos que en los acces_log de Apache llegue la IP real del cliente.
Si ha ido bien deberíamos ver en los accesslog la ip real de cada persona.