X-Forwarded-For (XFF) es un encabezado de solicitud HTTP que identifica la dirección IP de origen de un cliente que se conecta a un servidor web a través de un proxy. Sin él, el servidor solo ve la IP del último proxy. Debido a que el encabezado expone la IP del cliente por diseño, un proxy que lo añade transmite tu dirección original al sitio de destino.
Cada proxy en la cadena añade la dirección IP desde la que recibió la conexión. La entrada más a la izquierda es el cliente reclamado y la más a la derecha es el proxy más reciente, por ejemplo X-Forwarded-For: 203.0.113.195, 198.51.100.178.
Estado estándar y encabezados relacionados
- Estándar de facto: XFF se utiliza ampliamente pero no está definido en ninguna especificación actual.
- Encabezado Forwarded: RFC 7239 define un encabezado estándar
Forwardedpara la misma información, pero se utiliza mucho menos en la práctica. - Encabezados complementarios:
X-Forwarded-Host,X-Forwarded-ProtoyViallevan detalles relacionados con el proxy. - Balanceadores de carga: Algunos balanceadores de carga te permiten añadir la IP del cliente a XFF, pasarla sin cambios o eliminarla.
Confianza y suplantación
Un cliente puede enviar un encabezado X-Forwarded-For falsificado, por lo que solo las direcciones añadidas por proxies de confianza son fiables. Los servidores que utilizan XFF para limitar la tasa o el control de acceso deben leer la lista de derecha a izquierda, omitiendo proxies de confianza conocidos, y tratar los valores más a la izquierda como no confiables. Si el servidor también se puede alcanzar directamente desde Internet, ninguna parte de la lista puede ser confiable.
Para qué se utiliza X-Forwarded-For
Un servidor detrás de un proxy o balanceador de carga registra solo la dirección IP de ese dispositivo. XFF le permite recuperar la dirección del cliente para depuración, estadísticas y contenido dependiente de la ubicación.
Lectura de X-Forwarded-For en NGINX
El módulo realip de NGINX reemplaza la dirección del cliente por una tomada de un encabezado como X-Forwarded-For.
set_real_ip_from: Lista las direcciones de confianza conocidas por enviar valores correctos.real_ip_header X-Forwarded-For;: Indica a NGINX qué encabezado leer.real_ip_recursive on;: Utiliza la última dirección en el encabezado que no es de confianza, en lugar de la última dirección en general.
El módulo no está construido por defecto. Necesita la opción de construcción --with-http_realip_module.