Pfsense reverse proxy HTTPS

Pfsense reverse proxy HTTPS

Dans cet article, nous allons voir comment mettre en place une architecture reverse proxy sur Pfsense avec un niveau de sécurité plus important en configurant le HTTPS. 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 de manière sécurisée.

 



Dans mon précédent article, nous avions mis en place une architecture reverse proxy basique pour rediriger des sites Internet en utilisant le protocole de base HTTP. Nous allons dans ce nouveau tutoriel réaliser la même architecture en ajoutant la gestion de certificats et donc la mise en place de sites web en HTTPS qui est le standard sur la toile.

Pour que ce soit plus clair, voici le type d’architecture que nous allons mettre en place dans ce tutoriel :

 

Comme dans mon précédent article, 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 (https://monsite1.com et https://monsite2.com) 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 5 points en place :

  1. Deux noms de domaine et/ou sous domaine qui redirigent 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.
  4. L’extension Squid installé sur votre PFsense (allez voir le chapitre « Installation de Squid » de mon précédent article en cliquant ici, pour voir comment l’installer)
  5. Prérequis réalisé pour permettre l’utilisation du port 443 (allez voir le chapitre « Prérequis » de mon précédent article en cliquant ici, pour l’effectuer)

 

 

Configuration du reverse proxy Squid

 

Dans le menu « Services » de PFsense, cliquez sur : « 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 :

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 443.
  5. Peer Protocol : Soit HTTP, soit HTTPS. Cette fois nous utiliserons HTTPS.
  6. 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 :

  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.
  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 « https://monsite1.com », la requête sera redirigée vers le serveur web « monsite1.com ».

reverse_proxy_https_4

 

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 à activer notre reverse proxy et à configurer le firewall pour qu’il accepte les requêtes venant de l’extérieur sur le port 443. 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 443 comme ceci :

reverse_proxy_https_6

 

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

reverse_proxy_https_7

 

 

Configurations supplémentaires HTTPS

 

Pour que le HTTPS fonctionne, il va falloir faire quelques configurations supplémentaires. Nous allons mettre en place des certificats pour que les données soit bien sécurisées. Pour ce faire, allez dans le menu « System » puis « Cert. Manager » :

reverse_proxy_https_8

 

Nous commencerons dans l’onglet « CAs » afin de créer une autorité de certification, dans cet onglet cliquez sur « Add » :

reverse_proxy_https_9

 

De nombreuses informations sont à renseigner, voici la liste :

  1. Descriptive name : Donnez un nom à votre autorité de certification.
  2. Method : Choisissez dans la liste « Create an internal Certificate Authority » pour créer une autorité de certification interne.
  3. Key lenght (bits) : Vous pouvez laisser par défaut 2048.
  4. Digest Algorithm : Je choisis « sha256 » mais vous pouvez utiliser un chiffrement plus important si nécessaire, je vous déconseille sha1 qui n’est vraiment plus sécurisé.
  5. Lifetime (days) : Le nombre de jour où votre autorité sera valide, je laisse par défaut « 3650 ».
  6. Country Code : « FR » pour France.
  7. State or Province : Renseignez votre région, pour moi c’est la « Lorraine ».
  8. City : Votre ville, je choisis « Nancy ».
  9. Organization : Le nom de votre société/site web.
  10. Organizational Unit : Pas nécessaire de remplir ce champ.
  11. Email Address : Votre email.
  12. Common Name : Laissez par défaut « internal-ca ».

Une fois tous les champs remplis, vous pouvez cliquer sur « Save » :

reverse_proxy_https_10

 

Vous pouvez voir votre autorité de certification fraichement créée :

reverse_proxy_https_11

 

Ensuite pour que notre reverse proxy fonctionne en HTTPS, il faut créer un certificat. Allez dans l’onglet « Certificates » et cliquez sur « Add/Sign » :

reverse_proxy_https_12

 

De nombreuses informations sont à renseigner, voici la liste :

  1. Method : Nous voulons créer un certificat interne pour notre Pfsense. Choisissez « Create an internal Certificate ».
  2. Descriptive name : Donnez un nom à votre certificat.
  3. Certificate authority : Pour que votre certificat soit valide, il lui faut une autorité de certification. Dans la liste, vous devriez trouver l’autorité de certification que vous avez créée précédemment.
  4. Key length : Je laisse encore par défaut sur 2048.
  5. Digest Algorithm : Prenez le même chiffrement que dans votre autorité de certification (sha256).
  6. Lifetime (days) : Le nombre de jour où votre certificat sera valide, je laisse par défaut « 3650 ».
  7. Country Code : « FR » pour France.
  8. State or Province : Renseignez votre région, pour moi c’est la « Lorraine ».
  9. City : Votre ville, je choisis « Nancy ».
  10. Organization : Le nom de votre société/site web.
  11. Organizational Unit : Pas nécessaire de remplir ce champ.
  12. Email Address : Votre email.
  13. Common Name : Donnez un nom à votre certificat.
  14. Certificate type : Choisissez « User Certificate ».

Pour finir et créer votre certificat, cliquez sur « Save » :

reverse_proxy_https_13

 

Vous verrez apparaitre dans la liste votre certificat avec la date de fin de validité :

reverse_proxy_https_14

 

Pour finir l’installation de notre reverse proxy avec le HTTPS, nous devons l’activer dans le menu « Services » puis « Squid Reverse Proxy » :

reverse_proxy7.1

Dans la page qui s’affiche, descendez jusque « Squid Reverse HTTPS Settings » et renseignez ces 4 points :

  1. Enable HTTPS Reverse Proxy : Cochez cette case pour l’activer.
  2. Reverse HTTPS Port : Le port par défaut est 443.
  3. Reverse SSL Certificate : Choisissez dans la liste le certificat que vous venez de créer.
  4. Ignore Internal Certificate Validation : Cochez cette case, sinon les certificats de vos serveurs ne seront pas pris en compte.

Laissez tous les autres champs par défaut :

reverse_proxy_https_15

 

attention    Si vous n’avez pas suivi mon précédent article sur le reverse proxy HTTP, n’oubliez pas, pour que le reverse proxy Squid de Pfsense soit actif, il faut aussi démarrer le proxy Squid en allant dans le menu « Services » puis « Squid Proxy Server » :

reverse_proxy23

 

Enfin pour activer le proxy et démarrer par la même occasion votre reverse proxy, cochez « Enable Squid Proxy » :

reverse_proxy24

 

 

 

 

 

 

 

 

Et voilà, vous avez maintenant un reverse proxy utilisant la protection HTTPS pour vos serveurs web.

À 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.