PfSense


VPN (remote access) Wireguard sur Pfsense

Installation

Rendez vous sur votre page web pfsense, dans l'onglet système pour accéder au package manager.

Screenshot 2025-01-05 at 5.21.55 PM.png

Sur l'onglet Available Packages, attendez le chargement et rechercher le packet wireguard pour l'installer.

Screenshot 2025-01-05 at 5.22.33 PM.png

Cliquer et confirmer pour installer le paquet. L'installation peut prendre quelques minutes.

Screenshot 2025-01-05 at 5.28.40 PM.png

Configuration

Une fois l'installation terminée, sur l'onglet VPN vous trouverez wireguard.

Screenshot 2025-01-05 at 5.29.35 PM.png

Cliquer sur add tunnel. Mettez le port d'écoute que souhaitez, sinon il utilise celui par défaut (51820).

Appuyer sur Generate pour générer un couple de clé. Copiez la clé publique et converser là.

Laissez le reste par défaut et assigner une adresse ip pour votre réseau vpn avec un masque 255.255.255.0 ( /24 )

Cette adresse doit être la première du réseau, par exemple 192.168.63.1/24.

Enregistrez vos paramètres.

Retournez sur l'onglet Wireguard, dans l'onglet setting, cliquez sur enable pour activer le service. Vous pouvez laissez les autres paramètres par défaut ou les changer selon vos attentes.

Screenshot 2025-01-05 at 5.40.07 PM.png

Cliquez sur Save, ensuite cliquez sur apply changes.

Rendez vous sur l'onglet peer pour rajouter un utilisateur. Mais à l'avance ouvre votre application wireguard sur votre pc et cliquer sur ajouter un utilisateur, l'application va vous générer une paire de clé, copier la clé publique.

Sur l'onglet "peer" sur pfsense, sur la partie tunnel sélectionner le tunnel créer juste avant. Laissez cocher la partie dynamique endpoint, on mettra le endpoint sur la configuration wireguard au niveau de votre PC en local.

Vous pouvez choisir de mettre le endpoint sur la config pfsense selon vos spécificités. 

Mettez une valeur sur la partie "keep alive" 300 par exemple ou laisser la par défaut. Coller la clé publique créer par l'application wireguard de l'utilisateur créer sur votre PC sur la partie public key.

Vous pouvez configurer une pre-shared key si voulue (ce tuto ne contient pas de pre-shared key dans la configuration).

Au niveau de allowed ip, mettez l'adresse ip de votre peer avec /32, par exemple 192.168.63.2/31. Enregistrez vos paramètres et cliquez sur apply changes.

Sur le fichier wireguard sur votre PC mettez votre configuration, par exemple :

[Interface]

