Installer et compiler le module mod_rpaf avec la version 2.4 de Apache/HTTPD

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