pfSense est une solution de firewall basée sur FreeBSD, open-source et mondialement reconnue pour son efficacité. Il est possible d'installer pfSense sur une plateforme matérielle directement, ou bien en mode virtualisé, sur un hyperviseur de type Proxmox, Virtualbox, voire Hyper-V. En tous les cas, s'il vous est demandé de définir le type d'OS, choisissez bien BSD FreeBSD (64 bits).
Les prérequis de pfSense sont relativement légers, avec 1 Go de RAM et un CPU à 1 GHz. Si vous souhaitez lui adjoindre d'autres services, prévoyez tout de même plus de CPU et de RAM (notamment pour les VPN et les filtrages IDS). Comme c'est un routeur en plus de faire firewall, prévoyez au moins 3 cartes réseau afin de disposer de liens WAN, LAN et DMZ. En ce qui concerne l'espace disque, 40 Go sont largement suffisants pour la quasi totalité des services que vous serez amené à installer ultérieurement sur le pfSense.
Lors du premier accès pour la configuration via un navigateur situé du côté du LAN (pfSense n'autorise pas par défaut la connexion par la partie WAN), les credentials sont admin / pfsense. Durant les différentes étapes de l'assistant d'installation vous serez amené à :
A la fin du setup vous obtenez un firewall qui autorisera le LAN à accéder à l'Internet.
Le routeur est capable de jouer le rôle de serveur DHCP sur une ou plusieurs cartes réseau. Pour les réseaux Windows disposant d'un contrôleur de domaine, vous avez généralement plutôt intérêt à utiliser le service DHCP de Windows car il dispose de beaucoup plus d'éléments de configuration que pfSense. Mais en cas de besoin, ce service peut apporter une aide substantielle.
Pour cela, rendez-vous sur Services > DHCP Server
Cliquez sur la case Enable DHCP server on LAN interface pour activer le service DHCP.
Définissez ensuite le pool d'adresses qui sera mis en place pour les postes faisant la demande d'IP.
Le service DHCP doit fournir des serveurs DNS en référence aux postes concernés afin de permettre aux ordinateurs de faire de la résolution
d'adresses et potentiellement surfer sur le net convenablement.
Les dernières options à considérer sont la gateway et le lease time
Il existe d'autres options avancées, notamment la possibilité de gérer les autorisations de demande d'IP selon des listes d'autorisation
ou d'exclusion par MAC Addresses. Il est également possible de définir le comportement de la gestion du PXE Boot sous la section
Network booting.
En fin de configuration, n'oubliez-pas de sauvegarder la configuration en appuyant sur Save
Il y a deux possibilités pour réaliser la réservation d'adresses dans un pool DHCP, par exemple pour une imprimante en mode DHCP mais
pour laquelle vous souhaitez qu'elle possède toujours la même adresse (le plus simple est de lui donner une IP statique mais bon...).
Il vous faut appuyer sur le bouton Add Static Mapping situé au fond de la page de configuration du service DHCP.
A ce moment-là, tout comme vous l'avez déjà fait pour le DHCP principal, vous pouvez ajouter une correspondance statique entre
une adresse MAC et une adresse IP.
Et si vous en avez plusieurs à faire, et que les IP sont déjà affectées aux équipements que vous voulez manipuler, il suffit
de se rendre dans le menu Status > DHCP Leases e, sur chaque ligne requise, appuyer sur le bouton Add Static Mapping (un petit
pictogramme '+' en fin de ligne) pour obtenir cette même page préremplie. Lors de l'affectation statique, n'oubliez pas qu'il faudra
probablement forcer votre carte réseau à se déconnecter/reconnecter afin qu'elle puisse prendre cette nouvelle IP.
En fonction de votre configuration, les services DNS de pfsense sont configurés dynamiquement par le lien sur lequel le port WAN est connecté. Ainsi, si votre routeur est en DHCP, votre lien WAN offert par le pfsense vous renverra les DNS de votre fournisseur d'accès Internet (FAI). Ce n'est pas forcément ce qu'il y a de mieux à faire car ces serveurs DNS peuvent ^tre lents, filtrants ou loin de votre point de raccordement.
Par défaut, la configuration du DNS resolver de pfsense se trouve dans Services > DNS Resolver > General Settings. Celui-ci est actif
par défaut, permettant aux machines du réseau d'utiliser le pfsense comme serveur DNS local si jamais il n'y a pas autre chose comme
un Active Directory Windows par exemple.
Le resolver DNS de pfsense est par défaut capable de résoudre des adresses par l'usage du protocole DNSSEC, version sécurisée du DNS
mais pas tous les serveurs. L'objectif du protocole DNSSEC est de s'assurer que les deux parties (serveur DNS local et serveur DNS récursif)
utilisent des signatures numériques à base de cryptographie à clé publique. Ce ne sont pas les requêtes qui sont signées mais
les données DNS qui sont signées par le propriétaire des données. Chaque zone DNS dispose d'une paire de clés publique/privée.
Cela permet d'authentifier l'origine des données de la réponse (le résolveur sait que la zone qui a émis la réponse est bien celle qui
est attendue); cela permet également de protéger les données et de respecter l'intégrité des données et de réduire le DNS Poisoning
avec un détournement de l'IP de la cible par remplacement avec une IP de site frauduleux. Plus d'informations ici :
https://www.icann.org/resources/pages/dnssec-what-is-it-why-important-2019-03-20-fr
Le resolver DNS est en écoute par défaut sur l'ensemble des cartes réseaux du pfsense. Il n'est pas nécessaire d'apporter de modifications à ce niveau, sauf cas particulier pour isoler des sous réseaux.
Si vous souhaitez transmettre les requêtes DNS aux serveurs DNS généraux définis dans System > General Setup sans laisser le routeur
pfsense s'occuper de tout (cache DNS, résolution récursive...), vous pouvez mettre en place le DNS Forwarder depuis la rubrique Services > DNS Forwarder.
Personnellement je n'ai jamais essayé cette solution de forwarding de DNS...
Outre la configuration du service DNS depuis le menu Services > DNS Server, vous disposez des configurations générales des DNS
depuis System > General Setup.
Si des serveurs DNS sont déclarés dans cette section, afin que le résolveur de pfsense puisse répondre aux requêtes locales, il faut revenir
dans la configuration du DNS Resolver par Services > DNS Resolver et cocher la case Enable Forward Mode.
Et si vous voulez savoir si votre résolution d'adresses est fonctionnelle rendez-vous sur Status > DNS Resolver
Vous obtiendrez des informations si vous avez déclaré votre routeur pfsense comme serveur DNS de vos postes clients, bien évidemment (pas
le cas ici...).
Juste un rappel sur les flux. Sur tout routeur il existe deux types de flux :
Après l'installation de pfSense, vous disposez par défaut de 3 règles de firewall sur la partie LAN, notamment la règle appelée
Anti-Lockout Rule, mise en place pour ne jamais perdre l'accès à l'interface du pfSense, même si des erreurs sont faites dans les
règles ajoutées. Il y a aussi la règle qui permet à tous les services du LAN d'accéder à Internet.
Comme on veut maîtriser les flux entrants et sortants, on va déjà commencer à bloquer TOUS les services du LAN qui essaient d'accéder
à l'Internet en désactivant les deux règles permissives par défaut. Il suffit d'appuyer sur l'icone en forme de stationnement interdit
au bout de chaque règle Default LAN to any rule et Default allow LAN IPv6 to any rule.
Les règles de firewall sont toujours traitées du haut vers le bas. Il est donc conseillé de toujours ajouter une règle en dernière
position en appuyant sur le bouton avec la flèche vers le bas. Nous allons commencer par nous donner accès à Internet, sachant que nous
devons laisser passer les protocoles 80/http, 443/https et 53/dns pour que nous puissions retrouver un accès à Internet. Pour cela nous ajoutons
une règle en fin de liste et nous assurons que nous traitons bien sur l'interface LAN, en IPv4 et avec le protocole TCP.
Sur la source, nous choisissons de traiter les paquets en provenance des subnets du LAN, et surtout aps de Any qui serait trop permissif
et probablement hors contrôle.
Dans la destination nous choisissons any et spécifions le port 80 utilisé par le protocole HTTP.
Dans la section Extra Options, il est conseillé de préciser une description pour la règle. Comme c'est une règle générale pour un flux
il est intéressant de catégoriser avec un marqueur du genre Général -
Une fois la configuration de la règle enregistrée elle apparaît en fin de liste sur la page présentant les règles du firewall.
.
La règle va ensuite être dupliquée car le Net ne travaille plus vraiment avec 80/http aujourd'hui mais plutôt 443/https. Il faut donc
ajouter une règle similaire pour ce protocole. Il suffit de modifier le protocole dans la destination pour HHTPS et d'enregistrer la règle.
Pour que la navigation soit fonctionnelle il faut maintenant autoriser le 53/dns à franchir le routeur. Attention, le DNS utilise le protocole
UDP pour communiquer... Une fois les trois règles actives la navigation internet peut reprendre.
Ce n'est bien évidemment pas la seule façon d'organiser ses flux. Il pourrait être plus simple de laisser les règles par défaut
et de faire un blocage explicite des services. C'est un choix qui vous incombe. En tous les cas, il peut être intéressant de consulter
les logs du firewall afin de savoir si des règles matchent des flux. Rendez-vous sur Status > System Logs > Firewall pour
obtenir la liste des derniers événements donnant l'interface, la règle impactée ainsi que la source et la destination. La vue normale
ne se rafraichit pas seule donc pressez F5 de temps en temps.
Avec un environnement supportant plusieurs LAN (comme un Guest LAN par exemple) il est envisageable de faire en sorte que les machines de ce
Guest LAN ne puissent pas faire autre chose que d'aller sur Internet. En d'autres termes, il est recommandé de bloquer l'accès au routeur
en créant une règle du genre : tu bloques tout ce qui provient du LAN concerné et qui est à destination du firewall.
Cependant, pour autoriser la navigation internet, il faudra tout de même laisser passer le DNS sur 53/udp, toujours à destination du firewall
et placer cette règle au-dessus de la précédente pour qu'elle ne soit pas bloquée.
Par défaut, le pfsense n'autorise l'accès à sa configuration web que depuis le LAN. Mais parfois il peut être intéressant de pouvoir
administrer ce routeur depuis le WAN, moyennant l'usage d'une IP publique que l'on peut filtrer. Il faut dans ce cas créer une règle
qui autorisera l'accès à ce firewall depuis un host ou un réseau bien identifié. On en profite pour autoriser le ping pour des raisons
temporaires concernant les tests de réponse de l'équipement.
Une fois connecté à l'interface du pfSense, rendez-vous sur la page d'accueil Status / Dashboard.
Vous y retrouverez les informations de version et si une mise à jour est disponible.
Si c'est le cas, cliquez sur le lien en forme de nuage pour vous retrouver sur la page du choix du type de mise à jour à apporter.
Préférez utiliser la branche Stable pour réaliser cette mise à jour. Vous pouvez également revenir à la version précédente si besoin.
Pressez ensuite le bouton Confirm.
Après quelques longues secondes d'attente, le routeur va redémarrer pour appliquer sa mise à jour. Au bout de 5 minutes...
La mise en place d'un tunnel OpenVPN va demander plusieurs étapes pour valider la possibilité de pouvoir utiliser la mécanique OpenVPN pour monter un tunnel VPN avec un routeur pfSense et ainsi accéder à des ressources informatiques de manière protégée.
Pour commencer, il faut créer une autorité de certification pour la gestion des certificats de connexion.
Faire ensuite Add sur le bouton vert en bas à droite de l'interface.
Dans la zone CAs, laisser la méthode à "Create an internal Certificate Authority" mais précisez un nom pour
décrire votre autorité de certification. Vous en aurez besoin plus loin donc mettez quelque chose qui vous inspire...
Dans la seconde partie de cette fenêtre, validez les champs avec les différentes valeurs telles que définies
dans l'image. Pour la partie CountryCode, mettez autre chose si vous ne souhaitez pas France comme Pays.
Remplissez également les autres champs administratifs en-dessous.
Le champ Common Name doit être unique et sans espace. Il va identifier le certificat.
L'autorité de certification ainsi créée apparaît dans la liste des autorités de certification.
La clé ainsi créée doit être exportée pour pouvoir être manipulée lors de la génération des tunnels.
Toujours depuis la même page, cliquez sur Certificates. Vous voici devant la feuille listant les certificats disponibles.
Il y en a déjà un : celui du configurateur Web de pfSense. Celui-ci ne nous concerne pas. Cliquez sur la bouton Add/Sign.
Laisez la méthode à "Create an internal Certificate" et renseignez le nom du certificat serveur. Celui-ci sera également utile
pour les autres opérations donc renseignez-le avec soin.
La partie centrale recense les paramètres définis par rapport à l'autorité de certification utilisée. Nous ne touchons pas à ces
paramètres. Comme précédemment, pour le champ Common Name il faut mettre un nom unique.
Dans la partie des attributs du certificat, nous allons créer un certificat pour notre serveur. Sélectionnez le type
de certificat sur "Server Certificate" et faites Save.
Le certificat apparaît alors dans la liste des certificats disponibles.
Se rendre dans System > User Manager
Cliquer sur + Add
Entrez un nom d'utilisateur et un mot de passe.
Cliquez sur Click to create a user certificate
Saisir ensuite le nom du certificat ainsi que l'autorité de certification.
L'utilisateur est maintenant créé et apparaît dans la liste des utilisateurs.
Maintenant que vous avez le certificat, vous pouvez créer la configuration du serveur VPN qui va utiliser la configuration à base de certificats que vous venez de mettre en place. Ce serveur VPN sera le point d'entrée au tunnel que vous allez mettre en place pour vos utilisateurs.
Commencez par vous rendre sur VPN > OpenVPN > Servers et faites + Add
Choisissez le mode d'accès au serveur :
Dans les paramètres de Cryptographie, spécifiez le certificat de l'autorité de certification ainsi que le certificat du
serveur avec lequel vous allez établir la connexion.
Vous pouvez laisser les autres valeurs par défaut pour le moment.
Dans les paramètres du tunnel, précisez l'adresse IP virtuelle qui sera affectée au réseau monté par ce tunnel.
Cela ne doit pas être celle qui correspond au réseau réel caché derrière le firewall. Son format est CIDR et peut être
n'importe quel intervalle d'adresses valide. Par exemple 10.73.0.0/24.
Pour passer en mode full tunneling, cochez la case Redirect IPv4 Gateway (pas utile dans la majorité des cas).
Spécifiez également le nombre de connexions simultanées souhaitées au maximum sur ce tunnel.
Dans les paramètres du client qui va utiliser ce tunnel, cocher Dynamic IP et laisser la topologie
du réseau sur Subnet - One IP address per client
Dans la suite des configurations, en fonction des besoins, vous pouvez laisser un timeout survenir et déconnecter le client
en cas de non utilisation du tunnel pendant un laps de temps.
Vous pouvez également gérer le DNS que va recevoir votre client. Cela peut être très pratique dans la majorité des cas
car les connexions avec des lecteurs mappés où des résolutions de noms sont souhaitées est simplifié avec un DNS.
Pour des raisons de sécurité, il est possible de désactiver la mise en cache des identifiants. Pour cela il faut renseigner
l'option auth-nocache dans les Custom Options.
Vous pouvez également forcer un routage à la connexion du tunnel pour être sûr que vos paquets prendront le bon chemin.
Vous pouvez maintenant faire Save et voir que votre serveur VPN avec son tunnel est créé et prêt à
répondre aux sollicitations des clients.
Un serveur VPN sans utilisatyeurs n'a que peu d'intérêt. Pour peupler votre serveur, rendez-vous sur System > User Manager
Ceci est un passage indispensable étant donné que nous avons décidé que nos utilisateurs s'authentifieraient auprès du pfsense.
Ce dernier dispose également d'une solution d'authentification de type RADIUS ou bien avec un LDAP type Active Directory.
Dans la liste qui s'affiche, appuyez simplement sur + Add pour ajouter un utilisateur.
Commencez par donner un nom pour l'utilisateur, puis un mot de passe et enfin un nom complet pour la partie informative
seulement (mais pratique pour le retrouver parfois).
N'oubliez pas de cliquer sur Click to create a user certificate afin de pouvoir utiliser le certificat
serveur que nous avons mis en place dans les étapes précédentes.
La partie de génération du certificat doit disposer d'un nom et de l'autorité de certification qui va autoriser votre tunnel.
Les autres paramètres peuvent rester tels que définis par défaut.
Maintenant que l'utilisateur est dans la liste, il ne nous reste plus qu'à exporter le certificat pour permettre la connexion de notre utilisateur.
Les utilisateurs étant définis localement, leur permettre d'utiliser la connexion VPN nomade OpenVPN va imposer d'exporter
la configuration afin que le client puisse l'installer sur son poste utilisateur.
Sur pfSense l'export s'effectue depuis le menu VPN > OpenVPN. Si vous n'avez pas le menu Client Export, alors il faut procéder
à l'installation du package.
Se rendre sur System > Package Manager.
Dans la section Available Packages, dans la zone de recherche, saisir openvpn
Cliquez sur + Install pour mettre en place le package d'export openvpn
Si vous avez ce package d'export, cliquez sur VPN > OpenVPN > Client Export.
Dans la partie Remote Access Server, vous pouvez choisir depuis quelle définition de serveur distant vous souhaitez
procéder à l'export. Comme nous n'avons qu'un serveur, passons à la suite.
Descendez jusqu'à la partie Clients Settings pour trouver votre configuration utilisateur.
Un certain nombre de configurations sont disponibles.
ATTENTION : tout cela ne fonctionnera que si vous autorisez le flux à joindre votre réseau privé caché derrière le VPN.
Pour ajouter des règles : Firewall > Rules > WAN et cliquez sur + Add.
Il faut laisser passer le flux arrivant sur votre interface WAN (ou l'interface du CARP si jamais) et en spécifiant le protocole UDP.
OpenVPN est un mécanisme fondé sur UDP...
L'objectif est de laisser passer n'importe quelle source arrivant sur l'adresse WAN du firewall et se présentant avec le port 1194.
Quand la règle de configuration du firewall est faite, n'oubliez pas de faire Apply changes afin d'activer les modifications.
Maintenant que la règle de firewall principale est active, laissant passer le flux de OpenVPN à travers le firewall, il faut également autoriser
le flux OpenVPN à traverser. Pour cela, allez sur Firewall > Rules > OpenVPN et faites Add.
Faites une règle générique qui laisse passer tout le trafic à travers cette interface.
Lorsque vous établissez la connexion depuis OpenVPN Gui (dans la barre de systray), après quelques secondes vous obtenez
une bulle de confirmation de bon établissement de lien VPN.
En faisant un
C:\> ipconfig
vous devriez obtenir quelque chose de ce type