Une fois votre site web ajouté à Web Application Firewall (WAF), ce dernier filtre les requêtes entrantes et transfère le trafic légitime vers votre serveur d'origine. WAF agissant en tant que proxy intermédiaire, le serveur d'origine reçoit l'adresse IP de retour vers l'origine de WAF au lieu de l'adresse IP réelle du client. Cette rubrique explique comment configurer votre serveur web ou votre conteneur Kubernetes pour extraire l'adresse IP d'origine du client à partir de l'en-tête X-Forwarded-For.
Accédez directement à la section correspondant à votre type de serveur : NGINX | IIS 6 | IIS 7 | Apache | Tomcat | Kubernetes
Fonctionnement
Avant de transmettre la requête à votre serveur d'origine, WAF insère l'adresse IP du client dans l'en-tête de requête X-Forwarded-For :
X-Forwarded-For: <client IP>
Lorsque les requêtes transitent par plusieurs proxys, tels que WAF, Anti-DDoS Pro ou Anti-DDoS Premium, et Alibaba Cloud CDN, chaque proxy ajoute sa propre adresse. L'en-tête enregistre ainsi une chaîne séparée par des virgules :
X-Forwarded-For: <client IP>, <proxy 1 IP>, <proxy 2 IP>, <proxy 3 IP>, ...
La valeur la plus à gauche correspond toujours à l'adresse IP d'origine du client.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un site web ajouté à WAF
Les blocs CIDR de retour vers l'origine de WAF pour votre région. Consultez la rubrique Autoriser l'accès depuis les blocs CIDR de retour vers l'origine de WAF
Des sauvegardes de l'environnement de votre serveur d'origine, y compris les snapshots d'instances Elastic Compute Service (ECS) et les fichiers de configuration du serveur web
Configuration des serveurs NGINX
NGINX utilise le module http_realip_module pour lire l'adresse IP réelle du client à partir de l'en-tête X-Forwarded-For.
Étape 1 : Installer http_realip_module
Vérifiez si le module est déjà installé :
nginx -V | grep http_realip_module
Si le module apparaît dans la sortie, passez directement à l'étape 2. Sinon, recompilez NGINX avec ce module.
Le module n'est pas inclus lors de l'installation de NGINX via un package d'installation rapide.
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`
Étape 2 : Mettre à jour la configuration du serveur
Ouvrez le fichier
default.conf.-
Ajoutez les directives suivantes dans le bloc
location / {}. Remplacez<ip_range1>jusqu'à<ip_rangex>par les blocs CIDR de retour vers l'origine de WAF. Saisissez un bloc CIDR par ligne.set_real_ip_from <ip_range1>; set_real_ip_from <ip_range2>; ... set_real_ip_from <ip_rangex>; real_ip_header X-Forwarded-For;Exemple avec trois blocs 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;
Étape 3 : Mettre à jour le format des journaux
Ouvrez le fichier
nginx.confet repérez la directivelog_formatdans le blochttp.-
Remplacez
$remote_addrpar$http_x_forwarded_forafin que les journaux enregistrent l'adresse IP d'origine du client.log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"';
Étape 4 : Recharger NGINX
nginx -s reload
Configuration des serveurs IIS 6
IIS 6 utilise le module F5XForwardedFor pour récupérer l'adresse IP d'origine du client.
-
Copiez le fichier
F5XForwardedFor.dlldepuis le répertoirex86\Releaseoux64\Releasevers un répertoire personnalisé, tel queC:\ISAPIFilters\x86ouC:\ISAPIFilters\x64.- Assurez-vous que le processus Internet Information Services (IIS) dispose des permissions de lecture et d'écriture sur le répertoire. - Si le fichier ne se trouve pas dans le répertoire de publication, téléchargez F5XForwardedFor.dll et copiez-le dans le répertoire.
Ouvrez le Gestionnaire IIS, cliquez avec le bouton droit sur votre site web, puis sélectionnez Properties.
-
Dans l'onglet ISAPI Filters, cliquez sur Add et définissez les paramètres suivants (exemple pour un système d'exploitation 32 bits) :
Parameter Value Filter name x_forwarded_for_x86Executable Chemin complet vers F5XForwardedFor.dll, par exempleC:\ISAPIFilters\x86\F5XForwardedFor.dll Cliquez sur OK, puis redémarrez le serveur IIS 6 pour que les modifications prennent effet.
Configuration des serveurs IIS 7
IIS 7 utilise le module F5XForwardedFor pour récupérer l'adresse IP d'origine du client.
-
Copiez les fichiers
F5XFFHttpModule.dlletF5XFFHttpModule.inidepuis le répertoirex86\Releaseoux64\Releasevers un répertoire personnalisé, tel queC:\x_forwarded_for\x86ouC:\x_forwarded_for\x64.- Assurez-vous que le processus IIS dispose des permissions de lecture et d'écriture sur le répertoire. - Si les fichiers ne se trouvent pas dans le répertoire de publication, téléchargez F5XForwardedFor et copiez-les dans le répertoire.
Dans le Gestionnaire IIS, double-cliquez sur Modules.
Dans le panneau Actions, cliquez sur Configure Local Module, puis sur Register.
-
Enregistrez le module avec les paramètres suivants (exemple pour un système d'exploitation 32 bits) :
Parameter Value Name x_forwarded_for_x86Path Chemin complet vers F5XFFHttpModule.dll, par exempleC:\x_forwarded_for\x86\F5XFFHttpModule.dll Dans la boîte de dialogue Configure Local Module, sélectionnez le module nouvellement enregistré, puis cliquez sur OK.
Dans la section ISAPI and CGI Restrictions, ajoutez la DLL enregistrée et définissez Restriction sur Allow.
Redémarrez le serveur IIS 7 pour que les modifications prennent effet.
Configuration des serveurs Apache
Apache sur Windows
Apache 2.4 et versions ultérieures incluent le module mod_remoteip.so, qui lit l'adresse IP réelle du client à partir de l'en-tête X-Forwarded-For.
-
Créez le fichier
conf/extra/httpd-remoteip.conf.L'utilisation d'un fichier de configuration distinct réduit les modifications directes apportées au fichier
httpd.confet évite les interruptions de service dues à des erreurs de configuration. -
Ajoutez le contenu suivant au fichier
httpd-remoteip.conf. Remplacez<ip_range1>jusqu'à<ip_rangex>par les blocs CIDR de retour vers l'origine de WAF, séparés par des espaces.# 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>Exemple avec trois blocs CIDR :
RemoteIPInternalProxy 10.0.0.1 10.0.0.2 10.0.0.3 -
Ajoutez la ligne suivante au fichier
conf/httpd.confpour charger le nouveau fichier de configuration :Include conf/extra/httpd-remoteip.conf -
Mettez à jour le format des journaux dans le fichier
httpd.confpour utiliser%a, qui enregistre l'adresse IP distante résolue parmod_remoteip:LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %b" common Redémarrez Apache pour que les modifications prennent effet.
Apache sur Linux
Apache 2.4 et versions ultérieures : le module remoteip_module est intégré. Suivez les mêmes étapes que pour Apache sur Windows.
Apache antérieur à la version 2.4 : Installez le module tiers mod_rpaf.
-
Installez
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 -
Ajoutez les lignes suivantes à la fin du fichier
/alidata/server/httpd/conf/httpd.conf. Pour le paramètreRPAFproxy_ips, utilisez les adresses IP du module mod_rpaf issues de vos journaux Apache, et non les adresses IP des serveurs proxy WAF. Dans la plupart des cas, deux adresses IP sont répertoriées.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 -
Redémarrez Apache :
/alidata/server/httpd/bin/apachectl restart
Pour plus d'informations sur le module mod_remoteip d'Apache, consultez la documentation du module Apache.
Configuration des serveurs Tomcat
Tomcat lit l'adresse IP du client à partir de l'en-tête X-Forwarded-For via son composant AccessLogValve.
Ouvrez le fichier
tomcat/conf/server.xml.-
Mettez à jour l'entrée
AccessLogValvepour journaliser%{X-FORWARDED-FOR}iau lieu de l'hôte distant par défaut :<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"/>
Configuration des conteneurs Kubernetes
Lorsque votre serveur d'origine s'exécute dans Kubernetes, le contrôleur Ingress stocke l'adresse IP d'origine du client dans l'en-tête X-Original-Forwarded-For et les adresses IP de retour vers l'origine de WAF dans l'en-tête X-Forwarded-For. Pour restaurer l'adresse IP d'origine dans l'en-tête X-Forwarded-For, mettez à jour la configuration du contrôleur Ingress.
-
Modifiez la ConfigMap
kube-system/nginx-configuration:kubectl -n kube-system edit cm nginx-configuration -
Ajoutez les clés suivantes :
compute-full-forwarded-for: "true" forwarded-for-header: "X-Forwarded-For" use-forwarded-headers: "true" Enregistrez le fichier. Les modifications prennent effet immédiatement ; aucun redémarrage n'est nécessaire.
Mettez à jour votre application pour qu'elle lise l'adresse IP d'origine du client à partir de l'en-tête
X-Original-Forwarded-Forau lieu deX-Forwarded-For.