Proxy : Créer un proxy avec Apache
Contents
1 Introduction
Avec le mod_proxy d'Apache, il y a plusieurs cas d'utilisation. Je vais donc proposer ici 2 scénarios.
1.1 Scénario 1
Alors voila ! je suis dans une école d'informatique où (comme dans beaucoup d'écoles) seul le port 80 est ouvert et le cours n'est pas toujours intéressant.
Que faire donc pour pouvoir accéder a son serveur en SSH, jouer a world of warcraft ou encore télécharger comme un porc sur la mule.
Et bein Uncle Tom l'a un super patern pour toi qui veux breaker les laws : le APACHE MOD_PROXY PLATINUM EDITION !
Ici nous travaillons sur Debian (ouais mdame) mais la configuration est sensiblement la même sur les autres system tant que vous utilisez le mod_proxy de Apache2
1.2 Scénario 2
Je souhaites ici rediriger un flux entrant sur mon port standard (80) vers une application (sur la même machine ou non) en faisant de la réécriture d'URL. L'avantage c'est qu'avec le mod_proxy, point besoin d'utiliser RewriteEngine & Co ! Le module proxy est capable de se charger d'une bonne partie de la réécriture et notamment de cacher le numéro du port (pratique pour les applications tournant sur tomcat).
2 Installation
aptitude |
aptitude install apache2 apache2-utils apache2.2-common libapache2-mod-proxy-html |
Then activate modules :
a2enmod |
a2enmod proxy_connect a2enmod proxy_http a2enmod proxy_html |
And restart Apache.
3 Configuration
3.1 Scénario 1
3.1.1 Debian
Tout d'abord nous allons configurer mod proxy en question. Voici mon fichier "/etc/apache2/mods-available/proxy.conf" détaillé :
Nous créons ensuite le fichier "htpasswd" (e.g. pour l'utilisateur toto)
htaccess |
htaccess -c /etc/apache2/.htpasswd-proxy toto |
Il ne reste plus qu'a charger les modules
cd /etc/apache2/mods-enabled/ ln -s ../mods-available/proxy.load . ln -s ../mods-available/proxy.conf . ln -s ../mods-available/proxy_connect.load . ln -s ../mods-available/proxy_http.load . |
Puis redémarrer apache2
/etc/init.d/apache2 restart |
3.1.2 OpenBSD
Sous OpenBSD, pas d'installation particulière à faire puisqu'Apache est installé de base. Il suffit juste d'ajouter ceci dans la conf :
Puis redémarrez le service :
apachectl stop apachectl start |
Là clairement, tout le monde y a accès, veillez à rajouter un peu de sécurité tout de même.
Personnellement, mon Apache est bindé sur un port que seul le réseau local et les personnes connectées en VPN peuvent accéder.
3.1.3 PuTTY : Tunneling SSH
Bon c'est super on a un beau proxy mais comment en tirer pleinement profit.
Nous allons utiliser PuTTy afin de nous simplifier la vie, car c'est un des rare client SSH multiplateforme qui offre toutes les fonctions dont nous avons besoin : Tunneling + Proxy HTTP
Le principe est le suivant :
- Etablir une connexion SSH sur le port 22
- Passer par se serveur proxy qui autorise la connexion sur le port 22
- Grace a SSH nous établissons des tunnels cryptés locaux qui redirigent vers différents services
- Nous accédons aux services sur le localhost grâce aux tunnels
Voici comment je configure mon client putty pour pouvoir jouer a World Of Warcraft.
{Menu "Session"}
- Host Name : <serveur SSH de destination>
- Port : 22
{Menu "Proxy"}
- Proxy type : HTTP
- Proxy hostname : <adresse du serveur proxy>
- Port : 80
- Username : <nom d'utilisateur créé dans le htpasswd>
- Password : <password de ce user>
{Menu "SSH / Tunnels"}
- Local Ports accept connections from other hosts : ON
- Source port : <port local a ouvrir> (ex. 3724)
- Destination : <ip : port du service que l'on veut forwarder> (ex. eu.logon.worldofwarcraft.com:3724)
cliquer sur "add" pour en ajouter d'autres ex. 5900:vnc ; 143:imap ; 25:smtp (pour WoW, il ne faut pas oublier celui ci)
Source port : "6112" Destination : "80.239.185.41:6112"
That's good ! ca veut dire "c'est bon" en anglais ... pour World Of Warcraft, il ne reste plus qu'a modifier le fichier "realmlist.wtf" et mettre
set realmlist localhost
Comme dirait une célèbre philosophe : "Et c'est parti pour le show !"
3.2 Scénario 2
Je vais prendre le cas ici un outil "myapp" tournant sur Tomcat, port 8080. J'ai donc besoin dans un premier temps de dire à Tomcat qu'il va se faire "proxifier", puis je vais avoir a mettre en place la partie proxy sur Apache.
3.2.1 Tomcat
Sur la partie serveur, il va falloir aller modifier le connecteur de l'application en question pour lui ajouter les paramètres proxy :
/etc/tomcat6/server.xml |
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" proxyName="myapp.mycompany.lan" proxyPort="80"/> |
On indique à Tomcat que notre site sera accessible depuis myapp.mycompany.lan sur le port 80.
Vous pouvez redémarrez votre tomcat maintenant.
3.2.2 Apache
On va activer le module proxy :
Puis le configurer pour notre site en question. Nous utiliserons ici un VirtualHost pour notre applicatif :
La partie ProxyPass permet de dire ou doit rediriger le proxy. Ici le proxy apache et tomcat tournent sur la même machine, c'est pourquoi les URL pointent sur le localhost.
Il ne reste plus qu'a redémarrer Apache et votre service initialement disponible à cette adresse :
http://myapp.mycompany.lan:8080/
sera disponible à :
http://myapp.mycompany.lan/