Introduction

Un reverse-proxy (parfois appelé proxy inverse) va permettre de répartir les requètes arrivant sur un serveur web. Le client (navigateur web) va contacter le proxy qui va alors envoyer la requete vers le serveur web destinataire en fonction de certains critères. Par exemple cela peut servir à

  • distribuer la charge entre plusieurs machines
  • offrir l'accès à des serveurs hébérgées sur des machines à l'interieur du réseau
  • proposer l'accès à plusieurs serveurs différents à partir d'un même port
  • ajouter une couche de chiffrement (https) vers un serveur qui n'en propose pas.

Vous pouvez obtenir plus de détails sur commentcamarche ou sur wikipedia

Nous allons illustrer le dernier point dans la suite de cet article.

Une application concrète

Prenons le cas ou vous voulez utiliser AjaxTerm.

Pour mémoire AjaxTerm est une application web qui permet d'obtenir un accès shell sur votre machine à partir d'un simple navigateur internet. Vous avez peut-être déjà lu l'article de NaWer paru sur le planet il y a quelques temps.
Sa solution[1] pour protéger les communications est d'utiliser la fonction reverse-proxy de Apache2. Si vous n'utiliser Apache que pour cela, c'est un peu utiliser un marteau-piqueur pour tuer une mouche[2]. Nous allons remplacer le lourd Apache par le léger pound.

Nous cherchons donc à obtenir une configuration comme celle-ci : Architecture

Installation

Commencez par installer AjaxTerm comme décrit sur le site web ou dans l'article de NaWer

wget http://antony.lesuisse.org/qweb/files/Ajaxterm-0.9.tar.gz
tar zxvf Ajaxterm-0.9.tar.gz
cd Ajaxterm-0.9

En complément, nous pouvons faire en sorte qu'il soit lancé au boot de la machine :
./configure
sudo make install
sudo update-rc.d ajaxterm defaults
sudo invoke-rc.d ajaxterm start

Pound existe dans les dépots universe, il vous suffit donc de l'installer avec adept, synaptic ou encore apt-get :
sudo apt-get install pound
Un message vous informe qu'il faut le configurer avant de le démarrer. Nous allons nous y employer tout de suite :)

Le fichier de configuration se nomme /etc/pound/pound.cfg. Editez le en tant que root et modifiez les paramètres suivants :

User www-data
Group www-data
#ListenHTTP 127.0.0.1,8080
ListenHTTPS *,443 /etc/pound/pound.pem
UrlGroup ".*"
Backend 127.0.0.1,8022,1
EndGroup

Quelques explications :

  • User/Group : l'utilisateur qui execute le démon
  • ListenHTTP/ListenHTTPS : on ne fait que du https, on laisse le port 80 pour un autre serveur web[3]
  • UrlGroup : syntaxe de type expression régulière perl : on redirige tout
  • BackEnd : le destinataire de nos requètes

Je vous conseille la page de manuel pour plus de détails. Pensez aussi au site et à la mailing list

Il faut mainenant générer un certificat ssl. Nous allons en créer un auto-signé avec une clef non protégée. Pour cela tapez les commandes suivantes et répondez aux questions posées :
cd /etc/pound
sudo openssl req -days 1000 -new -x509 -nodes -out pound.pem -keyout pound.pem
sudo openssl verify pound.pem

Il ne reste plus qu'a autoriser le démarage de pound en positionnant la valeur startup=1 dans /etc/default/pound. Puis vous lancez le démon ainsi :
sudo invoke-rc.d pound start
puis à pointer votre navigateur vers https://LaMachineOuEstInstalléToutLeBouzin/

Conclusion

Même si on peux se demander à quoi sert un tel outil dans un environement de particulier, pound peux être très utile pour créer un Home Server. Il peux faciliter/protéger l'accès à AjaxTerm, Webmin et est le complément idéal d'un serveur web simple comme Cherokee[4]. On peux alors créer des architectures complexes sans avoir à se plonger dans la configuration d'Apache. Il peux donc être bénéfique tant pour votre consommation d'aspirine que pour l'Idle de votre machine ;)

Notes

[1] la même que décrite sur le site de AjaxTerm

[2] AMHA

[3] ou un autre pound

[4] Nous en parlerons peut-être bientôt