(modifié le 25 novembre 2010 à 21:48)

Le reverse proxy (proxy inverse) est souvent utilisé en entreprise. Il permet d'atteindre des applications depuis Internet sans laisser entrer le visiteur sur le réseau de l'entreprise. C'est une pierre angulaire de la sécurité dans le cas de l'utilisation de serveurs web.

Je vous présente un script PHP permettant d'afficher les règles actives sur votre reverse proxy Apache.

Explication du schéma : les serveurs web 1 et 2 ainsi que le serveur SVN sont accessibles depuis l'intérieur du réseau de l'entreprise (LAN) ainsi que depuis l'extérieur (Internet). Plutôt que d'ouvrir un port différent pour que chaque serveur soit accessible depuis l'extérieur nous utilisons un reverse proxy avec une URL différente pour chaque serveur. Sur le principe le reverse proxy est situé comme dans une DMZ, sauf qu'un seul port est autorisé.

Seul le reverse proxy est autorisé à atteindre les serveurs depuis l'extérieur. Ce qui limite fortement le risque d'attaque et d'intrusions par un tiers. D'autre part le reverse proxy est capable de réaliser de la mise en cache ce qui économie de la bande passante. Plusieurs reverse proxy existent : Apache pour le plus connu, nginx ou encore Varnish (le plus efficace).

Aujourd'hui je vous parle d'Apache, car le plus simple à configurer si vous n'avez pas de besoin de performance particulières. Les règles du proxy inverse sont stockées dans le fichier :

/etc/apache2/mods-available/proxy.conf

Parce que ce fichier est souvent sujet à des modifications, il est préférable d'avoir une vue en temps réel sur les règles. J'ai développé un script PHP (simple) permettant cela.

<?php
# Auteur: Mr Xhark
# URL: https://blogmotion.fr
# Date: 25/11/2010
# Licence CC: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
# Fonction : Affiche la correspondance des URL du reverse-proxy

echo '<html><meta><title>Correspondance des URL de la machine proxyrev</title></meta>';
echo '<body>';
echo '<h1>Correspondance des URL de la machine <em>' . $_SERVER['SERVER_NAME'] . '</em></h1>';

ob_start();

# fichier de configuration des URL (géré par apache2)
$fichierConf = '/etc/apache2/mods-available/proxy.conf';
$cmdOFF = "more $fichierConf | sed '/ *#/d; /^ *$/d'";  // sans comm
$cmdON  = "more $fichierConf";                          // avec comm

# récupération get
if ($_GET['c']) {
$c = $_GET['c'];
}
else $c = 1;

if ((int) $c == 1) {
$c = $cmdOFF;
$lien = '<a href="?c=2" title="avec commentaire">Voir le fichier avec les commentaires</a>';
}
else {
$c = $cmdON; // eviter toute tentative injection sql
$lien = '<a href="?c=1" title="sans commentaire">Voir le fichier sans les commentaires</a>';
}

passthru($c);

$result = ob_get_contents();
ob_end_clean();

echo $lien . '<hr />';
echo '<pre>' . $result . '</pre>';
echo '<hr />' . $lien;
echo "\n</body>\n</html>";
?>

En haut et en bas du script se trouve un lien pour afficher ou masquer les commentaires. C'est très pratique et rend le fichier de configuration plus lisible.

Le script est simple mais efficace et vous ferez gagner du temps si vous êtes administrateur réseau. Comme d'habitude, le code est sous licence Creative Commons, profitez-en pour l'utiliser et/ou l'améliorer!

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter