S02 - pfSense de A à Z

Objectif

Installer pfSense dans une VM, configurer WAN/LAN, créer des règles, des alias, du NAT, les services DHCP/DNS, un VPN, un IDS et la haute disponibilité - en suivant l’ordre des TP du cours.

Version

pfSense CE (Community Edition, gratuite) - l’image s’obtient sur le site de Netgate (le téléchargement passe désormais par un installateur en ligne « Netgate Installer » ; une ISO CE classique existe aussi). Alternative 100 % libre et très proche : OPNsense. Vérifie la dernière version sur netgate.com avant d’installer.


0. Architecture de labo

flowchart LR
  NET(("Internet")) --- HOTE["Ton PC (Pop!_OS)<br/>réseau NAT de l'hyperviseur"]
  HOTE ---|"WAN (em0)<br/>DHCP"| PF{{"VM pfSense"}}
  PF ---|"LAN (em1)<br/>192.168.1.1/24"| LAN["Réseau interne 'lan-pf'"]
  LAN --- CLIENT["VM cliente<br/>(Debian / Windows)"]
  PF -.->|"OPT1 (em2)<br/>DMZ 172.16.10.1/24"| DMZ["VM serveur web"]
VMvCPURAMDisqueCartes réseau
pfSense11 Go (2 Go conseillé)10-20 Go2 ou 3 : WAN (NAT), LAN (réseau interne), DMZ (réseau interne)
Client1-22 Go20 Go1 : LAN (même réseau interne)

Avec VirtualBox : carte 1 = NAT, carte 2 = Réseau interne nommé lan-pf. Avec virt-manager : carte 1 = réseau default (NAT), carte 2 = un réseau isolé. Voir V02 - VirtualBox / V03 - KVM et virt-manager.


1. TP1 - Installation et configuration initiale

  1. Démarrer la VM sur l’ISO → accepter la licence → Install → partitionnement Auto (ZFS ou UFS) → redémarrer sans l’ISO.
  2. Console : Should VLANs be set up now? → n.
  3. Associer les interfaces : WAN = em0 (ou vtnet0 sous KVM), LAN = em1.
  4. Menu console 2) Set interface(s) IP address → LAN : 192.168.1.1/24, activer le DHCP sur LAN (plage .100 à .199).
  5. Depuis la VM cliente (en DHCP) : navigateur → https://192.168.1.1 → accepter le certificat auto-signé.
  6. Identifiants par défaut : admin / pfsense → l’assistant (Setup Wizard) : nom d’hôte, domaine, DNS, fuseau horaire, nouveau mot de passe admin.

Dans un labo où le WAN est un réseau privé (192.168.x.x de l'hyperviseur), décoche Block private networks et Block bogon networks sur l'interface WAN, sinon rien ne passe.

Sauvegarde / restauration

Diagnostics → Backup & Restore → Download configuration as XML. Restauration : même page, importer le XML. Pratique pour revenir en arrière avant chaque TP.


2. TP2 - Règles de filtrage

Firewall → Rules → [interface]. Règles lues de haut en bas, première correspondance gagne, blocage implicite à la fin. Les règles s’appliquent sur l’interface où le trafic ENTRE (le LAN pour le trafic sortant des clients).

Exemple de jeu de règles sur LAN :

OrdreActionProtoSourceDestinationPortDescription
1PassTCPLAN net172.16.10.2022SSH vers le serveur DMZ
2BlockICMPLAN netany-Interdire le ping sortant
3PassTCP/UDPLAN netany53DNS
4PassTCPLAN netany80, 443Web uniquement
5Blockany10.66.0.0/16any-Plage bannie (log activé)

Supprime (ou désactive) la règle par défaut « Default allow LAN to any » pour que tes restrictions servent à quelque chose.

Tests : ping (doit échouer), curl -I https://debian.org (doit marcher), ssh user@172.16.10.20. Journaux : Status → System Logs → Firewall.


3. TP3 - Alias

Firewall → Aliases. Un alias = un nom pour un groupe d’IP, de réseaux, de ports ou de domaines (FQDN).

AliasTypeContenu
SRV_INTERNESHost(s)172.16.10.20, 172.16.10.21
PORTS_WEB_ADMINPort(s)80, 443, 22
RESEAU_PARTENAIRENetwork(s)203.0.113.0/24
MAJ_DEBIANHost(s) avec FQDNdeb.debian.org

On les utilise ensuite dans les règles. Avantage : ajouter un serveur = modifier l’alias, sans toucher aux règles.


4. TP4 - NAT

Port forwarding (publier un serveur interne)

Firewall → NAT → Port Forward → Add :

ChampValeur
InterfaceWAN
ProtocolTCP
DestinationWAN address
Destination portHTTP (80)
Redirect target IP172.16.10.20
Redirect target port80
Filter rule associationAdd associated filter rule (crée la règle WAN automatiquement)

Test depuis l’extérieur : curl http://<IP_WAN_pfSense> puis nmap <IP_WAN> pour vérifier qu’aucun autre port n’est ouvert.

Outbound NAT (sortie vers Internet)

Firewall → NAT → Outbound : modes Automatic (défaut), Hybrid (auto + tes règles), Manual (tout à la main), Disabled. Exemple Hybrid : forcer le réseau DMZ à sortir avec une IP WAN secondaire (Virtual IP).


5. TP5 - DHCP et DNS Resolver

DHCP : Services → DHCP Server → LAN → plage, passerelle, DNS, domaine, durée du bail. Réservations (en bas de page) : MAC → IP fixe + nom.

DNS Resolver (Unbound) : Services → DNS Resolver (à préférer au Forwarder) :

  • Cocher Enable DNSSEC Support (vérifie la signature des réponses).
  • Host Overrides : intranet.sio.lan → 172.16.10.20 (un « faux » DNS local).

Tests depuis un client :

dig intranet.sio.lan            # doit renvoyer 172.16.10.20
dig +dnssec debian.org          # flag "ad" = réponse authentifiée
dig sigfail.verteiltesysteme.net   # domaine volontairement mal signé : doit ÉCHOUER (SERVFAIL)

6. TP7/TP8 - VPN

OpenVPN « nomade » (road warrior)

  1. System → Cert. Manager : créer une CA interne, un certificat serveur, un certificat client par utilisateur (et l’utilisateur dans User Manager).
  2. VPN → OpenVPN → Wizards : authentification locale, port UDP 1194, réseau tunnel 10.8.0.0/24, réseaux locaux à joindre 192.168.1.0/24.
  3. Paquet openvpn-client-export (System → Package Manager) → exporter le profil .ovpn du client.
  4. Client Linux : sudo apt install openvpn (ou pacman -S openvpn), puis sudo openvpn --config client.ovpn. Ou import dans NetworkManager.

IPsec site à site

Phase 1 (IKEv2 de préférence, authentification par clé partagée ou certificat, AES-256/SHA-256) puis Phase 2 (réseaux locaux ↔ réseaux distants). Status → IPsec doit afficher ESTABLISHED.

WireGuard est aussi disponible en paquet (plus simple et plus rapide) → P07 - VPN (WireGuard, IPsec, OpenVPN).


7. TP9 - IDS/IPS (Suricata ou Snort)

  1. System → Package Manager → Available Packages → installer Suricata.
  2. Services → Suricata → Global Settings : activer les règles ET Open (gratuites), mise à jour automatique.
  3. Interfaces : ajouter le WAN, mode IDS (détection seule) au début.
  4. Catégories utiles : emerging-scan, emerging-malware, emerging-exploit.
  5. Test : depuis l’extérieur nmap -sS <IP_WAN> → alertes dans Alerts.
  6. Passer en IPS (Block Offenders / mode inline) une fois les faux positifs maîtrisés.

8. TP10 - Supervision

Dashboard (widgets Traffic Graphs, Firewall Logs, Interfaces), Diagnostics → pfTop (connexions en direct), paquets Darkstat ou ntopng (statistiques par machine).

9. TP11 - Haute disponibilité (CARP)

Deux pfSense, une IP virtuelle CARP par interface, pfsync sur un lien dédié, XMLRPC Sync pour copier la config. Détails dans R07 - Redondance des passerelles (HSRP, CARP, Keepalived).


10. Dépannage pfSense

ProblèmePiste
Pas d’accès à la WebGUILe client est-il bien dans le LAN de pfSense ? https:// et pas http://
Client sans InternetRègle LAN → any supprimée ? DNS Resolver activé ? WAN a une IP ?
WAN sans trafic en laboDécocher Block private networks / bogons
Port forward ne marche pasRègle WAN associée créée ? Le serveur a-t-il pfSense comme passerelle ?
Se bloquer soi-mêmeConsole → 3) Reset webConfigurator password ou 4) Reset to factory defaults

Voir aussi