PrivateKey = clé privé (générer par défaut par l'application wireguard)

Address = 192.168.63.2/24

DNS = 8.8.8.8, 8.8.4.4

MTU = 1420


[Peer]

PublicKey = clé publique du tunnel wireguard pfsense

AllowedIPs = 192.168.63.0/24, 192.168.2.0/24

Endpoint = 10.10.10.10:51820

La clé privé est automatiquement généré par l'application. Sur la partie Address mettez l'adresse de votre peer en /24.

Pour le DNS mettez ceux de google. Le MTU peut être modifié selon vos attentes.

Au niveau de public key, rendez vous sur l'onglet tunnel et copier la clé publique et placez là sur la partie PublicKey.

Au niveau AllowedIPs mettez l'adresse réseau du réseau VPN et idéalement l'adresse réseau du LAN pfsense.

Sur la partie Endpoint, mettez l'ip public de votre box internet suivi du même port que vous saisi sur le tunnel VPN wireguard lors de la configuration si vous l'avez changé.

Sur la partie firewall sur pfsense, vous trouverez un onglet WireGuard automatiquement créer, acceptez le trafic entrant et sortant sur n'importe quelle port,

Attention, si vous n'accepter que le traffic UDP les communications ne fonctionneront pas.

La règle ressemblera à ça :

Screenshot 2025-01-05 at 8.18.00 PM.png

Sur la partie WAN, mettez une règle acceptant le traffic entrant vers le WAN en UDP sur le port 51820 (changez le port si vous l'avez changer lors de la création du tunnel).

Ne pas oublier que le port doit être le même sur le tunnel, sur la config VPN du peer (pfsense comme fichier application wireguard, et également le même sur les règles de firewall).

La règle du WAN ressemble à ça.

Screenshot 2025-01-05 at 6.24.42 PM.png

Si Pfsense n'est pas votre routeur principale (s'il se trouve derrière une box internet active) ne pas oublier la redirection de port vers votre box à l'adresse WAN pfsense en UDP sur le port du tunnel. Ajouter aussi une règle qui laisse passer le trafic si le firewall de votre box est activé.

Redirection de port

La redirection de port sur pfsense est assez pointue, il faut bien savoir à l'avance ce qu'on veut faire

On va prendre l'example ici d'un serveur web qui tourne sur le LAN. Nous allons faire une redirection de port de l'extérieur pour accéder au serveur web.

Connectez vous sur votre pfsense et rendez vous sur l'onglet firewall puis NAT

Screenshot 2025-02-16 at 5.46.17 PM.png

Cliquez sur ajouter pour rajouter une nouvelle règle, par défaut voici ce que vous avez, mais vous pouvez cliquer sur afficher les paramètres avancés en bleu pour avoir plus d'options

Screenshot 2025-02-16 at 5.47.24 PM.png

CAS 1 : PfSense étant votre routeur principale

       Le serveur web apache étant configuré pour accepter et diffuser des connexions TCP nous allons choisir comme protocole TCP.

Screenshot 2025-02-16 at 5.55.35 PM.png

CAS 2 : si PfSense est placé derrière votre routeur principal

Dans ce cas là, les paramètre resteront exactement les mêmes, mais il faudra faire en amont une redirection de port de votre routeur principale vers l'adresse WAN du pfsense, et accepter le trafic entrant l'extérieur sur le port que vous voulez rediriger au niveau du firewall du routeur principal.

Enregistrez maintenant votre règle qui apparaître juste après. Faites apply changes pour appliquer les changements

Screenshot 2025-02-16 at 6.09.32 PM.png

Si votre version de PfSense est récente, la règle de parefeu liée à la redirection de port sera automatiquement crée et vous n'aurez rien à rajouter, sinon il faudra cocher l'option lors de la création de la redirection pour créer la règle ou bien la rajouter vous même

Dans le cas ou ce n'est pas un serveur web, et que vous devez utiliser une redirection avec des ip publiques sources bien précises, vous pouvez rajouter sur la partie "aliases" vos adresses ip, ensuite sur le firewall autoriser le traffic pour toutes ces ip en même temps grâce à l'aliase

La règle apparaîtra avec le label "NAT"

Screenshot 2025-02-16 at 6.16.03 PM.png

SI vous souhaitez faire une redirection dont l'ip source de la requête est une ip privée, comme par exemple en local accéder à l'interface pfsense via son adresse WAN ce qui vous fera faire une redirection de l'adresse WAN vers l'adresse LAN du pfsense, n'oubliez pas de désactivé cette option ci-dessous, parce que par défaut si vous ne l'avez pas désactivé lors de l'installation de pfsense le parefeu bloquera tout le traffic provenant d'adresse privé qui sont les suivantes :

10.0.0.0 ~10.255.255.255

172.16.0.0 ~ 172.31.255.255

192.168.0.0 ~ 192.168.255.255

Allez sur le dashboard et sur l'onglet interfaces cliquer sur WAN

Screenshot 2025-02-16 at 6.26.17 PM.png

Et tout en bas désactivez l'option "Block private networks and loopback addresses

Screenshot 2025-02-16 at 6.26.32 PM.png

Let's Encrypt wildcard certificate avec ACME

Lorsque vous hébergez un ou plusieurs site web sur votre réseau, il est possible de faire la gestion de certificat beaucoup plus facilement avec let's ecrypt grâce au paquet ACME de pfsense.

Vous n'aurez alors plus besoin de faire des demandes de certificat directement sur la machine.

Prérequis

Installation

Rendez vous sur le Pacakage Manager de pfsense.

Sur les paquets disponibles, rechercher acme et installez le.

Une fois installé le paquet acme sera disponible sur Services

Une fois dessus, allez sur l'onglet Accounts keys et cliquez sur Add en bas à droite.

La différence c'est que Staging nous permettra de faire la demande de certificats plusieurs fois en cas d'erreur, alors que celui de production ne permet pas plusieurs demande, on basculera sur la Prod uniquement quand notre test sera ok.

Remplissez les paramètres comme ceci :

Screenshot 2025-07-08 at 7.26.51 PM.png

Maintenant on va refaire exactement la même étape, mais cette fois pour le certificat de production, comme ci dessous.

Screenshot 2025-07-08 at 7.35.07 PM.png

Maintenant allez sur l'onglet Certificates et faites add

Nommez le wilcard-domain.com en remplaçant domain par votre nom de domaine.

Pour le acme account choisissez le staging. Laissez le reste par défaut à moins que vous souhaitez l'ajuster selon vos besoins.

Pour la partie Domain SAN list, nous allons utiliser une clé api

Il y'a énormement de choix au niveau de la partie Method, vous devez sélectionner celui de votre fournisseur de domaine et vous renseigner sur la création d'une clé api.

Ensuite faites add, et refaite exactement la même configuration, mais cette fois ci au niveau du Domainname mettez *votre_domaine.com. Par exemple si votre nom de domaine c'est otaku.com vous écrirez *otaku.com

Pour le reste vous pourrez le laissez par défaut et ajuster selon vos besoins.

Voici un exemple de configuration à mettre

Ensuite cliquer sur le bouton Issue/Renew

L'opération peut prendre jusqu'à 2 minutes minimum, patientez.

S'il n'y a aucune erreur vous aurez un message de confirmation tout en vert comme ceci :

Après avoir eu la confirmation, modifié la configuration et changez le Acme Account pour Prod au lieu de Staging.

Et cliquer sur Issue/Renew encore une fois.

Après la validation, vous pourrez vous rendre sur System -> Certificate Manager -> Certificates et voir que le certificat à bien été configuré.

Reverse proxy avec HA proxy

C'est quoi un reverse proxy ?

À l'inverse d'un le reverse proxy se place entre les flux qui sont sur internet et le serveur.

Imaginons un réseau hébergeant un site web accéssible sur internet grâce à une redirection de port. Ce site est protégé par un certificat SSL, il utilise donc le port 443 en https.

Si nous souhaitons rendre accéssible un deuxième site web en https du même réseau, il nous est impossible de faire deux redirections pour le même port. Nous allons voir qu'avec un reverse proxy c'est tout à fait possible.

Pré-requis

Aller dans le gestionnaire de pacquet pfsense et installer le pacquet HAproxy : Screenshot 2025-09-11 at 3.55.47 PM.pngScreenshot 2025-09-11 at 3.56.31 PM.png

Une fois le paquet installé, vous le trouverez sur la partie Services

Rendez vous sur le paquet HAproxy, et sur la partie backend et cliquer sur ajouter Screenshot 2025-09-11 at 4.01.27 PM.png

Le backend sera le service sur lequel on souhetera redirigé notre traffic

Pour la première partie remplissez là comme ceci

Nous allons appeler notre backend beta-backend modifier le nom à votre convenance. Au niveau de la section Server list rajoutez une règle, avec le même nom que le backend et le site (il est mieux d'uniformiser les noms pour ne pas se perdre, dans ce tuto nous faisons comme si le site web était beta.mondomaine.com)

Au niveau de Forwardto choisissez Adress+Port, placez y l'adresse ip de la machine hébergeant le site et le port, et cocher le Encrypt(SSL).

On va maintenant aller sur la partie Frontend et en créer un nouveau.

Appelez le http-frontend et remplissez le exatement comme ci dessous:

Ensuite au niveau des ACL rajouter une nouvelle règle s'appellant beta, au niveau des expressions mettez Host matcheset sur value placez l'url exact de votre site. Screenshot 2025-09-11 at 4.17.08 PM.png

Maintenant on va faire matcher notre backend qu'on a créer avec notre ACL.
Rajouter une action et sur use backend choisissez le beta-backend qu'on a crée et sur condition acl names écrivez beta qui est le nom de l'ACL qu'on a crée juste avant.
Au niveau de Default Backend mettez none. Screenshot 2025-09-11 at 4.19.42 PM.png

Ici laissez tout comme sur l'image : Screenshot 2025-09-11 at 4.20.51 PM.png

Sur Advanced setting laissez les paramètres comme ci dessous : Screenshot 2025-09-11 at 4.21.11 PM.png

Sur la partie SSL Offloading sur Certificate choisissez votre wildcard et cochez les deux cases d'en bas comme sur l'image. Screenshot 2025-09-11 at 4.33.17 PM.png

Vous pouvez laisser tous le reste par défaut et sauvegarder.

Et là vous pourrez accéder à votre site web sans aucune difficulté via l'url.

Si vous voulez rajouter d'autre sites, il faudra juste créer de nouveau backend et garder le même frontend en rajoutant juste de nouvelles règles au niveau de l'access control list et faisant matcher des actions et ces nouvelles règles.