Proxy HTTP Apache2 avec mod_proxy

Que ce soit pour obtenir une adresse IP différente ou pour passer au travers des règles de filtrages de certains sites/firewalls,
vous pouvez avoir l’envie de faire transiter votre flux web par votre serveur Apache personnel.

Pour ceci nous allons créer un hôte virtuel dédié à cette usage, l’ouverture d’un proxy sans authentification étant extrêmement dangereuse car n’importe qui peut utiliser votre IP, nous allons donc recourir à une authentification de type HTTP/Basic pour en sécuriser l’accès.

Attention ici il n’est absolument pas question de chiffrer le flux HTTP, c’est une simple redirection de ce dernier vers un nouveau point de sortie, qui plus est les requêtes DNS sont toujours traitées par votre serveur DNS habituel, gardez donc à l’esprit que cette technique ne vous rends pas invisible, notamment vis à vis de votre réseau local.

J’ai choisi ici le port 443 pour héberger le service, tout d’abord parce que c’est un port qui est généralement toujours ouvert quelque soit l’endroit d’où l’on se connecte et ensuite car je n’ai pas de site HTTPS hébergé sur cette machine. A vous de faire votre choix pour ce paramètre.

Il vous faut dans un premier temps créer un fichier contenant les couples login/mot de passe avec la commande htpasswd :

htpasswd -c /etc/apache2/htpasswd username

On vas ensuite créer le fichier de configuration de notre vhost dans le dossier /etc/apache2/sites-available/proxy :

<VirtualHost *:443>

ServerName proxy.mydom.fr
DocumentRoot /var/www/proxyjail

ProxyRequests On
ProxyVia On

php_value engine off

<Proxy *>
AuthType Basic
AuthName « Restricted Area »
AuthUserFile /etc/apache2/htpasswd
require valid-user

Order deny,allow
Allow from all
</Proxy>

<Directory /var/www/proxyjail>
AllowOverride None
Options -All
</Directory>

</VirtualHost>

Certes notre virtual host ne vas normalement pas être utilisé pour délivrer du contenu HTML local — encore moins PHP ou un autre langage de scripting d’ou la presence de la ligne « php_value engine off  » — il est cependant obligatoire qu’il dispose d’un DocumentRoot. Utiliser /var/www comme DocumentRoot dans notre cas permettrait certainement à un utilisateur malveillant d’accéder à beaucoup de choses qu’il ne devrait pas.
Nous allons donc créer le dossier /var/www/proxyjail et s’en servir pour enfermer les utilisateurs du proxy à l’intérieur. ( Attention ici il n’est pas question de chroot ).

mkdir /var/www/proxyjail
chmod 744 /var/www/proxyjail
touch /var/www/index.html

Pour finir il suffit d’activer le vhost et de relancer apache

a2ensite proxy
apache2ctl configtest && /etc/init.d/apache2 restart

Il ne vous reste plus qu’à configurer votre navigateur pour qu’il utilise votre proxy et le tour est joué :
Configuration du proxy sous Firefox

 

 

Apache2-mpm-itk : Utiliser un utilisateur différent pour chaque vhost

Qu’est ce qu’un MPM Apache ?

le MPM ou Multi-Processing Module, est le composant d’Apache qui gère les connexions simultanées, en terme de process et/ou de thread.

 

Quel est l’intérêt d’utiliser apache2-mpm-itk plutôt que worker ou prefork ?

Une des limitations des mpm classiques est qu’ils utilisent le même uid:gid, définis dans /etc/apache2/apache2.conf pour traiter les requêtes de tous les vhosts.

Le mpm itk permet de choisir un uid:gid différent pour chaque virtual-host et ce sans avoir recours aux cgi ou aux modules suexec ou suphp, ce qui est extrêmement pratique dans le cadre d’un hébergement mutualisé ainsi que dans certains cas pratiques.

Coté sécurité, le mpm itk permet d’isoler la configuration de chaque vhost directement dans son fichier de configuration.

 

Performances :

La principale limitation du mpm itk est sa performance. Parce que le MPM ITK crée puis détruit un processus pour chaque requête, les performances de ce MPM s’en trouvent bien dégradées notamment par rapport à Prefork ou Worker, bien que ITK reste plus performant que les modules suexec ou suphp.
Si la performance vous est indispensable il sera bon de se tourner vers le mpm per-user qui réalise le même travail en profitant des threads mais qui demande bien plus d’efforts de configuration. Ou encore vers les solution FastCGI.

 

Installation :

Pour installer Apache2-mpm-itk, utilisez simplement votre gestionnaire de paquet, qui s’occupera lui même via les install script de remplacer le mpm que vous utilisez actuellement

apt-get install apache2-mpm-itk

Si vous souhaitez compiler ce module depuis les sources je vous conseille cet article :

 http://blog.stuartherbert.com/php/tag/mpm-itk/

 

Configuration :

Pour finir il vous suffit ensuite de rajouter ce bloc dans le fichier de configuration du vhost :

<IfModule mpm_itk_module>

AssignUserId username groupname

</IfModule>

Il ne reste plus qu’à recharger la configuration d’Apache :

apache2ctl configtest && /etc/init.d/apache2 restart

Vous pouvez maintenant verifier que les processus Apache se lancent avec les bons droits :

ps aux | grep apache