Présentation du Reverse Proxy
Dans ce tutoriel, je vais vous expliquer comment configurer un reverse proxy avec Apache sur Ubuntu (En adaptant les commandes d’installation de Apache, ce tutoriel peut facilement être transposer pour d’autre distribution).
Avant de rentrer dans la partie technique, faisons le point sur qu’est ce qu’un Reverse proxy ?
Un reverse proxy est un serveur (Web) qui est placé avant le serveur Web de destination où est hébergé le service Web (Site Internet).
Quand les ordinateurs consultent un service Web qui utilise un reverse proxy, ils n’accèdent pas directement au serveur où se trouve l’application, la requête HTTP arrive en premier sur le reverse proxy, qui ensuite fait lui même la requête au serveur de destination.
C’est le même principe qu’un serveur proxy mandataire que l’on retrouve en entreprise pour aller sur Internet.
L’utilisation d’un reverse proxy à plusieurs avantages :
- Economie d’adresse IP (v4), les sites website1 et website2 vont avoir la même adresse IP sur Internet, celle du reverse proxy.
- Augmenter le niveau de sécurité (Mod Security, Crowdsec, Fail2ban)
- Réduire la charge des serveurs Web avec un système de cache et/ou une décharge SSL
- Réécrire le contenu HTML
- Centraliser la gestion des certificats SSL
- …
Pour ce tutoriel, j’ai utilisé un seul ordinateur avec Ubuntu 22.04, pour simuler les serveurs Web où sont hébergés les sites Internet, j’ai utilisé Docker.
Si vous débutez sur Apache2, je vous invite à lire ce cours : Apache2 : installation et configuration.
Installer Apache2 sur Ubuntu
Par défaut Apache2 est disponible dans les dépôts d’Ubuntu, pour bénéficier d’e la dernière version d’Apache d’un version plus récente de Apache2, je vais passer par le dépôt ppa:ondrej/apache2.
L’utilisation du dépôt ppa:ondrej/apache2 n’est pas obligatoire.
Ajouter le dépôt ppa:ondrej/apache2 :
sudo add-apt-repository ppa:ondrej/apache2
Confirmer l’ajout du dépôt en appuyant sur la Touche Entrée.
Le dépôt est ajouté.
Mettre à jour la liste des paquets :
sudo apt update
Installer Apache2 :
sudo apt install apache2 -y
Patienter pendant l’installer d’Apache2 sur le serveur :
Apache2 est installé.
Activer le Reverse Proxy sur Apache2
Par défaut Apache2 n’est pas la possibilité d’être configurer en tant que Reverse proxy, car Apache2 est principalement utiliser comme serveur Web.
Afin qu »Apache2 puisse être utiliser comme Reverse Proxy, il faut activer le module proxy_http
qui se trouve dans le dossier : /etc/apache2/mods-available
.
Pour afficher la liste des modules actifs d’Apache2, on peut les voir en listant le contenu du dossier /etc/apache2/mods-enabled
.
Pour activer le mod proxy_http entrer la commande suivante :
sudo a2enmod proxy_http
En activant le mod proxy_http, le mod proxy a été activé également.
Pour la prise en compte des nouveaux modules, il faut redémarrer Apache2.
sudo systemctl restart apache2
Si on regarde de nouveau dans le dossier /etc/apache2/mods-enabled
, on peut voir les deux modules proxy
et proxy_http
.
Création et configuration des virtualhosts
Le fonctionnement des virtualhosts est identique que l’on utilise Apache2 comme serveur Web où comme Reverse proxy, seul les instruction seront différentes dans le fichier de configuration.
Les fichiers de virtualhosts sont créés en premier dans le dossier /etc/apache2/sites-available
.
Aller dans le dossier :
cd /etc/apache2/sites-available
On va maintenant créer un fichier pour la configuration du site Website1 :
sudo nano reverse-proxy-website1.conf
Voici le contenu du fichier :
Les paramètres doivent être adapter à votre environnement
Explications des paramètres :
Paramètre | Explication |
---|---|
ServerName | Nom de domaine associé au virtualhost |
ProxyPreserveHost | On|Off permet de garder l’entête Host lors du transfert de la requête au serveur de destination, si vous utilisez des virtualhosts sur le serveur Web de destinations, il faut impérativement laisser ce paramètre à On. |
ProxyRequests | Off si cette directive est passé On, cela permet à Apache2 d’agir comme Proxy pour aller Internet comme Squid. Pour des raisons de sécurité, elle doit être placé à Off sinon il est possible d’utiliser le service Apache2 comme proxy pour usurpé une adresse IP. |
ProxyPass | Permet de faire la correspondance entre le chemin dans l’url et le serveur de destination. Ici on envoie toute les requêtes / vers le serveur Web http://127.0.0.1:20001/ |
ProxyPassReverse | Généralement on retrouve la même valeur que ProxyPass, cela permet d’ajuster l’URL dans l’entête HTTP |
Maintenant que la configuration du virtualhost est terminée, on va créer un lien symbolique dans le dossier /etc/apache2/sites-enabled pour activer la configuration.
sudo ln -s /etc/apache2/sites-available/reverse-proxy-website1.conf /etc/apache2/sites-enabled/
Avant de recharger le configuration, on va tester la configuration pour s’assurer qu’il n’y a pas d’erreur bloquante :
apachectl configtest
Si la syntaxe est OK, on peut recharger la configuration :
sudo systemctl reload apache2
On va maintenant pouvoir tester la configuration, avant de faire un test, assurer vous que le domaine (url ) pointe sur le reverse proxy et non sur le serveur Web de destination. Cette vérification faite, lancer un navigateur est allé à l’URL du virtualhost.
On peut s’assurer du passage par le Reverse proxy Apache2 en regardant les logs qui se trouve /var/log/apache2/other_vhosts_access.log
sudo tail -f /var/log/apache2/other_vhosts_access.log
Je ne vais pas rentrer dans le détail, juste mettre les captures, mais je vais faire la même chose pour le site Website2.
Dans les logs, je peux valider le passage par le Reverse proxy.
Pour une meilleur lisibilité des logs, il est possible de séparer les logs dans des fichiers différents pour chaque virtualhost.
Dans la configuration du virtualhost, on va ajouter les paramètres LogLevel, ErrorLog et CustomLog.
Recharger la configuration pour la prise en compte des modifications :
sudo systemctl reload apache2.
Dans le dossier /var/log/apache2
, on peut voir les fichiers :
Les logs de navigation sont maintenant enregistré dans le fichier dédié au virtualhost :
Vous savez maintenant comment configurer Apache en tant que Reverse proxy pour protéger vos serveurs Web.