Les serveurs proxy et reverse proxy pour les débutants
I. Présentation
Dans ce tutoriel, nous allons aborder les notions de proxy et reverse proxy de manière théorique, car ce sont deux notions très importantes en informatique.
Les notions de proxy et reverse proxy sont très proches, c'est pour cette raison que les deux seront présentés dans le même article, mais aussi parce qu'il est indispensable de connaître ces deux approches.
II. C'est quoi un proxy ?
Un serveur proxy, appelé également serveur mandataire, est un serveur qui jouera le rôle d'intermédiaire entre un client et un serveur distant. Par exemple, entre les ordinateurs connectés au réseau local d'une entreprise et Internet (et ses milliards de sites).
Jouer le rôle d'intermédiaire entre deux hôtes, c'est-à-dire ? Dans quel but ? En se positionnant entre le client source et le serveur cible, le serveur proxy va pouvoir réaliser plusieurs actions :
- Filtrage, ce qui va permettre de bloquer certains sites ou certaines catégories de sites.
- Cache, ce qui va permettre de mettre en cache les requêtes (exemple : page web) afin de les retourner plus rapidement aux postes de travail.
- Compression, ce qui va permettre de réduire le poids des pages au moment de retourner le résultat aux clients.
- Journalisation, toutes les requêtes reçues de la part des clients (postes de travail) seront stockées dans des journaux (logs).
- Anonymat, puisque votre poste de travail se cache derrière le proxy, le serveur Web verra seulement le proxy.
- Droits d'accès, puisque le proxy est un intermédiaire, il peut servir à positionner des droits d'accès pour filtrer les accès, au-delà du filtrage Web.
Prenons un exemple pratique : un poste de travail est configuré pour utiliser un proxy et l'utilisateur souhaite accéder au site "www.it-connect.fr". Le poste de travail va demander au serveur proxy de récupérer la page du site "www.it-connect.fr", alors le proxy va se connecter au site "www.it-connect.fr" et retourner la page Web au poste client. D'un point de vue du serveur qui héberge le site "www.it-connect.fr", on verra seulement le serveur proxy et on ignore la présence du poste de travail.
En quelques mots, on peut dire que le poste client demande au proxy d'aller récupérer le contenu de la page web à sa place et de lui retourner le résultat. Les serveurs proxy sont très souvent utilisés pour la navigation Internet, il agit donc sur les protocoles HTTP et HTTPS, mais on peut rencontre d'autres types de proxy (exemple : Proxy SOCKS pour faire du SSH).
A. Proxy et proxy transparent
En entreprise, il est très fréquent d'utiliser un serveur proxy et bien souvent il est là pour réaliser du filtrage Web afin de sécuriser la navigation Internet des utilisateurs, notamment dans les établissements scolaires. Par exemple, on va empêcher les utilisateurs d'accéder aux sites pornographiques.
Il y a deux manières d'intégrer un proxy :
- Un proxy (classique)
Le proxy doit être déclaré sur le poste client afin que ce dernier soit configuré de manière à passer par le proxy lorsqu'une requête est envoyée, plutôt que de contacter directement l'hôte distant. Si le serveur proxy n'est pas configuré sur le poste client, alors la requête sera envoyée directement au serveur distant, comme si le serveur proxy n'existait pas.
Il y a plusieurs façons d'intégrer un serveur proxy dans une infrastructure. Cela peut être en DMZ, comme ça les postes clients contactent le serveur proxy isolé, et c'est ce serveur qui se connecte à Internet, et non les postes clients directement. Dans certains cas, la fonction de proxy est assurée directement par le pare-feu et donc dans ce cas, il n'y a pas la notion de DMZ (voir second schéma).
- Un proxy transparent (implicite)
Lors de l'utilisation d'un proxy transparent, appelé aussi proxy implicite, le proxy ne doit pas être configuré sur le poste et ce dernier l'utilisera sans s'en rendre compte, car le proxy sera utilisé comme passerelle au niveau de la configuration du poste client. C'est la configuration idéale pour filtrer le trafic émis par les postes clients.
Dans ce cas, la fonction de pare-feu et de serveur proxy transparent sont généralement regroupée sur un même serveur/équipement. Même si l'on pourrait mettre le serveur proxy transparent sous le pare-feu, et que les trames soient relayées entre le proxy et le pare-feu.
B. Comment configurer un proxy sur un poste de travail ?
Sur un poste client, il y a plusieurs manières de configurer un proxy. Tout d'abord, il faut savoir qu'un proxy peut se configurer au niveau de chaque logiciel, sous réserve que le logiciel prenne en charge l'utilisation d'un proxy.
Sous Windows, le fait de configurer un proxy dans les "Options Internet" de la machine va permettre d'utiliser ce proxy dans d'autres logiciels qui vont venir se référer à cette configuration. Néanmoins, certains logiciels comme Firefox intègrent leur propre gestion du proxy (même si par défaut il va utiliser la configuration du système), ce qui peut permettre d'outrepasser la configuration du système.
Sur Windows 11, pour configurer un proxy, il faut cliquer sur "Paramètres", "Réseau et Internet" puis "Proxy". Ensuite, il faudra cliquer sur "Configurer" au niveau de l'option "Utiliser un serveur proxy" et il ne restera plus qu'à renseigner l'adresse du proxy.
Dans Firefox, au sein des options, il faut cliquer sur l'onglet "Général" à gauche et tout en bas, au niveau de "Paramètres réseau", cliquer sur "Paramètres". La fenêtre "Paramètres de connexion" s'affiche et là on peut définir plusieurs proxy.
Vous allez me dire, comment configurer le proxy sur un parc informatique complet sans effectuer la configuration à la main... Dans ce cas, vous avez plusieurs solutions :
- Utiliser une GPO pour déployer les paramètres de configuration du proxy sur les postes (au niveau de Windows ou des navigateurs)
- Utiliser une GPO pour préciser l'emplacement d'un script d'auto-configuration du proxy ("proxy.pac") qui contient une fonction JavaScript "FindProxyForURL" dont l'objectif est d'indiquer si, pour une URL précise, le navigateur doit accéder au site directement ou s'il doit passer par le proxy. Le fichier doit porter l'extension "PAC" pour "Proxy Automatic Configuration".
C. Quels logiciels pour mettre en place un proxy ?
Pour mettre en place un serveur Proxy, il existe de nombreuses solutions. Certaines sont gratuites, d'autres sont payantes. Lorsque l'on parle de serveur proxy, j'ai un nom qui me vient en tête directement : Squid.
Squid est un logiciel qui permet de monter un proxy (et même un reverse proxy) sous Linux, il est performant et très célèbre. Il est toujours maintenu aujourd'hui et sa première version date de juillet 1996 ! Si vous montez un pare-feu avec PfSense, il est possible d'installer le paquet "Squid" pour ajouter la fonctionnalité de proxy à son pare-feu. En complément, l'installation du paquet "Squid-Guard" permettra d'effectuer du filtrage Web.
Au niveau des solutions payantes, il y a deux solutions assez connues : Olfeo et UCOPIA.
D. Le proxy est la notion d'anonymat
Je souhaitais revenir un peu plus en détail sur la notion d'anonymat lorsque l'on utilise un serveur proxy. Certes, en utilisant un serveur proxy il est possible d'être anonyme vis-à-vis du site que l'on visite, mais il faut savoir que le proxy va garder une trace de toutes les requêtes que vous lui envoyez. Autrement dit, il connaîtra tout votre historique de navigation. Pour être réellement anonyme sur Internet, la meilleure méthode consiste à utiliser un VPN.
E. Proxy de mise en cache
Un proxy de mise en cache, appelé "proxy-cache", effectue la mise en cache des données sur son disque local. Dans certains cas, on peut utiliser un proxy de mise en cache pour distribuer des mises à jour de logiciels : le proxy va télécharger une fois la mise à jour sur Internet et la mettre en cache, et ensuite il n'aura plus qu'à la distribuer aux postes clients directement, plutôt que chaque poste client se connecte sur Internet pour télécharger la mise à jour. Par exemple, l'éditeur ESET propose une fonctionnalité de mise en cache pour distribuer les mises à jour des signatures antivirus.
Il est à noter que cette mise en cache peut également être bénéfique dans le cadre de la navigation Internet.
F. Port utilisé par un serveur proxy
Il n'y a pas de port associé obligatoirement aux serveurs proxy, car ce n'est pas un protocole en soi. Malgré tout, il y a deux ports que l'on voit très souvent : 3128 et 8080. Pourquoi ? Tout simplement parce que le port 3128 est utilisé par défaut par Squid, et la popularité de ce logiciel fait que l'on associe souvent le port 3128 à la notion de proxy. Un autre numéro de port que l'on rencontre souvent est le 8080.
Néanmoins, rien ne vous empêche de monter un proxy et d'utiliser le port 80 comme port d'écoute.
G. Contourner les restrictions avec un proxy
Grâce à un proxy, on va pouvoir contourner les restrictions, que ce soit les restrictions géographiques ou les restrictions appliquées au sein d'un réseau local de votre entreprise (par un pare-feu, par exemple).
Prenons un exemple, vous avez besoin d'accéder au site "domaine.xyz" mais vous ne pouvez pas, car le pare-feu en sortie de votre réseau bloque l'accès à ce site. Comme le montre le schéma ci-dessous, la requête est bloquée par le pare-feu.
Pour contourner cette restriction, vous pouvez vous appuyer sur un proxy externe situé sur Internet. De cette façon, votre PC va demander au proxy d'accéder au site "domaine.xyz" et le proxy va vous retourner le résultat. La requête n'est pas bloquée, car vous contactez le proxy et non pas le site en direct. On obtient le schéma suivant :
Attention, je dis que la requête n'est pas bloquée par le pare-feu si l'on passe par un proxy, mais cela dépend de la configuration du pare-feu, et éventuellement du proxy :
- Si le pare-feu effectue du filtrage DNS ou de site Web, il y a de fortes chances qu'il bloque une liste de proxy connu pour être utilisé pour contourner les restrictions.
- Si le proxy écoute sur un port particulier comme le 3128 ou le 8080 et que le pare-feu n'autorise pas ces ports en sortie vers Internet, la connexion vers le proxy ne pourra pas aboutir.
Si vous êtes motivé, vous pouvez toujours monter votre propre proxy sur le port 80 (http) ou 443 (https) afin de l'utiliser comme rebond.
III. C'est quoi un reverse proxy ?
À l'inverse du proxy, le reverse proxy comme son nom l'indique fonctionne à l'inverse, c'est-à-dire qu'il permet aux utilisateurs externes d'accéder à une ressource du réseau interne. Lorsque vous accédez à une ressource protégée par un reverse proxy, vous contactez le reverse proxy et c'est lui qui gère la requête, c'est-à-dire qu'il va contacter le serveur cible à votre place et vous retourner la réponse. Le client n'a pas de visibilité sur le ou les serveurs cachés derrière le reverse proxy. Le reverse proxy agit comme une barrière de protection vis-à-vis des serveurs du réseau interne, et il va permettre de publier la ressource de façon sécurisée.
Un cas d'usage courant, c'est d'avoir plusieurs serveurs Web derrière un reverse proxy. Ce dernier va pouvoir répartir la charge entre les différents serveurs Web et en cas de panne d'un serveur Web, vous ne verrez pas la différence, car le reverse proxy orientera les requêtes en conséquence. Si l'on schématise une infrastructure Web qui s'appuie sur un reverse proxy intégré au pare-feu, on obtient :
Si le serveur reverse proxy est un serveur à part entière, on va venir le positionner en DMZ, et dans ce cas, les serveurs Web peuvent être connectés au réseau local. Les flux provenant de l'extérieur, c'est-à-dire des postes clients qui veulent se connecter au site Web, continuent d'arriver sur le reverse proxy qui sert d'intermédiaire.
Comme dans le cas d'un proxy, le reverse proxy va pouvoir mettre en cache certaines ressources afin de soulager les serveurs Web, mais aussi pour améliorer les performances du site grâce à la compression des données. Par exemple, le reverse proxy va pouvoir mettre en cache des ressources statiques comme les scripts JavaScript.
Si l'on fait un parallèle avec le casino et les jeux de table, on peut dire que le croupier (le reverse proxy) distribue les cartes (les connexions) aux joueurs (aux serveurs) autour de la table (du réseau local) qui participent à la partie. Merci Geoffrey pour cette idée d'analogie. 😉
A. L'en-tête HTTP et le champ "X-Forwarded-For"
Le proxy peut configurer l'en-tête "X-Forwarded-For" pour ajouter à l'en-tête des requêtes HTTP l'adresse IP du client d'origine. De cette façon, le serveur qui reçoit la requête du reverse proxy pourra tracer le client d'origine malgré tout puisque le reverse proxy lui communique l'information.
Cette notion est importante d'un point de vue de la sécurité, notamment si elle est gérée sur le serveur Web directement : on pourra bloquer uniquement ce client s'il effectue une attaque brute force sur notre serveur Web, plutôt que de bloquer le reverse proxy, ce qui serait forcément problématique.
B. Quels logiciels pour mettre en place un reverse proxy ?
Pour mettre en œuvre un reverse proxy, il existe plusieurs solutions open source très connues, comme Apache et son module mod_proxy, mais aussi Nginx. Pour rappel, Apache et Nginx sont également très utilisés en tant que serveur Web. Le serveur Web de chez Microsoft, inclus à Windows et nommé IIS dispose aussi d'un module lui permettant de jouer le rôle de reverse proxy. Il existe également le logiciel HAProxy qui est aussi gratuit et open source.
Sans oublier Squid, que l'on peut utiliser comme proxy puisque je l'ai déjà cité précédemment, mais aussi en tant que reverse proxy Squid. Si vous installez un pare-feu PfSense, vous pouvez lui ajouter la fonction de reverse proxy grâce au paquet Squid.
Merci Florian !
Encore un bel article très complet. Merci !
Bonjour merci beaucoup pour toute ses explications, j’avais juste une question par rapport au premier schéma :
Est-il possible de positionner un pfsense physique en dmz uniquement comme simple serveur proxy squid et squidguard et mettre en place au millieu un stormshield qui fera office de pare-feu et fera le lien entre la dmz et le lan ??
C’est tout à fait possible, j’ai fait ça avec un Stormshield physique + PFSense virtualisé avec module HAProxy.
Mais il faut penser à décocher « Block private networks and loopback adresses » dans la configuration PFSense puisqu’il n’est pas directement connecté à internet mais via le Stormshield, et a donc besoin d’être joint par une IP privée généralement (à moins d’utiliser le Stormshield en mode transparent).
Merci beacoup Mr Burnel, vos articles sont toujours autant utiles pour moi.