Le module mod_rpaf permet de remplacer l’adresse IP du client dans l’en-tête des requêtes HTTP. Utile lorsque vous avez des reverse proxy devant votre serveur Web.
En essayant de compiler le module mod_rpaf avec la version 2.4 de Apache/HTTPD, vous obtiendrez l’erreur suivante lors de la compilation :
/usr/local/httpd-2.4.3/build/libtool --silent --mode=compile gcc -std=gnu99 -prefer-pic -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/httpd-2.4.3/include -I/usr/local/httpd-2.4.3/include -I/usr/local/httpd-2.4.3/include -c -o mod_rpaf-2.0.lo mod_rpaf-2.0.c && touch mod_rpaf-2.0.slo mod_rpaf-2.0.c: In function 'rpaf_cleanup': mod_rpaf-2.0.c:150: error: 'conn_rec' has no member named 'remote_ip' mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_addr' mod_rpaf-2.0.c:151: warning: implicit declaration of function 'inet_addr' mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_ip' mod_rpaf-2.0.c: In function 'change_remote_ip': mod_rpaf-2.0.c:164: error: 'conn_rec' has no member named 'remote_ip' mod_rpaf-2.0.c:183: error: 'conn_rec' has no member named 'remote_ip' mod_rpaf-2.0.c:186: error: 'conn_rec' has no member named 'remote_ip' mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_addr' mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_ip' apxs:Error: Command failed with rc=65536 .
Et pour cause, la version 2.4 de Apache/HTTPD apporte quelques modifications d’APIs.
Pour corriger ce problème, il suffit de remplacer les directives remote_ par client_ dans le fichier mod_rpaf-2.0.c.
Pour vous faciliter la tâche, je viens de créer un patch afin d’effectuer ces changements.
– Placez-vous dans le répertoire suivant : cd mod_rpaf-0.6
– Téléchargez le patch : wget http://www.be-root.com/downloads/mod_rpaf/mod_rpaf-2.0.patch
– Appliquez le patch suivant : patch -p0 < mod_rpaf-2.0.patch
patching file mod_rpaf-2.0.c
– Compilez le module mod_rpaf : apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
– Éditez le fichier de configuration de Apache/HTTPD : vi /etc/httpd/conf/httpd.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so <IfModule rpaf_module> RPAFenable On RPAFproxy_ips 127.0.0.1 xxx.xxx.xxx.xxx RPAFsethostname On RPAFheader X-Forwarded-For </IfModule>
xxx.xxx.xxx.xxx correspond à l’adresse IP de votre serveur Web.
– Redémarrez le serveur Web : service httpd restart
– Vérifiez le fonctionnement du module mod_rpaf dans le fichier de log de Apache/HTTPD : tail -f /var/log/httpd/access_log
127.0.0.1 - - [23/Aug/2012:20:31:19 +0200] "GET / HTTP/1.1" 200 83 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1 192.168.0.1 - - [23/Aug/2012:20:31:19 +0200] "GET / HTTP/1.1" 200 83 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1