X-Forwarded-For (XFF) est un en-tête de requête HTTP qui identifie l'adresse IP d'origine d'un client se connectant à un serveur web via un proxy. Sans cela, le serveur ne voit que l'IP du dernier proxy. Comme l'en-tête expose l'IP du client par conception, un proxy qui l'ajoute transmet votre adresse d'origine au site de destination.
Chaque proxy dans la chaîne ajoute l'adresse IP à partir de laquelle il a reçu la connexion. L'entrée la plus à gauche est le client revendiqué et la plus à droite est le proxy le plus récent, par exemple X-Forwarded-For: 203.0.113.195, 198.51.100.178.
État standard et en-têtes associés
- Standard de facto : XFF est largement utilisé mais n'est défini dans aucune spécification actuelle.
- En-tête Forwarded : La RFC 7239 définit un en-tête standard
Forwardedpour les mêmes informations, mais il est beaucoup moins utilisé en pratique. - En-têtes compagnons :
X-Forwarded-Host,X-Forwarded-ProtoetViaportent des détails de proxy connexes. - Équilibreurs de charge : Certains équilibreurs de charge vous permettent d'ajouter l'IP du client à XFF, de la transmettre sans changement ou de la supprimer.
Confiance et usurpation
Un client peut envoyer un en-tête X-Forwarded-For falsifié, donc seules les adresses ajoutées par des proxies de confiance sont fiables. Les serveurs qui utilisent XFF pour la limitation de débit ou le contrôle d'accès doivent lire la liste de droite à gauche, en sautant les proxies de confiance connus, et traiter les valeurs les plus à gauche comme non fiables. Si le serveur peut également être atteint directement depuis Internet, aucune partie de la liste ne peut être considérée comme fiable.
À quoi sert X-Forwarded-For
Un serveur derrière un proxy ou un équilibreur de charge ne consigne que l'adresse IP de cet appareil. XFF lui permet de récupérer l'adresse du client pour le débogage, les statistiques et le contenu dépendant de la localisation.
Lecture de X-Forwarded-For dans NGINX
Le module realip de NGINX remplace l'adresse du client par une prise d'un en-tête tel que X-Forwarded-For.
set_real_ip_from: Liste les adresses de confiance connues pour envoyer des valeurs correctes.real_ip_header X-Forwarded-For;: Indique à NGINX quel en-tête lire.real_ip_recursive on;: Utilise la dernière adresse dans l'en-tête qui n'est pas de confiance, au lieu de la dernière adresse globale.
Le module n'est pas construit par défaut. Il nécessite l'option de construction --with-http_realip_module.