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"]
| VM | vCPU | RAM | Disque | Cartes réseau |
|---|---|---|---|---|
| pfSense | 1 | 1 Go (2 Go conseillé) | 10-20 Go | 2 ou 3 : WAN (NAT), LAN (réseau interne), DMZ (réseau interne) |
| Client | 1-2 | 2 Go | 20 Go | 1 : 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
- Démarrer la VM sur l’ISO → accepter la licence → Install → partitionnement Auto (ZFS ou UFS) → redémarrer sans l’ISO.
- Console : Should VLANs be set up now? →
n. - Associer les interfaces : WAN =
em0(ouvtnet0sous KVM), LAN =em1. - Menu console 2) Set interface(s) IP address → LAN :
192.168.1.1/24, activer le DHCP sur LAN (plage.100à.199). - Depuis la VM cliente (en DHCP) : navigateur →
https://192.168.1.1→ accepter le certificat auto-signé. - 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 :
| Ordre | Action | Proto | Source | Destination | Port | Description |
|---|---|---|---|---|---|---|
| 1 | Pass | TCP | LAN net | 172.16.10.20 | 22 | SSH vers le serveur DMZ |
| 2 | Block | ICMP | LAN net | any | - | Interdire le ping sortant |
| 3 | Pass | TCP/UDP | LAN net | any | 53 | DNS |
| 4 | Pass | TCP | LAN net | any | 80, 443 | Web uniquement |
| 5 | Block | any | 10.66.0.0/16 | any | - | 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).
| Alias | Type | Contenu |
|---|---|---|
SRV_INTERNES | Host(s) | 172.16.10.20, 172.16.10.21 |
PORTS_WEB_ADMIN | Port(s) | 80, 443, 22 |
RESEAU_PARTENAIRE | Network(s) | 203.0.113.0/24 |
MAJ_DEBIAN | Host(s) avec FQDN | deb.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 :
| Champ | Valeur |
|---|---|
| Interface | WAN |
| Protocol | TCP |
| Destination | WAN address |
| Destination port | HTTP (80) |
| Redirect target IP | 172.16.10.20 |
| Redirect target port | 80 |
| Filter rule association | Add 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)
- System → Cert. Manager : créer une CA interne, un certificat serveur, un certificat client par utilisateur (et l’utilisateur dans User Manager).
- VPN → OpenVPN → Wizards : authentification locale, port UDP 1194, réseau tunnel
10.8.0.0/24, réseaux locaux à joindre192.168.1.0/24. - Paquet openvpn-client-export (System → Package Manager) → exporter le profil
.ovpndu client. - Client Linux :
sudo apt install openvpn(oupacman -S openvpn), puissudo 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)
- System → Package Manager → Available Packages → installer Suricata.
- Services → Suricata → Global Settings : activer les règles ET Open (gratuites), mise à jour automatique.
- Interfaces : ajouter le WAN, mode IDS (détection seule) au début.
- Catégories utiles :
emerging-scan,emerging-malware,emerging-exploit. - Test : depuis l’extérieur
nmap -sS <IP_WAN>→ alertes dans Alerts. - 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ème | Piste |
|---|---|
| Pas d’accès à la WebGUI | Le client est-il bien dans le LAN de pfSense ? https:// et pas http:// |
| Client sans Internet | Règle LAN → any supprimée ? DNS Resolver activé ? WAN a une IP ? |
| WAN sans trafic en labo | Décocher Block private networks / bogons |
| Port forward ne marche pas | Règle WAN associée créée ? Le serveur a-t-il pfSense comme passerelle ? |
| Se bloquer soi-même | Console → 3) Reset webConfigurator password ou 4) Reset to factory defaults |