Dans cet article, nous allons voir comment mettre en place une architecture reverse proxy sur Pfsense. L’objectif est de nous permettre d’avoir une seule IP publique derrière laquelle différents noms de domaine vont pointer donnant ainsi accès à différents sites web.
Pour commencer, définissons reverse proxy, ce dernier sert de relais pour des utilisateurs externes à votre réseau vers vos services internes. Le service interne est alors retourné aux utilisateurs comme provenant du reverse proxy.
Pour que ce soit plus clair, voici le type d’architecture que nous allons mettre en place dans ce tutoriel :
J’ai un serveur physique chez OVH (mais peu importe votre hébergeur) contenant un serveur ESXi (outil de virtualisation). Sur ce serveur, j’ai installé une machine virtuelle sous PFsense reliée à une IP de failover qui sera l’IP publique à travers laquelle nos deux noms de domaine (monsite1.fr et monsite2.fr) vont pointer. Derrière notre PFsense, nous avons donc deux machines virtuelles hébergeant chacune un serveur web différent.
Le serveur PFsense va agir comme un reverse proxy en envoyant les requêtes sur un serveur ou sur l’autre, en fonction du nom de domaine appelé. Si vous souhaitez commencer par mettre en place l’architecture sous ESXi, je vous invite à aller revoir la suite d’article que j’avais effectuée sur l’installation d’une architecture ESXi. Vous y trouverez comment installer et configurer ESXi, PFsense et vos serveurs web.
Je pars du principe dans ce tutoriel que vous avez déjà ces 3 points en place :
- Deux noms de domaine et/ou sous domaine qui redirige les requêtes vers l’IP publique de votre PFsense
- Un serveur PFsense installé ayant une IP publique
- Deux serveurs web connectés à votre PFsense.
PFsense est un firewall et n’a pas de fonctionnalité de reverse proxy de base, il va falloir commencer par installer une extension. Nous utiliserons l’extension Squid qui est un proxy.
.
Installation de Squid
Connectez-vous à l’interface web de PFsense et allez dans le menu « System » puis « Package Manager » :
Ensuite, il faut allez chercher le nouveau plugin dans les paquets disponibles en cliquant sur « Available Packages » :
Quand vous êtes sur ce nouvel onglet, entrez « squid » dans le champ recherche pour trouver le paquet squid qu’il nous faut installer. Puis cliquez sur « Install » comme ci-dessous :
Confirmez l’installation :
L’installation se lance, vous pouvez suivre l’avancée de celle-ci:
L’installation est terminée, rien de très compliqué jusqu’ici :
Nous allons passer à la configuration de notre reverse proxy, pour ce faire nous devons tout d’abord changer un paramètre sur notre serveur PFsense.
Prérequis
Avant de pouvoir configurer les redirections vers vos différents sites web, nous allons devoir mettre en place un nouveau paramètre afin de permettre l’utilisation du port 80 dans notre reverse proxy. Pour cela, allez dans le menu « System » puis « Advanced » :
Ensuite, allez dans l’onglet « System Tunables » et cliquez sur « + New » :
Créez un « tunable » et nommez le « net.inet.ip.portrange.reservedhigh » avec une valeur de 0 comme ci-dessous et cliquez sur « Save » :
Pour finir, appliquez le changement en cliquant sur « Apply Changes » en haut de votre interface :
Et voilà nous sommes prêt à configurer notre reverse proxy en ajoutant nos différents sites Internet.
Configuration du reverse proxy squid
Dans le menu « Services » de PFsense, deux nouvelles catégories sont apparues : « Squid Proxy Server » et « Squid Reverse Proxy ». Nous commencerons par aller dans « Squid Reverse Proxy » :
Vous arriverez sur la configuration de votre reverse proxy, allez directement dans l’onglet « Web Servers » pour configurer vos serveurs web qui devront être accessibles sur votre IP publique. Dans ce tutoriel je vais ajouter 2 sites Internet mais vous pouvez en ajouter autant que vous le souhaitez. Cliquez sur « Add » pour ajouter votre premier site :
Dans la fenêtre qui est apparue, nous allons configurer notre premier serveur web. Dans l’ordre, voici les informations que vous devez remplir :
- Enable This Peer : Cochez cette case pour que ce serveur web soit actif.
- Peer Alias : Mettez le nom que vous souhaitez, c’est juste pour identifier le serveur. Pour ma part je mets le nom de domaine afin d’identifier plus facilement ce dernier.
- Peer IP : C’est l’IP de votre serveur web en local, où est hébergé votre site web (ce sera la plupart du temps une IP privée).
- Peer Port : Ici, indiquez le port sur lequel votre serveur va écouter, mettons 80.
- Peer Protocol : Soit HTTP, soit HTTPS. Dans ce tutoriel nous utiliserons HTTP, car la mise en place de HTTPS nécessite des réglages complémentaires que nous verrons dans un prochain tutoriel.
- Peer Description : Dans ce champ, vous avez la possibilité de mettre une description mais rien d’obligatoire.
Faites de même pour votre deuxième site web en changeant les paramètres comme ceci :
Répétez l’opération précédente autant de fois que le nombre de vos serveurs web. Vous avez maintenant vos sites web configurés :
Maintenant que nous avons créé nos sites web, nous devons configurer la redirection. Allez dans l’onglet « Mappings » et cliquez sur « Add » :
Vous devrez avoir autant de mapping que de nom de domaine à rediriger. Voici comment les configurer :
- Enable This URI : Comme précédemment il faut cocher cette case pour activer cette redirection.
- Group Name : Donner le nom que vous voulez, à titre informatif.
- Group Description : Vous pouvez ajouter une description si vous le souhaitez mais cela n’a pas d’influence sur le fonctionnement.
- Peers : C’est ici que nous lions les sites web que nous avons créés précédemment, attention à ne pas vous tromper (d’où l’importance de nommer intelligemment vos sites web dans l’étape précédente).
- URI : C’est le nom de domaine derrière lequel la redirection sera effectuée. Lorsque le reverse proxy recevra une requête pour « http://monsite1.com », il l’enverra vers le serveur web « monsite1.com ».
Faites la même chose pour vos autres site web. Ci-dessous, un autre exemple pour « monsite2.com » :
Nous avons configuré les redirections de nos sites web vers nos différents serveurs web internes. Il nous reste encore à démarrer notre reverse proxy et à configurer le firewall pour qu’il accepte les requêtes venant de l’extérieur sur le port 80. Commençons par ajouter une règle sur le firewall, allez dans le menu « Firewall » puis « Rules » et cliquez sur « Add »:
Nous voulons autoriser (Action: Pass) sur l’interface « WAN » les requêtes IPv4 venant de n’importe quelle IP vers le port 80 comme ceci :
Sauvegardez cette règle et appliquez le paramètre. Vous devriez avoir une nouvelle règle comme ceci dans votre liste :
Lancement du reverse proxy Squid
Maintenant que nous avons autorisé les requêtes HTTP sur notre PFsense, il faut activer le reverse proxy. Commençons par démarrer le service « squid » en allant dans le menu « Services » puis « Squid Proxy Server » :
Cochez « Enable Squid Proxy », cliquez sur « Save » et enfin appliquez les changements :
Pour finir, allez dans le menu « Services » puis « Squid Reverse Proxy » :
Dans l’onglet « General », activez le module HTTP Reverse Proxy et assignez lui le port 80 comme ci-dessous :
Vos deux sites web sont maintenant accessibles via une même adresse IP publique et votre PFsense fait office de reverse proxy via le module Squid. Nous verrons dans un prochain tutoriel comment réaliser cette même configuration mais en utilisant le port 443 soit HTTPS.
bonjour comment realiser le test de bon fonctionnement depuis internet.
j’ai suivi a la lettre ce tuto mais je n’arrive pas a afficher de page web.
Bonjour; merci pour ce tutoriel assez pédagogique;
j’ai un petit probléme et je sais pas si tu peux m’aider ; en effet lorsque je renseigne l’url de mon site situé derriere le pfsense, comment es ce que l’interface wan sur laquelle la requette arrive est sensée savoir la rediriger vers l’interface lan (reseau ou se trouve mon serveur ) sans passer par la gateway present au niveau de l’interface wan.
bonjour comment realiser le test de bon fonctionnement depuis internet.
Bonjour,
Pour tester le bon fonctionnement de votre reverse proxy, essayez simplement de vous connecter depuis votre adresse IP publique en utilisant soit « https » soit « http » en fonction de ce que vous avez configuré 🙂
Par exemple : https://8.8.8.8