Después de agregar su sitio web a Web Application Firewall (WAF), el servicio filtra las solicitudes entrantes y reenvía el tráfico legítimo a su servidor de origen. Dado que WAF actúa como un proxy intermedio, el servidor de origen recibe la dirección IP de retorno al origen de WAF en lugar de la dirección IP real del cliente. Este tema explica cómo configurar su servidor web o contenedor Kubernetes para extraer la dirección IP de origen del cliente desde el encabezado X-Forwarded-For.
Vaya a su tipo de servidor: NGINX | IIS 6 | IIS 7 | Apache | Tomcat | Kubernetes
Funcionamiento
WAF inserta la dirección IP del cliente en el encabezado de solicitud X-Forwarded-For antes de reenviar la solicitud a su servidor de origen:
X-Forwarded-For: <client IP>
Cuando las solicitudes pasan por varios proxies —como WAF, Anti-DDoS Pro o Anti-DDoS Premium y Alibaba Cloud CDN— cada proxy agrega su dirección. El encabezado registra una cadena separada por comas:
X-Forwarded-For: <client IP>, <proxy 1 IP>, <proxy 2 IP>, <proxy 3 IP>, ...
El valor más a la izquierda siempre corresponde a la dirección IP de origen del cliente.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un sitio web agregado a WAF
Los bloques CIDR de retorno al origen de WAF correspondientes a su región. Consulte Allow access from the back-to-origin CIDR blocks of WAF
Copias de seguridad del entorno de su servidor de origen, incluidas las instantáneas de instancias de Elastic Compute Service (ECS) y los archivos de configuración del servidor web
Configuración de servidores NGINX
NGINX utiliza el módulo http_realip_module para leer la dirección IP real del cliente desde el encabezado X-Forwarded-For.
Paso 1: Instalación de http_realip_module
Compruebe si el módulo ya está instalado:
nginx -V | grep http_realip_module
Si el módulo aparece en la salida, omita este paso y continúe con el Paso 2. De lo contrario, recompile NGINX con el módulo incluido.
El módulo no se incluye cuando NGINX se instala mediante un paquete de instalación rápida.
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --user=www --group=www --prefix=/alidata/server/nginx \
--with-http_stub_status_module \
--without-http-cache \
--with-http_ssl_module \
--with-http_realip_module
make
make install
kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid`
kill -QUIT `cat /alidata/server/nginx/logs/nginx.pid.oldbin`
Paso 2: Actualización de la configuración del servidor
Abra el archivo
default.conf.-
Agregue las siguientes directivas dentro del bloque
location / {}. Reemplace desde<ip_range1>hasta<ip_rangex>con los bloques CIDR de retorno al origen de WAF. Introduzca un bloque CIDR por línea.set_real_ip_from <ip_range1>; set_real_ip_from <ip_range2>; ... set_real_ip_from <ip_rangex>; real_ip_header X-Forwarded-For;Ejemplo con tres bloques CIDR:
set_real_ip_from 10.0.0.1; set_real_ip_from 10.0.0.2; set_real_ip_from 10.0.0.3; real_ip_header X-Forwarded-For;
Paso 3: Actualización del formato de registro
Abra
nginx.confy localice la directivalog_formatdentro del bloquehttp.-
Reemplace
$remote_addrpor$http_x_forwarded_forpara que los registros capturen la dirección IP de origen del cliente.log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"';
Paso 4: Recarga de NGINX
nginx -s reload
Configuración de servidores IIS 6
IIS 6 utiliza el módulo F5XForwardedFor para recuperar la dirección IP de origen del cliente.
-
Copie
F5XForwardedFor.dlldesde el directoriox86\Releaseox64\Releasehacia un directorio personalizado, comoC:\ISAPIFilters\x86oC:\ISAPIFilters\x64.- Asegúrese de que el proceso de Internet Information Services (IIS) tenga permisos de lectura y escritura sobre el directorio. - Si el archivo no se encuentra en el directorio de publicación, descargue F5XForwardedFor.dll y cópielo al directorio correspondiente.
Abra el Administrador de IIS, haga clic derecho en su sitio web y seleccione Properties.
-
En la pestaña ISAPI Filters, haga clic en Add y establezca los siguientes parámetros (ejemplo para un sistema operativo de 32 bits):
Parámetro
Valor
Filter name
x_forwarded_for_x86Executable
Ruta completa a
F5XForwardedFor.dll, por ejemploC:\ISAPIFilters\x86\F5XForwardedFor.dll Haga clic en OK y reinicie el servidor IIS 6 para que los cambios surtan efecto.
Configuración de servidores IIS 7
IIS 7 utiliza el módulo F5XForwardedFor para recuperar la dirección IP de origen del cliente.
-
Copie
F5XFFHttpModule.dllyF5XFFHttpModule.inidesde el directoriox86\Releaseox64\Releasehacia un directorio personalizado, comoC:\x_forwarded_for\x86oC:\x_forwarded_for\x64.- Asegúrese de que el proceso de IIS tenga permisos de lectura y escritura sobre el directorio. - Si los archivos no se encuentran en el directorio de publicación, descargue F5XForwardedFor y cópielos al directorio correspondiente.
En el Administrador de IIS, haga doble clic en Modules.
En el panel Actions, haga clic en Configure Local Module y luego en Register.
-
Registre el módulo con los siguientes parámetros (ejemplo para un sistema operativo de 32 bits):
Parámetro
Valor
Name
x_forwarded_for_x86Path
Ruta completa a
F5XFFHttpModule.dll, por ejemploC:\x_forwarded_for\x86\F5XFFHttpModule.dll En el cuadro de diálogo Configure Local Module, seleccione el módulo recién registrado y haga clic en OK.
En la sección ISAPI and CGI Restrictions, agregue la DLL registrada y configure Restriction como Allow.
Reinicie el servidor IIS 7 para que los cambios surtan efecto.
Configuración de servidores Apache
Apache en Windows
Apache 2.4 y versiones posteriores incluyen mod_remoteip.so, que lee la dirección IP real del cliente desde el encabezado X-Forwarded-For.
-
Cree el archivo
conf/extra/httpd-remoteip.conf.El uso de un archivo de configuración independiente reduce las ediciones directas en
httpd.confy evita interrupciones del servicio causadas por configuraciones incorrectas. -
Agregue el siguiente contenido a
httpd-remoteip.conf. Reemplace desde<ip_range1>hasta<ip_rangex>con los bloques CIDR de retorno al origen de WAF, separados por espacios.# Load the mod_remoteip.so module. LoadModule remoteip_module modules/mod_remoteip.so # Configure the RemoteIPHeader header. RemoteIPHeader X-Forwarded-For # Specify the back-to-origin CIDR blocks. RemoteIPInternalProxy <ip_range1> <ip_range2> ... <ip_rangex>Ejemplo con tres bloques CIDR:
RemoteIPInternalProxy 10.0.0.1 10.0.0.2 10.0.0.3 -
Agregue la siguiente línea a
conf/httpd.confpara cargar el nuevo archivo de configuración:Include conf/extra/httpd-remoteip.conf -
Actualice el formato de registro en
httpd.confpara usar%a, que registra la dirección IP remota resuelta pormod_remoteip:LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %b" common Reinicie Apache para que los cambios surtan efecto.
Apache en Linux
Apache 2.4 y versiones posteriores: remoteip_module viene integrado. Siga los mismos pasos descritos para Apache en Windows.
Versiones anteriores a Apache 2.4: Instale el módulo de terceros mod_rpaf.
-
Instale
mod_rpaf:wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz tar zxvf mod_rpaf-0.6.tar.gz cd mod_rpaf-0.6 /alidata/server/httpd/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c -
Anexe lo siguiente a
/alidata/server/httpd/conf/httpd.conf. ParaRPAFproxy_ips, utilice las direcciones IP del módulo mod_rpaf que aparecen en sus registros de Apache, no las direcciones IP del servidor proxy de WAF. En la mayoría de los casos, se listan dos direcciones IP.LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname On RPAFproxy_ips 10.XX.XX.65 10.XX.XX.131 RPAFheader X-Forwarded-For -
Reinicie Apache:
/alidata/server/httpd/bin/apachectl restart
Para obtener más detalles sobre mod_remoteip de Apache, consulte la documentación del módulo de Apache.
Configuración de servidores Tomcat
Tomcat lee la dirección IP del cliente desde el encabezado X-Forwarded-For a través de su componente AccessLogValve.
Abra
tomcat/conf/server.xml.-
Actualice la entrada
AccessLogValvepara registrar%{X-FORWARDED-FOR}ien lugar del host remoto predeterminado:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false"/>
Configuración de contenedores Kubernetes
Cuando su servidor de origen se ejecuta en Kubernetes, el controlador Ingress almacena la dirección IP de origen del cliente en X-Original-Forwarded-For y las direcciones IP de retorno al origen de WAF en X-Forwarded-For. Para restaurar la dirección IP de origen en X-Forwarded-For, actualice la configuración del controlador Ingress.
-
Edite el ConfigMap
kube-system/nginx-configuration:kubectl -n kube-system edit cm nginx-configuration -
Agregue las siguientes claves:
compute-full-forwarded-for: "true" forwarded-for-header: "X-Forwarded-For" use-forwarded-headers: "true" Guarde el archivo. Los cambios surten efecto de inmediato; no es necesario reiniciar.
Actualice su aplicación para que lea la dirección IP de origen del cliente desde el encabezado
X-Original-Forwarded-Foren lugar deX-Forwarded-For.