La sécurisation des serveurs Web représente un challenge de taille pour les administrateurs réseaux. En effet, toutes les actions effectuées en ligne tels que l’utilisation d’internet et l’envoi d’emails passent obligatoirement par le réseau public. De ce fait, une simple connexion à internet suffit à rendre ces systèmes vulnérables aux logiciels malveillants.. C’est la raison pour laquelle, un composant réseau appelé reverse-proxy (proxy inverse) est utilisé.

Qu’est ce qu’un reverse-proxy ?

Pour vous résumer, le reverse-proxy est un intermédiaire de communication réseau recevant des requêtes afin de les transmettre à l’ordinateur cible. Lorsque l’on parle de réseau d’entreprise, on parle souvent de reverse-proxy car ce système est largement utilisé afin de fournir un accès sécurisé et contrôlable par les utilisateurs.

Un serveur proxy a pour fonction de canaliser toutes les requêtes du réseau interne pour les transmettre sur le serveur. De plus, et afin d’économiser de la bande passante, les serveurs proxy sont généralement configurés afin de pouvoir mettre en cache les données fréquemment demandées, ce qui limite le nombre de requêtes utilisées pour les afficher.

Alors qu’un Forward-proxy protège les appareils clients des mauvaises influences du réseau public, un reverse proxy opère exactement dans le sens contraire. En effet, ce système sert de sécurité supplémentaire et protège les serveurs Web.

Fonctionnement d’un reverse-proxy

Protégé par un parefeu, les serveurs reverse-proxy se trouve en général dans un réseau interne. Il s’agit de la seule connexion entre internet et le réseau privé. Toutes les requêtes passent par ce réseau avant d’être transférées au systèmes ciblés. Voyez ci-dessous les différentes applications d’un serveur reverse-proxy:

  • Anonymisation: Le reverse-proxy intercepte toutes les requêtes avant de les transmettre au système ciblé.
  • Encodage et protection: Le reverse-proxy propose l’installation de systèmes de contrôle comme un antivirus afin de filtrer les paquets reçus et renforcer la protections des serveurs.
  • Répartition de charge: Il permet la mise en place d’un répartiteur de charge, en anglais load-balancing. Ce système empêche la surcharge d’un système. En cas de panne d’un serveur, ce système va redistribuer les requêtes entrantes sur d’autres serveurs disponibles.
  • Caching: Il permet d’accélérer la vitesse du service grâce à son système de mise en cache.
  • Compression: un serveur reverse-proxy peut aussi compresser les données entrantes et sortantes. Ce type de serveur est souvent utilisé en combinaison avec Apache et nginx.

Comment configurer Apache comme Reverse-proxy ?

Il est possible d’installer un serveur reverse-proxy sur un serveur Apache. En effet, Apache dispose de modules d’extension permettant d’installer la fonction proxy. Ce dernier peut être installer rapidement grâce à quelques lignes de codes. Ci-dessous, le guide va vous expliquer comment installer un reverse-proxy sur un système d’exploitation Ubuntu comprenant un serveur Apache.

Installer le module proxy d’Apache

Afin de pouvoir utiliser un serveur Apache comme reverse-proxy, il vous faudra le module mod_proxy. Ce module permettra d’améliorer de façon considérable les fonctionnalités de bases, mais peut aussi être accentué par diverses extensions complémentaires:

  • mod_proxy_http: dispose de toutes les fonctionnalités pour les requêtes HTTP et HTTPS.
  • mod_proxy_ftp: nécessaire afin de disposer des fonctions de proxy pour les requêtes FTP.
  • mod_proxy_connect: dispose des fonctionnalités proxy pour le tunnel SSL.
  • mod_cache, mod_disk_cache et mod_mem_cache: installe les fonctions de cache afin de stocker le contenu sur la mémoire cache de votre serveur Apache.
  • mod_proxy_html: active la réécriture des liens
  • mod_headers: permet la modification des entêtes HTTP
  • mod_deflate: permet la compression

Afin de pouvoir tout installer, la ligne de commande est la suivante:

$ sudo apt-get install libapache2-mod-proxy-html

Comment activer les modules requis ?

Vous pouvez activer les modules requis d’Apache en utilisant la commande a2enmod.  Si vous désirez désactiver un module actif, il vous suffira d’utiliser la commande a2dismod. Afin de charger les modules mod_prox et mod_proxy_http, tapez les commandes suivantes:

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

Une fois les modules activés, il est nécessaire de redémarrer le serveur Apache:

$ sudo apache2 reload

Comment créer le fichier de configuration ?

Afin que le serveur reverse-proxy accepte les requêtes et puissent les transmettre aux bons serveurs sur votre réseau, il faut désactiver le fichier de configuration 000-default.conf se trouvant dans le répertoire /etc/apache2/sites-enabled et le remplacer par un fichier hôte virtuel comme example.conf. Il est préférable de créer un fichier hôte pour chaque serveur cible. Chaque fichier hôte doit avoir sa propre adresse ip:

<VirtualHost *:80>
ServerName domaine.td
ServerAlias www.domaine.td
ProxyRequests Off
ProxyPass / http://123.456.7.89/
ProxyPassReverse / http://123.456.7.89/
</VirtualHost>

Les instructions pour le fonctionnement de la fonction proxy sont définies par la commande <VirtualHost>. Dans le fichier, vous y trouverez les commandes suivantes:

  • ServerName: Cette commande défini le nom du premier serveur sur internet. Sur l’exemple ci-dessus, le serveur Apache est programmé pour accepter toutes les requêtes du domaine “domaine.td“.
  • ProxyPass: Cette commande défini l’adresse cible pour la redirection.
  • ProxyPassReverse: Cette balise va réécrire l’en-tête des réponses du serveur pour qu’elles puissent être en accord avec le serveur proxy.

L’exemple ci-dessus dispose aussi de deux autres commandes qui sont les suivantes:

  • ServerAlias: cette commande va permettre d’autoriser un nom différent pour le serveur cible.
  • ProxyRequest: Cette commande va permettre de refuser l’utilisation du serveur Apache comme un proxy-forward.

Si vous avez bien défini les règles, il vous suffit d’activer la configuration par le biais du terminal de commande:

$ sudo a2ensite example.conf

Conclusion

Vous êtes désormais  en mesure de savoir ce qu’est un serveur Reverse-proxy et faire la différence entre un serveur reverse-proxy et un proxy-forward. Vous avez appris à configurer un serveur proxy sur votre serveur privé VPS sous Ubuntu disposant d’un serveur Apache en quelques commandes SSH.

N’hésitez pas à partager votre expérience dans ce domaine ou à poser vos questions !