HAProxy + Apache - Configurer le RemoteIP pour les logs

Posté le ven. 30 avril 2021 dans Informatique

Ce billet constitue plutôt un pense bête plutôt qu'un article.

J'ai quelques machines virtuelles qui tournent sur un hyperviseur Proxmox sur un serveur dédié. Celui-ci ne bénéficie que d'une IPV4, j'ai donc du passer mes services derrière un réseau NATé. J'ai donc géré ça grâce à l'excellent PFSense.

Pour ça, les articles de Zwindler, repris par Charles Bordet sur cette suite d'articles sont vraiment pratiques : https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/ et https://blog.zwindler.fr/2020/03/09/proxmox-ve-6-pfsense-sur-un-serveur-dedie-2-3/

Comme j'ai quelques services web, j'ai créé des conteneurs pour chaque site et le tout passe par Haproxy sur la PFSense.

L'ennui, c'est que les logs de chaque site ne récupèrent que l'adresse IP de la PFSense en local. Donc on va faire en sorte de récupérer les adresses IP des clients qui se connectent à chaque site, c'est tout de même plus pratique !

HAProxy (Depuis PFSense)

Dans le Front-End qui récupère toutes les requêtes, il faut donc bien cocher l'option : Use "forwardfor" option

forwardfor option

Et c'est tout de ce côté !

Configuration Apache dans la machine virtuelle (Debian Buster)

Il faut activer le mod_remoteip d'Apache (>2.4). Sur une Debian, ça donne ça :

a2enmod remoteip

Plutôt que de modifier le fichier /etc/apache2/apache2.conf, on va plutôt ajouter un fichier de configuration, c'est plus propre :

vi /etc/apache2/conf-available/remoteip.conf

Et on y ajoute :

<IfModule mod_remoteip.c>
    LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
</IfModule>

C'est la copie presque conforme du LogFormat combined de la conf intiale, il n'y a que le %h qui s'est transformé en %a.

On active cette configuration dans Apache :

a2enconf remoteip

Enfin, dans le vhost utilisé, on ajoute les deux directives suivantes :

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 10.0.0.1/24

Avec l'adresse locale de la machine qui fait tourner HAProxy à la place des 10.0.0.1 bien entendu.

On recharge la configuration d'Apache :

systemctl reload apache2.service

Et le tour est joué.

Conclusion

C'était pas très compliqué mais j'ai trouvé pas mal d'autres méthodes plus tordues sur le net. J'ai trouvé ça plus propre.

Si j'ai fait une boulette, n'hésitez pas à me contacter, par mail ou xmpp ;)

A bientôt