Linux, Web

Récupérer les bonnes ip clientes sur apache deriere un reverse proxy

Bonjour,

Aujourd’hui je vais vous parler du module apache mod_rpaf.

Par défaut lorsque vous avez un réverse proxy devant votre serveur apache, celui-ci enregistrera au niveau des logs et dans les applications hébergés, l’ip du socket qui ouvre la connexion avec lui.
Dans ce cas vous verrez apparaitre l’adresse ip de votre reverse proxy.


Prennons un cas pratique.

Nous avons un reverse-proxy Nginx a l’adresse ip 192.168.251.254. Lorsque celui-ci enverra une requete au serveur apache c’est cette ip que vous retrouverez dans les logs.

Nous allons commencer par installer le module et le charger dans apache. Je vous détaillerais ici la procédure pour Gentoo.

# emerge www-apache/mod_rpaf

Pour charger le module allez éditer le fichier /etc/conf.d/apache2 et rajoutez -D RPAF dans la variable APACHE2_OPTS

[...]
APACHE2_OPTS="-D DEFAULT_VHOST -D SSL_DEFAULT_VHOST -D INFO -D SSL -D LANGUAGE -D PROXY -D PHP5 -D RPAF"
[...]

La prochaine étape consistera a configurer le module. Pour cela ouvrez le fichier /etc/apache2/modules.d/10_mod_rpaf.conf

Voici le contenu de ce fichier.

<IfDefine RPAF>
LoadModule rpaf_module modules/mod_rpaf.so
RPAFenable on
RPAFproxy_ips 192.168.251.254
RPAFheader X-Real-IP
</IfDefine>
Variable Description
RPAFproxy_ips Adresse ip du/des serveur(s) proxy séparé par des espaces
RPAFheader Ligne de header contenant l’ip du client

Attention la réécriture de l’adresse ip du client ne se fera que si apache recoit une connexion de la part d’un des proxy configuré.

Maintenant nous avons fini la configuration d’apache. Il ne nous reste plus qu’a parametrer notre réverse proxy.

Voici un exemple de bloc server dans le fichier de configuration nginx.conf:

server {
                listen 80;
                server_name recurt.fr *.recurt.fr;
                location / {
                        proxy_pass      http://192.168.251.53;
                        proxy_connect_timeout 3;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }
        }

Notez ici les lignes proxy_set_headers. Elle servent a aouter des headers http losque nginx vas contacter notre serveur apache a l’adresse 192.168.251.53.

Variable Description
Host Hostname contacté (important si vous avez plusieurs virtualhost sur apache)
X-Real-IP Variable personalisée qui contiendra l’ip du client qui a contacté nginx (et qui sera récupéré par mod_praf)
X-Forwarded-For Vaiable contenant la liste des proxy qui auront été traversé (séparé par des virgules)

Et voila vous n’avez plus qu’a recharger la configuration de Nginx et observez le résultat dans apache.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.