Pfsense reverse proxy HTTP

Pfsense reverse proxy HTTP

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 :

reverse_proxy0

 

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 :

  1. Deux noms de domaine et/ou sous domaine qui redirige les requêtes vers l’IP publique de votre PFsense
  2. Un serveur PFsense installé ayant une IP publique
  3. 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 » :

reverse_proxy1.1

 

Ensuite, il faut allez chercher le nouveau plugin dans les paquets disponibles en cliquant sur « Available Packages » :

reverse_proxy2.2

 

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 :

reverse_proxy3.1

 

Confirmez l’installation :

reverse_proxy4.1

 

L’installation se lance, vous pouvez suivre l’avancée de celle-ci:

reverse_proxy5

 

L’installation est terminée, rien de très compliqué jusqu’ici :

reverse_proxy6

 

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 » :

reverse_proxy16

 

Ensuite, allez dans l’onglet « System Tunables » et cliquez sur « + New » :

reverse_proxy17-e1537107674411

 

Créez un « tunable » et nommez le « net.inet.ip.portrange.reservedhigh » avec une valeur de 0 comme ci-dessous et cliquez sur « Save » :

reverse_proxy18

 

Pour finir, appliquez le changement en cliquant sur « Apply Changes » en haut de votre interface :

reverse_proxy19

 

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 » :

reverse_proxy7.1

 

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 :

reverse_proxy8.1

 

Dans la fenêtre qui est apparue, nous allons configurer notre premier serveur web. Dans l’ordre, voici les informations que vous devez remplir :

  1. Enable This Peer : Cochez cette case pour que ce serveur web soit actif.
  2. 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.
  3. 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).
  4. Peer Port : Ici, indiquez le port sur lequel votre serveur va écouter, mettons 80.
  5. 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.
  6. Peer Description : Dans ce champ, vous avez la possibilité de mettre une description mais rien d’obligatoire.

reverse_proxy9.1

 

Faites de même pour votre deuxième site web en changeant les paramètres comme ceci :

reverse_proxy10.1

 

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 :

reverse_proxy11.1

 

Maintenant que nous avons créé nos sites web, nous devons configurer la redirection. Allez dans l’onglet « Mappings » et cliquez sur « Add » :

reverse_proxy12.1

 

Vous devrez avoir autant de mapping que de nom de domaine à rediriger. Voici comment les configurer :

  1. Enable This URI : Comme précédemment il faut cocher cette case pour activer cette redirection.
  2. Group Name : Donner le nom que vous voulez, à titre informatif.
  3. Group Description : Vous pouvez ajouter une description si vous le souhaitez mais cela n’a pas d’influence sur le fonctionnement.
  4. 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).
  5. 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 ».

reverse_proxy13.2

 

Faites la même chose pour vos autres site web. Ci-dessous, un autre exemple pour « monsite2.com » :

reverse_proxy14.1-1

 

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 »:

reverse_proxy20

 

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 :

reverse_proxy21

 

Sauvegardez cette règle et appliquez le paramètre. Vous devriez avoir une nouvelle règle comme ceci dans votre liste :

reverse_proxy22

 

 

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 » :

reverse_proxy23

 

Cochez « Enable Squid Proxy », cliquez sur « Save » et enfin appliquez les changements :

reverse_proxy24

 

Pour finir, allez dans le menu « Services » puis « Squid Reverse Proxy » :

reverse_proxy7.1

 

Dans l’onglet « General », activez le module HTTP Reverse Proxy et assignez lui le port 80 comme ci-dessous :

reverse_proxy25

 

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.

 

À propos de l’auteur

Vincent Krahenbuhl administrator

Passionné d’informatique, ma motivation et ma curiosité m’ont permis de réaliser des études en alternance, tout d’abord en tant que technicien informatique au sein du groupe Edscha puis administrateur réseau au sein de FM Logistic. Fort de ces expériences dans deux entreprises internationales, j’exerce aujourd’hui le rôle d’ingénieur réseau et sécurité chez FM Logistic.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.