Serveur dédié : afficher la véritable IP derrière un reverse-proxy comme Varnish photo

Apache mod_remoteip : restaurer la vraie IP derrière un reverse proxy

Quelques jours après avoir installé Varnish comme reverse proxy devant Apache, je me suis aperçu que tous les commentaires du site étaient enregistrés avec l’adresse IP 127.0.0.1.

Même problème dans les logs Apache : au lieu de voir l’adresse IP réelle du visiteur, je voyais uniquement l’adresse du reverse proxy.

127.0.0.1 - - [14/May/2011:08:54:47 +0200] "GET / HTTP/1.1" 200 12345Langage du code : JavaScript (javascript)

C’est logique : Apache ne reçoit plus directement la requête du visiteur. Il reçoit la requête depuis Varnish. Pour Apache, le client immédiat est donc Varnish, souvent en 127.0.0.1, ::1 ou sur une IP privée.

Pour retrouver la véritable IP du visiteur, il faut que le reverse proxy transmette cette IP dans un header HTTP, puis qu’Apache fasse confiance à ce header uniquement lorsqu’il provient d’un proxy connu.

Pourquoi Apache voit l’adresse du reverse proxy

Dans une architecture classique sans reverse proxy, le visiteur se connecte directement à Apache :

Visiteur → Apache

Apache voit donc l’IP du visiteur.

Avec Varnish, l’architecture devient :

Visiteur → Varnish → Apache

Apache voit alors l’IP de Varnish, car c’est Varnish qui établit la connexion vers Apache.

La vraie adresse du visiteur doit donc être transmise dans un header, le plus souvent :

X-Forwarded-For: 203.0.113.42Langage du code : CSS (css)

Varnish documente justement l’usage de X-Forwarded-For pour transporter l’adresse IP du client initial vers le backend.

Ancienne méthode : mod_rpaf

À l’époque, la solution consistait à installer mod_rpaf, pour Reverse Proxy Add Forward :

apt-get install libapache2-mod-rpaf
a2enmod rpafLangage du code : JavaScript (javascript)

Puis à configurer le module ainsi :

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-ForLangage du code : CSS (css)

Cette solution fonctionnait, mais elle n’est plus celle que j’utiliserais aujourd’hui sur Apache 2.4.

La méthode moderne consiste à utiliser le module officiel mod_remoteip.

Solution moderne : utiliser mod_remoteip

mod_remoteip permet à Apache de remplacer l’adresse IP apparente du client par l’adresse fournie dans un header comme X-Forwarded-For, à condition que la requête provienne d’un proxy déclaré comme fiable.

La documentation Apache explique que le module remplace l’adresse IP originale du client par l’adresse utilisateur présentée dans un header de requête, configuré avec RemoteIPHeader.

On active d’abord le module :

sudo a2enmod remoteip

On crée ensuite un fichier de configuration dédié :

sudo nano /etc/apache2/conf-available/remoteip.conf

Pour un Varnish local, ajoutez :

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1
RemoteIPTrustedProxy ::1Langage du code : CSS (css)

Activez ensuite la configuration :

sudo a2enconf remoteip

Testez Apache :

sudo apachectl configtest

Puis rechargez Apache :

sudo systemctl reload apache2

À partir de là, Apache peut utiliser la vraie IP du visiteur, transmise par Varnish via X-Forwarded-For.

Lire la suite

Edgar Cruz - Dream On photo

Edgar Cruz – Dream On

Voici Edgar Cruz interprétant Dream On d’Aerosmith à la guitare classique :

Écoutez bien, il retranscrit même la voix et le solo dans son jeu. Hallucinant.

game-of-thrones

A Game of Thrones, le Trône de Fer saison 1

A Game of Thrones (Le Trône de Fer en français) est une adaptation de la série d’epic-fantasy A Song of Ice and Fire, écrite par George R. R. Martin.

Ses romans sont connus pour leurs personnages extrêmement détaillés et vivants, leurs renversements radicaux de situations et leurs intrigues politiques.

Dans un genre où la magie tient généralement le premier rôle, cette série fait au contraire rarement appel à celle-ci, qui est décrite au début du roman comme un phénomène ayant existé mais ayant pratiquement disparu ; cela ne la rend bien entendu que plus intrigante.

La série explore un monde médiéval où règne une pléthore de personnages qui jouent au seul jeu important : le jeu des trônes. Et à ce jeu, soit vous gagnez, soit vous mourez. Il n’y a pas de demi-mesure.

Lire la suite