A voodoo doll with pins laying on a wooden floor.

Voodoo d’imprimantes

De temps en temps, je reçois des mails un peu farfelus qui me font bien rigoler. Il y a quelques mois (oui, je suis un peu retard dans mon ménage…), j’ai reçu celui-ci :

From: ………………..@aol.fr
Website:
Message: bjr
j’ai lu votre article comment connecter un pc a une tv mais probleme

COMME IL FAUT TOUJOURS DEBRANCHER DU MATERIEL ELECTRIQUE QUAND ON FAIT UNE INTERVENTION JE NE PEUT PLUS RIEN LIRE

j’ai voulu imprimer cette page pour l’avoir a cote de moi mais mon imprimante refuse de partir – ailleurs ca fonctionne
question c’est vous qui empechez cette fontion? merci

Lire Voodoo d’imprimantes

Gaki no Tsukai, un jeu de gage muet japonais à mourir de rire photo

Gaki no Tsukai, un jeu de gage muet japonais à mourir de rire

Voici un jeu japonais auquel j’adorerais jouer un jour ! Chaque joueur choisit une carte et celui qui tire la carte marquée écope d’un gage…

Le tout se passe dans une bibliothèque où le silence est de rigueur, ce qui a pour effet de renforcer les fous-rires !

La vidéo n’est pas complète – j’en avais une version de 12 minutes mais en bien moins bonne qualité.

Le jeu, Gaki no Tsukai, se passe à Tokyo et le grand costaud n’est autre qu’Ernesto Hoost, ancien champion de boxe.

Lire Gaki no Tsukai, un jeu de gage muet japonais à mourir de rire

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 Apache mod_remoteip : restaurer la vraie IP derrière un reverse proxy