Apache: obtenir l’IP source depuis un en-tête conditionel dans les logs

Dans le cadre d’un environnement web haute disponibilité il y a généralement des répartiteurs de charge HTTP comme HAproxy ou des reverse proxies comme Apache ou Nginx en frontal qui vont s’occuper de répartir la charge et/ou filtrer une partie des requêtes pour ménager les serveurs d’application de backend.

Le principal problème rencontré dans ce type d’architecture est que, généralement, le service web de frontend va masquer l’IP source du client, réduisant la tracabilité de celui-ci sur les backends. Nous allons ici partir du principe que le service web de frontend retransmet l’IP au backend via un en-tête HTTP nommé X-Real-IP.

L’astuce que nous allons voir ici permet d’afficher l’adresse IP du client via l’en-tête X-Real-IP si celui-ci existe, auquel cas l’adresse IP source.

Dans un premier temps nous allons définir 2 LogFormat, complete_realip et complete, chacun ayant un paramétrage sur le champ 1 différent:

Dans un second temps, nous allons nous servir du module mod_setenvif afin de vérifier l’existence de l’en-tête:

Enfin on définit une condition sur l’environnement afin de basculer le log d’un mode à l’autre suivant la requête entrante:

Conclusion

Votre serveur Apache va désormais basculer l’IP présentée dans ses logs dynamiquement en fonction de la présence ou non de l’en-tête X-Real-IP.

Note: Si vous utilisez un haproxy en frontend, la configuration à ajouter à vos backend haproxy est la suivante:

Google Plus

Laisser un commentaire

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