Chapitre 414 minIntermédiaire
Règles de pare-feu pfSense : ordre, alias et journalisation
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- dérouler l'ordre dans lequel pfSense évalue un paquet ;
- remplir chaque champ d'une règle et choisir entre Block et Reject ;
- créer des alias pour des adresses, des réseaux et des ports ;
- savoir quand utiliser une règle flottante, un groupe ou un horaire ;
- décider quoi journaliser.
4 exercices corrigés1 schéma
Une règle de pare-feu pfSense décide du sort des paquets qui entrent par une interface : les laisser passer (Pass), les jeter sans réponse (Block) ou les refuser en prévenant l'émetteur (Reject). Les règles d'une interface sont lues de haut en bas et la première qui correspond s'applique ; ce qui ne correspond à aucune règle est bloqué. Ce chapitre explique l'ordre d'évaluation complet, chaque champ d'une règle, les alias, les règles flottantes, la journalisation et les horaires.
Où se trouvent les règles
Firewall > Rules affiche un onglet par interface (WAN, ADMIN, POSTES, SERVEURS…), plus des onglets spéciaux :
- Floating : les règles flottantes, qui peuvent s'appliquer à plusieurs interfaces et dans les deux sens ;
- un onglet par groupe d'interfaces (par exemple
INTERNES) ; - un onglet par type de VPN : IPsec, OpenVPN, WireGuard ; chacun regroupe le trafic qui sort des tunnels de ce type (chapitres 9 et 10).
Une modification n'est active qu'après Apply Changes, le bandeau qui s'affiche en haut de la page : tant que tu n'as pas cliqué, l'ancienne politique reste en place.
L'ordre d'évaluation
Pour un paquet qui arrive, pfSense regarde d'abord la table d'états : s'il appartient à une connexion déjà autorisée, il passe sans lire aucune règle (chapitre 1). Sinon, les règles sont évaluées dans cet ordre :
- les règles automatiques que pfSense ajoute lui-même et n'affiche pas toutes : blocage des réseaux privés et des bogons sur le WAN, règle anti-lockout, accès au serveur ou au relais DHCP, règles des VPN ;
- les règles flottantes (onglet Floating) ;
- les règles des groupes d'interfaces ;
- les règles de l'interface, de haut en bas : la première qui correspond décide ;
- la règle de blocage par défaut (Default deny rule IPv4, Default deny rule IPv6), invisible, qui bloque et journalise tout le reste.
Le trafic émis par le pare-feu lui-même (ses requêtes DNS, ses mises à jour, l'envoi de ses journaux) est autorisé en sortie par une règle automatique : on ne filtre que ce qui entre.
Les champs d'une règle
Firewall > Rules > POSTES > Add (la flèche vers le haut ajoute la règle en haut de la liste, la flèche vers le bas en bas) :
| Champ | Valeurs | À savoir |
|---|---|---|
| Action | Pass, Block, Reject | Voir plus bas la différence entre Block et Reject |
| Disabled | Case | Désactive la règle sans la supprimer : pratique pour un test |
| Interface | POSTES | L'interface d'entrée du trafic |
| Address Family | IPv4, IPv6, IPv4+IPv6 | |
| Protocol | TCP, UDP, TCP/UDP, ICMP, ESP, Any… | Pour ICMP, on peut choisir les sous-types (echo request pour le ping) |
| Source | any, Single host or alias, Network, This Firewall (self), POSTES subnets, POSTES address… | Invert match inverse la condition (« tout sauf ») |
| Source Port Range | any par défaut, caché derrière Display Advanced | Presque toujours any : le port source d'un client est tiré au hasard |
| Destination | Mêmes choix que la source | |
| Destination Port Range | Un port, une plage, un alias de ports | Seulement pour TCP et UDP |
| Log | Case Log packets that are handled by this rule | Écrit chaque correspondance dans le journal |
| Description | Texte libre | Indispensable : c'est elle qui s'affiche dans le journal |
| Advanced Options | Horaire (Schedule), passerelle, type d'état, limites… | Voir plus bas |
Les objets automatiques simplifient l'écriture et suivent les changements d'adresse :
| Objet | Ce qu'il désigne chez Sorbier |
|---|---|
| POSTES subnets | Le réseau de l'interface : 192.168.10.64/26 |
| POSTES address | L'adresse du pare-feu sur cette interface : 192.168.10.126 |
| This Firewall (self) | Toutes les adresses du pare-feu, sur toutes ses interfaces |
| WAN address | L'adresse publique : 203.0.113.17 |
Block ou Reject ?
| Block | Reject | |
|---|---|---|
| Ce que fait le pare-feu | Jette le paquet en silence | Jette le paquet et répond : TCP RST pour TCP, ICMP « port injoignable » pour UDP |
| Ce que voit l'émetteur | Rien : il attend, puis abandonne après plusieurs secondes | Un refus immédiat |
| Où l'utiliser | Sur le WAN : ne rien révéler à un balayage de ports | Entre zones internes : un poste qui tente un accès interdit reçoit une erreur tout de suite, au lieu de bloquer l'application |
Le refus implicite de pfSense est un Block. Pour les règles de refus que tu écris entre zones internes, Reject évite les délais d'attente et les tickets « l'application est lente ».
Les alias
Un alias donne un nom à une adresse, un réseau, une liste d'adresses ou de ports. Firewall > Aliases, onglets IP, Ports et URLs. Les avantages :
- les règles deviennent lisibles :
SRV_DCplutôt que deux adresses ; - une modification se fait à un seul endroit : un nouveau contrôleur de domaine ? On l'ajoute à l'alias, toutes les règles suivent ;
- une seule règle remplace plusieurs règles identiques à l'adresse près.
| Type | Contenu | Exemple |
|---|---|---|
| Host(s) | Adresses ou noms DNS (résolus régulièrement par pfSense) | Les deux contrôleurs de domaine |
| Network(s) | Réseaux en notation CIDR, ou adresses | Tous les réseaux internes |
| Port(s) | Ports et plages (49152:65535) | Les ports d'Active Directory |
| URL (IPs), URL Table (IPs) | Une liste d'adresses ou de réseaux téléchargée régulièrement | Une liste de blocage publiée par un organisme de sécurité |
| URL (Ports), URL Table (Ports) | Une liste de ports téléchargée | Plus rare |
Le nom d'un alias ne contient que des lettres, des chiffres et des tirets bas (SRV_DC). Un alias peut contenir d'autres alias. Diagnostics > Tables montre le contenu réel d'un alias tel que le pare-feu l'utilise : utile pour un alias de noms DNS ou une liste téléchargée.
Voici les alias de Sorbier, utilisés dans tout le cours :
| Alias | Type | Contenu |
|---|---|---|
SRV_DC | Host(s) | 192.168.10.177, 192.168.10.181 (srv-ad, srv-ad2) |
SRV_FICHIERS | Host(s) | 192.168.10.178 |
SRV_GESTION | Host(s) | 192.168.10.179 |
SRV_JOURNAUX | Host(s) | 192.168.10.180 (Wazuh, Zabbix, Grafana) |
SRV_WEB | Host(s) | 192.168.10.225 |
BASTION | Host(s) | 192.168.10.210 (bastion d'administration) |
DC_MACON | Host(s) | 192.168.20.10 (contrôleur en lecture seule de Mâcon) |
SRV_MACON | Host(s) | 192.168.20.11 (fichiers et DHCP de Mâcon) |
SERVEURS_MACON | Host(s) | DC_MACON, SRV_MACON (un alias peut contenir d'autres alias) |
RESEAUX_INTERNES | Network(s) | 192.168.10.0/24, 192.168.20.0/24 (Mâcon), 10.8.0.0/23 (les deux réseaux VPN nomades) |
PORTS_AD_TCP | Port(s) | 53, 88, 135, 389, 445, 464, 636, 3268, 3269, 49152:65535 |
PORTS_AD_UDP | Port(s) | 53, 67, 88, 123, 389, 464 |
PORTS_WAZUH | Port(s) | 1514, 1515 |
PORTS_ADMIN | Port(s) | 22, 443, 3389 |
PORTS_DFSR | Port(s) | 135, 49152:65535 (réplication DFS-R, qui passe par RPC) |
PORTS_WEB | Port(s) | 80, 443 |
10.8.0.0/23 couvre 10.8.0.0 à 10.8.1.255, donc les deux réseaux VPN 10.8.0.0/24 et 10.8.1.0/24 d'un coup.
Les règles flottantes
L'onglet Floating accueille des règles qui diffèrent des règles d'interface sur trois points :
- elles peuvent s'appliquer à plusieurs interfaces à la fois (champ Interface à choix multiple) ;
- elles ont une direction : in, out ou any, là où les règles d'interface ne voient que le trafic entrant ;
- l'option Quick change la logique : cochée, la première règle qui correspond décide, comme ailleurs ; décochée, la règle ne s'applique que si aucune autre règle ne correspond ensuite (« la dernière qui correspond gagne »). Coche Quick dans presque tous les cas.
Les règles flottantes entrantes sont lues avant les règles des interfaces. Usages typiques : une interdiction qui doit valoir partout quelles que soient les règles des interfaces (bloquer une liste d'adresses malveillantes dans les deux sens), le classement du trafic pour la qualité de service (action Match), ou le filtrage du trafic émis par le pare-feu lui-même. Pour le reste, préfère les onglets d'interface : une politique dispersée dans les règles flottantes devient illisible.
Journaliser
Deux sources alimentent le journal du pare-feu (Status > System Logs > Firewall) :
- la règle de blocage par défaut, journalisée par défaut (réglage Default Firewall "block" Rules dans Status > System Logs > Settings) : tout ce qui est refusé faute de règle y apparaît ;
- les règles dont la case Log est cochée.
Que journaliser ? Toutes les règles de refus explicite (elles signalent des tentatives), les règles d'autorisation sensibles (administration, accès depuis la DMZ, VPN), et ponctuellement une règle que tu mets au point. Ne journalise pas tout le trafic autorisé courant : le journal local tourne vite (500 Kio par fichier par défaut) et les lignes utiles s'y noient. Les journaux partent de toute façon vers Wazuh, qui les conserve et les analyse (chapitre 15).
Dans le journal, une icône devant chaque ligne indique l'action ; un clic dessus affiche la règle qui a décidé. Les icônes Easy Rule ajoutent en un clic une règle qui autorise (ou bloque) la source ou le flux de la ligne : pratique en maquette, à manier avec prudence en production, car la règle créée est souvent plus large que nécessaire.
Les horaires
Firewall > Schedules définit des plages horaires (jours, heures), que l'on choisit ensuite dans le champ Schedule des options avancées d'une règle. Une règle Pass associée à un horaire n'autorise que pendant cette plage. Chez Sorbier, l'accès Internet du Wi-Fi invité n'est ouvert que du lundi au samedi, de 7 h à 20 h. À la fin de la plage, pfSense supprime par défaut les états des connexions ouvertes par cette règle : les visiteurs sont déconnectés.
Organiser un onglet
Un onglet bien tenu se relit en une minute :
- les règles sont regroupées par destination ou par service, séparées par des séparateurs (bouton Separator) titrés : « Annuaire », « Serveurs métier », « Internet » ;
- chaque règle a une description qui dit le besoin, pas la technique : « Postes vers application de gestion » plutôt que « TCP 443 vers 179 » ;
- l'onglet se termine par un refus explicite journalisé, avec une description qui nomme l'interface : la ligne du journal dit alors « Refus final POSTES » plutôt que « Default deny rule IPv4 » ;
- les règles inutiles sont supprimées, pas seulement désactivées, après une période d'observation.
Exercices
Exercice 1 sur 4 Quelle règle s'applique ? Réussi À revoir
Onglet POSTES, dans l'ordre :
| N° | Action | Protocole | Source | Destination | Port |
|---|---|---|---|---|---|
| 1 | Pass | TCP | POSTES subnets | SRV_FICHIERS | 445 |
| 2 | Reject | Any | POSTES subnets | RESEAUX_INTERNES | * |
| 3 | Pass | TCP | POSTES subnets | any | PORTS_WEB |
| 4 | Pass | TCP | POSTES subnets | SRV_GESTION | 443 |
Pour chaque flux, dis quelle règle s'applique et le résultat : (a) 192.168.10.80 vers 192.168.10.178:445 ; (b) 192.168.10.80 vers 192.168.10.179:443 ; (c) 192.168.10.80 vers 203.0.113.200:443 ; (d) 192.168.10.80 vers 192.168.10.225:443.
Voir la réponseMasquer la réponse de l'exercice 1
- (a) Règle 1 : autorisé.
- (b) Règle 2 :
192.168.10.179fait partie deRESEAUX_INTERNES(192.168.10.0/24) ; le flux est refusé, et la règle 4 n'est jamais lue. Il faut remonter la règle 4 au-dessus de la règle 2. - (c) Règle 3 :
203.0.113.200n'est pas dansRESEAUX_INTERNES, la règle 2 ne correspond pas ; la règle 3 autorise HTTPS vers any. - (d) Règle 2 : le serveur web de la DMZ a une adresse interne,
192.168.10.225, comprise dansRESEAUX_INTERNES; refusé. S'il faut l'autoriser, une règle précise versSRV_WEBport 443 au-dessus de la règle 2.
Tu avais trouvé ?
Exercice 2 sur 4 Remplir une règle Réussi À revoir
Les postes doivent pouvoir envoyer les événements de leur agent Wazuh à srv-journaux. Remplis les champs pfSense : action, interface, famille d'adresses, protocole, source, destination, port de destination, journalisation, description. Où places-tu la règle ?
Voir la réponseMasquer la réponse de l'exercice 2
| Champ | Valeur |
|---|---|
| Action | Pass |
| Interface | POSTES |
| Address Family | IPv4 |
| Protocol | TCP |
| Source | POSTES subnets (port source any) |
| Destination | Single host or alias : SRV_JOURNAUX |
| Destination Port Range | PORTS_WAZUH (1514 pour les événements, 1515 pour l'enrôlement de l'agent) |
| Log | Non coché : flux autorisé, courant et volumineux |
| Description | « Postes vers Wazuh (agent) » |
Elle va au-dessus du refus vers RESEAUX_INTERNES, sinon elle ne serait jamais lue.
Tu avais trouvé ?
Exercice 3 sur 4 This Firewall ou POSTES address ? Réussi À revoir
Un technicien veut que les postes puissent pinguer leur passerelle pour les diagnostics. Il écrit : Pass, ICMP, source POSTES subnets, destination This Firewall (self). Qu'autorise réellement cette règle ? Corrige-la.
Voir la réponseMasquer la réponse de l'exercice 3
This Firewall (self) désigne toutes les adresses du pare-feu : la règle permet aux postes de pinguer aussi 192.168.10.222 (ADMIN), 192.168.10.238 (DMZ) et l'adresse publique. Ce n'est qu'un ping, mais cela révèle l'existence des autres réseaux, et la même erreur avec un port TCP ouvrirait l'interface d'administration. Correction : destination POSTES address, protocole ICMP, sous-type echo request.
Tu avais trouvé ?
Exercice 4 sur 4 Block, Reject, et l'utilisateur qui attend Réussi À revoir
Les comptables se plaignent : quand ils cliquent sur un ancien raccourci vers \\192.168.10.185\archives (un serveur retiré), l'explorateur se fige une vingtaine de secondes avant d'afficher une erreur. La dernière règle de l'onglet POSTES est Block, any, vers RESEAUX_INTERNES, journalisée. Explique le phénomène et propose une correction.
Voir la réponseMasquer la réponse de l'exercice 4
Block jette le paquet SYN sans répondre : le poste ne sait pas que l'accès est refusé, il retransmet plusieurs fois, puis abandonne après le délai d'attente, d'où le blocage de l'explorateur. Avec Reject, le pare-feu répond immédiatement par un TCP RST : l'erreur s'affiche tout de suite. Entre zones internes, Reject est préférable ; on garde Block sur le WAN. On peut aussi supprimer le raccourci obsolète, ou le rediriger (DFS) vers le nouvel emplacement des archives.
Tu avais trouvé ?