¿Cómo capturo las direcciones IP del cliente en los registros del servidor web detrás de un ELB?
Utilizo Elastic Load Balancing (ELB) para mi servidor web y puedo ver la dirección IP de mi equilibrador de carga en los registros de acceso al servidor web. ¿Cómo capturo las direcciones IP del cliente en su lugar?
Descripción breve
Los registros de acceso del servidor web capturan la dirección IP del balanceador de carga porque este establece la conexión con las instancias. Para capturar las direcciones IP de los clientes en los registros de acceso al servidor web, configure lo siguiente:
- Para los equilibradores de carga de aplicación y los equilibradores de carga clásicos con agentes de escucha HTTP/HTTPS, las direcciones IP del cliente las captura el encabezado HTTP X-Forwarded-For. A continuación, puede configurar los registros de acceso al servidor web para registrar estas direcciones IP.
- Para los equilibradores de carga clásicos con agentes de escucha TCP/SSL, active la compatibilidad con el protocolo proxy en el equilibrador de carga clásico y en la aplicación de destino. Asegúrese de configurar la compatibilidad con el protocolo proxy tanto en el equilibrador de carga como en la aplicación.
- En el caso de los equilibradores de carga de red, registre los destinos por ID de instancia para capturar las direcciones IP del cliente sin tener que configurar un servidor web adicional. Para obtener instrucciones, consulte Target group attributes (Atributos del grupo de destino) en lugar de las siguientes resoluciones.
- Para los equilibradores de carga de red, cuando solo pueda registrar direcciones IP como destinos, active la versión 2 del protocolo proxy en el equilibrador de carga. Para obtener instrucciones, consulte Enable proxy protocol (Habilitar el protocolo proxy) en lugar de las siguientes resoluciones.
Resolución
Equilibradores de carga de aplicación y equilibradores de carga clásicos con agentes de escucha HTTP/HTTPS (Apache)
1.Abra el archivo de configuración de Apache con un editor de texto. La ubicación varía según la configuración, por ejemplo, /etc/httpd/conf/httpd.conf para Amazon Linux y RHEL**,** o /etc/apache2/apache2.conf para Ubuntu.
2.En la sección LogFormat, añada %{X-Forwarded-For}i, de forma similar a la siguiente:
... LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common ...
3.Guarde los cambios.
4.Vuelva a cargar el servicio Apache.
Para Sysvinit, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES11), ejecute este comando:
# /etc/init.d/apache2 reload
Para Sysvinit, sistemas basados en RPM (como RHEL 6 y Amazon Linux), excepto SUSE, ejecute este comando:
# /etc/init.d/httpd reload
Para Systemd, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES12), ejecute este comando:
# systemctl reload apache2
Para Systemd, sistemas basados en RPM (como RHEL 7 y Amazon Linux 2), excepto SUSE, ejecute este comando:
# systemctl reload httpd
5.Abra los registros de acceso al servidor web Apache. La ubicación varía según la configuración.
6.Verifique que las direcciones IP del cliente estén registradas en el encabezado X-Forwarded-For.
Equilibradores de carga de aplicación y equilibradores de carga clásicos con agentes de escucha HTTP/HTTPS (NGINX)
1.Abra el archivo de configuración de NGINX con un editor de texto. Suele encontrarse en la ubicación /etc/nginx/nginx.conf.
2.En la sección LogFormat, añada $http_x_forwarded_for, de forma similar la siguiente:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; ... }
3.Guarde los cambios.
4.Vuelva a cargar el servicio NGINX.
Por ejemplo, en Amazon Linux 2 o RHEL, ejecute este comando:
systemctl reload nginx
Nota: El comando para volver a cargar el servicio NGINX es diferente en otros sistemas. Los comandos para volver a cargar NGINX son similares a los comandos para volver a cargar el servicio Apache de la sección anterior.
5.Abra su acceso al servidor web NGINX. La ubicación varía según la configuración.
6.Verifique que las direcciones IP del cliente estén registradas en el encabezado X-Forwarded-For.
Equilibradores de carga clásicos con agentes de escucha TCP/SSL (Apache)
1.Abra el archivo de configuración de Apache con un editor de texto. La ubicación varía según la configuración, por ejemplo, /etc/httpd/conf/httpd.conf para Amazon Linux y RHEL o /etc/apache2/apache2.conf para Ubuntu.
2.Asegúrese de que la configuración de Apache cargue el módulo mod_remoteip (disponible para la versión 2.4.31 y versiones posteriores de Apache). Este módulo incluye la directiva RemoteIPProxyProtocol. En el archivo de configuración, compruebe si hay una línea similar a la siguiente:
Amazon Linux o RHEL:
LoadModule remoteip_module modules/mod_remoteip.so
Ubuntu:
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
3.Confirme que se carga el módulo mod_remoteip:
$ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
4.Revise el resultado y verifique que contenga una línea similar a la siguiente:
remoteip_module (shared)
Importante: Si el resultado no contiene esta línea, el módulo no se ha incluido ni cargado en la configuración. Asegúrese de activar el módulo antes de continuar.
5.Añada la siguiente línea al archivo de configuración de Apache para activar la compatibilidad con el protocolo proxy:
RemoteIPProxyProtocol On
6.Edite la sección LogFormat del archivo de configuración para capturar la dirección IP remota (%a) y el puerto remoto (%{remote}p:), de forma similar a la siguiente:
LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
7.Guarde los cambios.
8.Vuelva a cargar el servicio Apache.
Para Sysvinit, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES11), ejecute este comando:
# /etc/init.d/apache2 reload
Para Sysvinit, sistemas basados en RPM (como RHEL 6 y Amazon Linux), excepto SUSE, ejecute este comando:
# /etc/init.d/httpd reload
Para Systemd, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES12), ejecute este comando:
# systemctl reload apache2
Para Systemd, sistemas basados en RPM (como RHEL 7 y Amazon Linux 2), excepto SUSE, ejecute este comando:
# systemctl reload httpd
9.Abra los registros de acceso al servidor web Apache. La ubicación varía según la configuración.
10.Verifique que las direcciones IP del cliente estén registradas en el encabezado Proxy Protocol (Protocolo proxy).
11.Active la compatibilidad con el protocolo proxy en la aplicación de destino.
Equilibradores de carga clásicos con agentes de escucha TCP/SSL (NGINX)
1.Abra el archivo de configuración de NGINX usando un editor de texto. Suele encontrarse en la ubicación /etc/nginx/nginx.conf.
2.Cambie la línea listen (escucha) de la sección server (servidor) por *NOTE: ESTE ES UN MARCADOR DE POSICIÓN QUE SERÁ REEMPLAZADO DESPUÉS DE LA EDICIÓN*
###Long Sentences XX ###Wrong/Misspelled Service Name ###Link broken or incorrect title link ###Sensitive Terms Terms ###Changes **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** proxy_protocol
Asegúrese de cambiar la línea log_format de la sección http para establecer proxy_protocol_addr:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$proxy_protocol_addr"'; access_log /var/log/nginx/access.log main; ... } server { ... listen 80 default_server proxy_protocol; ... } ... }
3.Guarde los cambios.
4.Vuelva a cargar el servicio NGINX.
Por ejemplo, en Amazon Linux 2 o RHEL, ejecute este comando:
systemctl reload nginx
Nota: El comando para volver a cargar el servicio NGINX es diferente en otros sistemas. Los comandos para volver a cargar NGINX son similares a los comandos para volver a cargar el servicio Apache de la sección anterior.
5.Abra los registros de acceso al servidor web de NGINX. La ubicación varía según la configuración.
6.Verifique que las direcciones IP del cliente estén registradas en el encabezado Proxy Protocol (Protocolo proxy).
7.Active la compatibilidad con el protocolo proxy en la aplicación de destino.
Contenido relevante
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 3 años