Matrice de flux et règles de pare-feu
Document de référence : qui a le droit de parler à qui, et pourquoi. À rédiger avant de toucher à l’interface de pfSense (tâche 4.1 du suivi). Les problèmes rencontrés lors de la mise en œuvre sont dans Troubleshooting.md. Les schémas de l’infrastructure sont dans Architecture.md. Dernière mise à jour : 12/11/2026 — limiteurs de 50 Mbit/s sur la sortie Internet de VISITEURS (étape 76) ; relecture : alias à jour, matrice de synthèse complétée (agents Wazuh, LDAPS 636, agents GLPI) ; 11/11/2026 — WEB →
AD-Core-01: 636 LDAPS (règle 3 quater, phase 19) ; 03/11/2026 — agents Wazuh (aliasSRV_WAZUH,PORTS_WAZUH, une règle par zone) ; zone VISITEURS (VLAN 50, §4.4 bis), aliasRESEAUX_PRIVES; règles de supervision et de journaux (phase 14)
1. Les 5 principes de lecture
| # | Principe | Conséquence pratique |
|---|---|---|
| 1 | Les règles s’appliquent en entrée d’interface | « USERS accède au web » → règle sur l’onglet USERS |
| 2 | Première correspondance gagne, puis arrêt | l’ordre des règles fait partie de la configuration |
| 3 | Tout ce qui n’est pas autorisé est bloqué (règle implicite invisible) | une interface neuve ne laisse rien passer |
| 4 | pfSense est stateful | on n’écrit que le sens aller, jamais le retour |
| 5 | Le routage inter-VLAN est natif | on ne l’active pas, on le restreint |
2. Alias à créer au préalable
Firewall → Aliases → Add
Les alias évitent d’écrire des adresses en dur. Si le plan d’adressage change, les règles suivent automatiquement.
Réseaux
| Nom | Type | Contenu | Usage |
|---|---|---|---|
LAB_NETS | Network | 10.0.0.0/24, 10.0.10.0/24, 10.0.20.0/24, 10.0.30.0/24, 10.0.40.0/24, 10.0.50.0/24 (VLAN 50 ajouté le 30/10) | « tout l’interne » — sert aux règles de blocage |
RESEAUX_PRIVES | Network | 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 (RFC 1918) | 30/10 — tous les réseaux privés : les zones du lab et le réseau de l’école ; sert au refus de la zone VISITEURS. Type Network obligatoire : Host(s) refuse un /8 |
Hôtes
| Nom | Type | Contenu | Machine |
|---|---|---|---|
SRV_HA | Host | 10.0.10.5 | Debian — HAProxy : répartiteur web et point d’entrée de la base |
SRV_WEB | Host | 10.0.10.10, 10.0.10.11 | Les 2 serveurs Apache + PHP + WordPress |
GALERA_NODES | Host | 10.0.20.10, 10.0.20.11, 10.0.20.12 | Les 3 nœuds du cluster Galera |
SRV_MYSQL | Host | 10.0.20.10 | Le nœud de référence, conservé pour le désigner seul |
SRV_BASTION | Host | 10.0.30.12 | Debian — hôte Docker : Termix |
DC_AD | Host | 10.0.30.10, 10.0.30.11 | Les contrôleurs de domaine : AD-Core-01 en service ; 10.0.30.11 réservée à AD-Core-02, non créé (reporté, dette T-8) |
POSTE_ADMIN | Host | 10.70.0.18 | Poste de travail côté WAN — accès dérogatoire |
SRV_PBS | Host | 10.0.30.13 | 15/10 — Proxmox Backup Server, serveur de sauvegarde (VLAN 30) |
PVE_HOST | Host | 10.1.0.253 | 15/10 — l’hyperviseur pve-01 de l’école, côté WAN : seule source autorisée vers PBS |
SRV_METRIQUES | Host | 10.0.30.14 | 16/10 — serveur de métriques (Prometheus) — en service (VM 139, 19/10) |
SRV_SUPERVISION | Host | 10.0.30.15 | 16/10 — Grafana, réception des journaux, accès au cluster — en service (VM 140, 21/10) |
SRV_WAZUH | Host | 10.0.30.16 | 03/11 — serveur Wazuh (détection d’intrusion, phase 16) : manager, indexeur, tableau de bord (VM 113) |
Ports
| Nom | Type | Contenu | Usage |
|---|---|---|---|
PORTS_WEB | Port | 80, 443 | HTTP / HTTPS |
PORTS_ADMIN | Port | 22, 3389 | SSH / RDP — protocoles sortants du bastion |
PORTS_ADMIN_FW | Port | 443, 22 | Accès à l’administration de pfSense (à ne pas confondre avec le précédent) |
PORTS_BASTION | Port | 443 | Interface web de Termix |
PORTS_DNS_NTP | Port | 53, 123 | Résolution de noms et synchronisation horaire fournies par pfSense |
PORTS_GALERA | Port | 3306, 4444, 4567, 4568 | Réplication Galera — documentaire : voir l’encadré ci-dessous |
PORTS_HA_STATS | Port | 8404 | Page de statistiques de HAProxy, pour l’accès externe (règle ADM 4 bis) |
PORTS_PBS | Port | 8007 | 15/10 — Interface web et API de PBS (redirection WAN, §4.5 et §5) |
PORTS_EXPORTERS | Port | 9100, 9104, 9182 | 16/10 — exporteurs de métriques : 9100 Linux et pfSense, 9104 MariaDB, 9182 Windows — confirmés le 20-21/10 (étape 47) |
PORTS_SYSLOG | Port | 514 | 16/10 — réception des journaux (TCP) |
PORTS_WAZUH | Port | 1514, 1515 | 03/11 — agents Wazuh : 1514 envoi continu des événements de l’agent (chiffré), 1515 enrôlement (inscription de l’agent et remise de sa clé, une fois). Le 1515 reste ouvert : de nouveaux agents seront ajoutés, et une machine réinstallée doit pouvoir se réinscrire |
PORTS_DC_AD | Port | 53, 88, 123, 135, 389, 445, 464, 636, 3268, 3269, 49152:65535 | Active Directory |
Flux sans règle pfSense (même zone ADM) (03/11) :
srv-supervision→srv-wazuhUDP 514 (copie des seules alertes de Suricata, tâche 16.9) ;srv-wazuh→srv-supervisionTCP 514 (ses journaux, dont les alertes graves de Wazuh). pfSense →srv-supervisionUDP 514 existait déjà.
Pourquoi tant de ports pour l’AD ? Active Directory n’est pas un protocole mais un empilement : DNS (53) pour trouver le contrôleur, Kerberos (88/464) pour s’authentifier, LDAP (389/636) pour l’annuaire, SMB (445) pour les GPO et le partage SYSVOL, NTP (123) car Kerberos refuse un écart d’horloge supérieur à 5 minutes, et RPC (135 + la plage dynamique 49152-65535) pour la réplication. La plage dynamique est le point qui bloque tout le monde : Windows négocie un port au hasard dans cet intervalle, impossible de le prévoir.
PORTS_GALERAne sera utilisé par aucune règle — et c’est normal. Les trois nœuds du cluster sont dans le même VLAN 20 : leur trafic de réplication est commuté et ne traverse jamais pfSense. Aucune règle ne peut donc le filtrer, ni n’est nécessaire.L’alias est créé pour deux raisons : documenter les ports réellement employés (
4567contrôle du groupe,4568transfert incrémental IST,4444synchronisation complète SST), et être prêt si les nœuds étaient un jour répartis sur plusieurs sites.C’est la même leçon que la diagonale « — » de la matrice : on ne filtre pas ce qui ne passe pas par le routeur. Un cluster dans un seul VLAN est un choix d’architecture qui a pour conséquence d’échapper au pare-feu.
3. Matrice de synthèse
Lecture : ligne = source, colonne = destination.
| Source ↓ / Dest → | WEB (10) | BDD (20) | ADM (30) | USERS (40) | VISITEURS (50) | Internet |
|---|---|---|---|---|---|---|
| WEB (10) | — | 3306 (SRV_HA seul) | 514 (SRV_SUPERVISION seul) · 1514/1515 (SRV_WAZUH) · 636 LDAPS (AD-Core-01, GLPI) | 80/443 | ||
| BDD (20) | — | 514 (SRV_SUPERVISION seul) · 1514/1515 (SRV_WAZUH) | 80/443 (décochée) | |||
| ADM (30) | 22/3389 (bastion seul) · 9100 (SRV_METRIQUES seul) · 443 (SRV_METRIQUES → SRV_HA seul) | 22/3389 (bastion seul) · 9100/9104 (SRV_METRIQUES) · 3306 (SRV_SUPERVISION seul) | — | 22/3389 (bastion seul) · 9182 (SRV_METRIQUES) | 22 (bastion seul) · 9100 (SRV_METRIQUES) | |
| USERS (40) | 80/443 (SRV_HA seul) | AD + bastion web · 514 (SRV_SUPERVISION seul) · 1514/1515 (SRV_WAZUH) | — | 80/443 | ||
| VISITEURS (50) | 514 et 1514/1515 (poste-visiteur seul → SRV_SUPERVISION, SRV_WAZUH) | — | 80/443 | |||
| WAN (école) | 8007 (PVE_HOST → SRV_PBS seul, par redirection) | — |
Ce que le répartiteur change dans cette matrice — le point à retenir du sujet.
AVANT APRÈS ───── ───── USERS → SRV_WEB : 80/443 USERS → SRV_HA : 80/443 SRV_WEB → SRV_MYSQL : 3306 SRV_HA → GALERA_NODES : 3306 ▲ ▲ les serveurs web joignent ils ne la joignent PLUS DU TOUT la base une seule machine y accèdeOn ajoute une machine, trois nœuds de base et deux serveurs web — et pourtant le nombre de machines autorisées à parler à la base passe de 1 à 1, alors qu’elles sont maintenant deux à en avoir besoin fonctionnellement. Une couche supplémentaire a restreint les autorisations au lieu de les élargir. C’est le meilleur argument du sujet.
Légende : autorisé large · autorisé mais restreint · temporaire, à désactiver · interdit · — intra-VLAN, non filtré
La diagonale
—est essentielle à comprendre : deux machines du même VLAN communiquent sans passer par pfSense. Le trafic est commuté dans le même domaine de diffusion. Aucune règle ne peut le filtrer. C’est pourquoi on ne met pas ensemble deux machines qui doivent être isolées l’une de l’autre.
4. Règles détaillées, par interface
L’ordre indiqué est impératif (principe n°2).
Vocabulaire des menus déroulants (pfSense 2.9)
| Terme employé ici | Entrée dans les listes Source / Destination | Désigne |
|---|---|---|
X subnets | WEB subnets, BDD subnets, ADM subnets, USERS subnets | tout le réseau de l’interface, ex. 10.0.40.0/24 |
X address | WEB address, BDD address, ADM address, USERS address | l’adresse de pfSense seule sur cette interface, ex. 10.0.40.1 |
| un alias | choisir Address or Alias puis saisir le nom | LAB_NETS, SRV_WEB, SRV_BASTION… |
any | Any | n’importe quelle destination — en pratique Internet, une fois l’interne intercepté |
Changement de vocabulaire depuis pfSense 2.7. Ce qui s’appelait
X nets’appelle désormaisX subnets, etSingle host or aliasest devenuAddress or Alias. La plupart des tutoriels en ligne emploient encore l’ancienne terminologie.
Où saisir les ports
La colonne Port de toutes les tables ci-dessous désigne le Destination Port Range, jamais le Source Port Range.
| Champ du formulaire | Valeur |
|---|---|
| Source Port Range | any — toujours, sans exception |
| Destination Port Range → From → liste | (other) |
| Destination Port Range → From → Custom | le nom de l’alias, ex. PORTS_DNS_NTP |
| Destination Port Range → To | vide (ne sert qu’aux plages, ex. 8000 → 8100) |
Pourquoi jamais de port source ? Dans une connexion TCP/UDP, le port destination identifie le service demandé (53 = DNS, 3306 = MySQL, 443 = HTTPS) : c’est lui qui a un sens à filtrer. Le port source est un numéro tiré au hasard par le système du client dans la plage éphémère
49152-65535, différent à chaque connexion. Le filtrer reviendrait à écrire « j’autorise le DNS, mais seulement si le client a tiré le 54321 » — la règle ne correspondrait quasiment jamais.pfSense affiche d’ailleurs cet avertissement dans le formulaire dès qu’on déplie Display Advanced : « this setting must remain at its default value, any ».
Pourquoi le pluriel ? « net » ne disait pas s’il s’agissait du réseau ou de l’interface. « subnets » est plus exact : si une interface porte plusieurs sous-réseaux (adresses virtuelles, réseaux additionnels), l’entrée les couvre tous. Ici chaque interface n’a qu’un seul /24, donc c’est strictement équivalent.
4.1 Onglet USERS — VLAN 40
| # | Action | Proto | Source | Destination | Port | Log | Description à saisir | Rôle |
|---|---|---|---|---|---|---|---|---|
| 0 bis | Pass | TCP | USERS subnets | SRV_SUPERVISION | PORTS_SYSLOG | — | Journaux syslog vers supervision | 21/10 — le poste envoie ses journaux Windows (Fluent Bit) : une destination, un port. Placée en tête de liste |
| 0 ter | Pass | TCP | USERS subnets | SRV_WAZUH | PORTS_WAZUH | — | Agents Wazuh vers srv-wazuh | 03/11 — postes gérés du domaine (testé depuis poste-win11 : 1514 et 1515 True) |
| 1 | Pass | TCP/UDP | USERS subnets | USERS address | PORTS_DNS_NTP | — | DNS et NTP fournis par pfSense | résolution de noms des clients |
| 2 | Pass | ICMP | USERS subnets | LAB_NETS | — | — | Diagnostic ping interne - a restreindre en phase 8 | outil de dépannage |
| 3 | Pass | TCP/UDP | USERS subnets | ADM subnets | PORTS_DC_AD | — | Jonction et authentification domaine sio.internal | Windows 11 et Debian/SSSD |
| 4 | Pass | TCP | USERS subnets | SRV_BASTION | PORTS_BASTION | — | Acces web Termix | portail d’accès distant |
| 5 | Pass | TCP | USERS subnets | SRV_HA | PORTS_WEB | — | Acces site WordPress via le repartiteur | modifiée en phase 10 ; sert aussi GLPI (glpi.sio.internal, même répartiteur, 05/11 : aucune règle ajoutée) — les clients ne joignent plus les serveurs web directement |
| 6 | Reject | any | USERS subnets | LAB_NETS | any | Refus de tout autre flux interne | cloisonnement | |
| 7 | Pass | TCP | USERS subnets | any | PORTS_WEB | — | Sortie Internet HTTP et HTTPS | navigation |
| — | (block all implicite) |
Le mécanisme de la règle 6 est la clé de toute la configuration. Elle refuse tout l’interne après les autorisations ciblées. La règle 7 vise
any— qui inclut normalement les réseaux internes — mais comme la règle 6 les a déjà interceptés,anyne désigne plus en pratique qu’Internet. C’est le motif canonique : autorisations précises, puis blocage interne, puis sortie large.Pourquoi la règle 1 doit être en premier : le DHCP distribue
10.0.40.1(pfSense) comme serveur DNS. OrUSERS addressappartient à10.0.40.0/24, donc àLAB_NETS— la règle 6 l’intercepterait. Sans cette autorisation placée avant, les clients obtiendraient une IP, pingueraient8.8.8.8sans problème, mais ne résoudraient aucun nom. Panne classique et trompeuse.
92-pfsense-regle-users-syslog.png(onglet USERS le 21/10 : la règle des journaux en tête)Le Log de la règle 6 est coché volontairement : c’est lui qui produira la preuve, en phase 7, qu’un flux interdit a bien été refusé (Status → System Logs → Firewall).
4.2 Onglet WEB — VLAN 10
| # | Action | Proto | Source | Destination | Port | Log | Description à saisir | Rôle |
|---|---|---|---|---|---|---|---|---|
| 0 | Pass | TCP | SRV_HA | GALERA_NODES | 9200 | — | Sonde etat Galera pour HAProxy | 05/11 — HAProxy interroge la sonde de synchronisation de chaque nœud (étape 62) ; placée en tête de l’onglet |
| 1 | Pass | TCP/UDP | WEB subnets | WEB address | PORTS_DNS_NTP | — | DNS et NTP fournis par pfSense | résolution de noms |
| 2 | Pass | ICMP | WEB subnets | LAB_NETS | — | — | Diagnostic ping interne | dépannage |
| 3 | Pass | TCP | SRV_HA | GALERA_NODES | 3306 | — | Repartiteur vers cluster Galera | modifiée en phase 10 — le flux vedette, resserré |
| 3 bis | Pass | TCP | WEB subnets | SRV_SUPERVISION | PORTS_SYSLOG | — | Journaux syslog vers supervision | 16/10 — les serveurs web envoient leurs journaux (une destination, un port) |
| 3 ter | Pass | TCP | WEB subnets | SRV_WAZUH | PORTS_WAZUH | — | Agents Wazuh vers srv-wazuh | 03/11 — testé depuis srv-web-01 |
| 3 quater | Pass | TCP | WEB subnets | 10.0.30.10 (AD-Core-01) | 636 (LDAPS) | — | GLPI : lecture de l'annuaire (LDAPS) | 11/11 (phase 19) — GLPI lit les comptes du domaine par un compte en lecture seule (CS_glpi_ldap) ; 636 seulement, le 389 est refusé par le contrôleur de toute façon (H-97) ; testé depuis srv-web-01 |
| 4 | Reject | any | WEB subnets | LAB_NETS | any | Refus de tout autre flux interne | cloisonnement | |
| 5 | Pass | TCP | WEB subnets | any | PORTS_WEB | — | Sortie Internet - depots Debian | mises à jour |
La règle 3 est le cœur pédagogique du TP. Remarque qu’elle est écrite d’hôte à hôte (
SRV_WEB→SRV_MYSQL) et non de réseau à réseau. Même si tu ajoutes un jour une seconde machine dans le VLAN 10, elle n’aura pas accès à la base. C’est ça, le moindre privilège.Pourquoi la règle 1 en premier ?
WEB address(10.0.10.1) appartient à10.0.10.0/24, donc àLAB_NETS. Sans cette règle placée avant le Reject, tes serveurs Linux ne pourraient plus résoudre de nom — et tu chercherais longtemps.
4.3 Onglet BDD — VLAN 20
| # | Action | Proto | Source | Destination | Port | Log | Description à saisir | Rôle |
|---|---|---|---|---|---|---|---|---|
| 1 | Pass | TCP/UDP | BDD subnets | BDD address | PORTS_DNS_NTP | — | DNS et NTP fournis par pfSense | résolution de noms |
| 2 | Pass | ICMP | BDD subnets | LAB_NETS | — | — | Diagnostic ping interne | dépannage |
| 2 bis | Pass | TCP | BDD subnets | SRV_SUPERVISION | PORTS_SYSLOG | — | Journaux syslog vers supervision | 16/10 — exception assumée à « la base n’initie rien » : une destination, un port |
| 2 ter | Pass | TCP | BDD subnets | SRV_WAZUH | PORTS_WAZUH | — | Agents Wazuh vers srv-wazuh | 03/11 — seconde exception assumée à « la base n’initie rien », même logique que 2 bis : une destination, deux ports ; testé depuis srv-mysql-01 |
| 2 quater | Pass | TCP | BDD subnets | SRV_HA | 443 | — | Agents GLPI vers SRV_HA | 06/11 — troisième exception assumée à « la base n’initie rien » : l’inventaire GLPI quotidien des nœuds (une destination, un port) ; placée en tête de l’onglet |
| 3 | Reject | any | BDD subnets | LAB_NETS | any | Refus de tout flux interne sortant | la base n’initie rien | |
| 4 | Pass | TCP | BDD subnets | any | PORTS_WEB | — | TEMPORAIRE - installation MySQL - a decocher apres | à désactiver en 6.3 |
Aucune règle n’autorise l’entrée du serveur web vers la base. C’est normal et c’est correct : le flux est autorisé sur l’onglet WEB (règle 4.2 n°3), et les réponses reviennent grâce à la table d’états (principe n°4). Si tu ajoutes une règle d’entrée ici, tu ouvres la base dans un sens qui ne devrait jamais l’être.
Règle 4 — Ne pas la supprimer, la DÉCOCHER. pfSense permet de désactiver une règle sans l’effacer : elle reste grisée dans la liste. Elle devient la trace documentaire de ta démarche — « j’ai ouvert pour installer, j’ai refermé ensuite ». Excellent argument en soutenance.
4.4 Onglet ADM — VLAN 30
| # | Action | Proto | Source | Destination | Port | Log | Description à saisir | Rôle |
|---|---|---|---|---|---|---|---|---|
| 1 | Pass | TCP | ADM subnets | ADM address | PORTS_ADMIN_FW | — | Administration pfSense HTTPS et SSH | accès au webConfigurator |
| 2 | Pass | TCP/UDP | ADM subnets | ADM address | PORTS_DNS_NTP | — | DNS et NTP fournis par pfSense | forwarder de l’AD |
| 3 | Pass | ICMP | ADM subnets | LAB_NETS | — | — | Diagnostic ping interne | dépannage |
| 4 | Pass | TCP | SRV_BASTION | LAB_NETS | PORTS_ADMIN | — | Bastion vers RDP et SSH | le bastion |
| 4 bis | Pass | TCP | SRV_BASTION | SRV_HA | PORTS_HA_STATS | — | Bastion vers statistiques HAProxy (acces externe) | 14/10 — le connecteur de l’accès externe atteint une seule page |
| 4 ter | Pass | TCP | SRV_SUPERVISION | GALERA_NODES | 3306 | — | Supervision vers cluster Galera (journaux et Grafana) | 16/10 — stockage des journaux et de la base de Grafana |
| 4 quater | Pass | TCP | SRV_METRIQUES | LAB_NETS | PORTS_EXPORTERS | — | Metriques vers exporteurs du lab | 16/10 — Prometheus vient lire les exporteurs (un hôte, trois ports). En service le 21/10 : 18 exporteurs lus, y compris l’adresse ADM de pfSense (10.0.30.1:9100, comprise dans LAB_NETS) ; dans le même VLAN (ADM), c’est le pare-feu de l’hôte qui filtre : règle Windows windows_exporter - srv-metriques seul (9182, source 10.0.30.14) sur AD-Core-01 et poste-win11 |
| 4 quinquies | Pass | TCP | SRV_METRIQUES | SRV_HA | 443 | — | Sonde du site web (metriques vers repartiteur) | 20/10 — la sonde du site interroge le répartiteur (un hôte, une cible, un port) |
| 5 | Reject | any | ADM subnets | LAB_NETS | any | Refus de tout autre flux interne | même l’AD est cloisonné | |
| 6 | Pass | any | ADM subnets | any | any | — | Sortie Internet | mises à jour Windows ; depuis le 05/11, aussi la copie hors site de srv-pbs vers le S3 du NAS d’Axel (HTTPS 443, chaque nuit 04:00, Documentation étape 65) |
Règle 1 —
PORTS_ADMIN_FWest un 12ᵉ alias à créer (Port(s) :443,22, descriptionAdministration pfSense). Ne réutilise pasPORTS_ADMIN(22,3389) : il désigne les protocoles sortants du bastion, pas l’accès au pare-feu. Deux usages différents, deux alias — sinon une modification de l’un casse silencieusement l’autre.
La règle 4 est la traduction du bastion. Seul
SRV_BASTION(10.0.30.12) — pas tout le VLAN 30 — peut atteindre les autres réseaux, et uniquement en RDP et SSH. Un serveur AD compromis ne peut rien faire vers les autres VLAN : la règle 5 l’arrête.
La règle 4 bis est la plus étroite possible : un hôte, un port. Le connecteur de l’accès externe (Pangolin) tourne sur
SRV_BASTIONet hérite de ce que cet hôte atteint. Plutôt que d’élargir la règle 4 (tous lesLAB_NETS), on autorise uniquementSRV_BASTION → SRV_HA : 8404. Elle est avant le refus (règle 5) et numérotée « 4 bis » pour ne pas décaler les renvois des autres documents. Voir l’étape 42 de la documentation.Ces repères (4 bis, 4 ter, 4 quater, 3 bis, 2 bis) n’existent que dans la documentation. Dans pfSense, les règles ajoutées après coup sont en haut de la liste ; entre règles « Pass » ciblées qui ne se recoupent pas l’ordre est sans importance, seule compte la position avant le Refus (règle 5). L’état réel de l’onglet ADM est sur la capture 81.
Les règles 4 ter et 4 quater préparent la supervision (étape 45) : l’une laisse
srv-supervisionécrire dans le cluster, l’autre laissesrv-metriqueslire les exporteurs. Pas de règle pour le VLAN 30 lui-même : AD, bastion et PBS sont dans le même VLAN, leur trafic ne traverse pas le pare-feu. Depuis le 21/10, l’onglet USERS a sa règle (0 bis) :poste-win11envoie ses journaux par Fluent Bit (étape 48).En service le 21/10 (étape 48) : la règle 4 ter ne voit passer qu’une machine,
srv-supervision, par son HAProxy local (127.0.0.1:3306→ les 3 nœuds). pfSense envoie ses propres journaux (UDP 514, depuis son adresse ADM10.0.30.1) verssrv-supervision: ce trafic part du pare-feu lui-même, il n’est soumis à aucune règle d’interface.srv-supervisionn’accepte l’UDP que de10.0.30.1.Mails d’alerte (29/10, étape 54) : Grafana, sur
srv-supervision, envoie ses alertes àsmtp.gmail.comsur le port 587 (STARTTLS). Ce flux sortant vers Internet est déjà permis par la règle ADM de sortie (ADM → toutes destinations) : aucune règle ajoutée.La règle 6 ouvre un second chemin de résolution DNS, et c’est assumé.
AD-Core-01redirige vers10.0.30.1les noms dont il n’est pas l’autorité. Mais son serveur DNS conserveUseRootHint = True: si le résolveur de pfSense ne répond pas, il interroge directement les serveurs racine d’Internet — et la règle 6, large, le lui permet effectivement.Le flux correspondant n’apparaît donc pas forcément comme
ADM → ADM address : 53, mais peut sortir enADM → any : 53. À savoir avant de lire les journaux : une requête DNS sortante vers une adresse publique n’est pas une anomalie ici.
Ce qui reste unique Le pare-feu : le trafic passe par lui en tant que routeur, filtrable et journalisable Ce qui cesse de l’être Le résolveur, et uniquement en mode dégradé Décision et justification complètes dans
MO-6, section 8.3. Registre : T-11.Les deux ports de
PORTS_ADMINservent au même portail. Termix ouvre des sessions SSH sur le 22 vers les machines Linux, et des sessions de bureau à distance sur le 3389 vers les machines Windows — il embarque le moteur de rendu nécessaire. Un seul bastion, une seule adresse à filtrer, une seule règle à justifier.Conséquence à assumer : pour administrer
srv-webousrv-mysql, tu passeras par Termix, pas par un SSH direct depuis le serveur AD. C’est exactement le comportement attendu d’un bastion — et c’est ce qui rend la règle démontrable. Si tu préfères un accès large pour toute la zone ADM : élargir la règle 4 enADM net → LAB_NETS : any. Mais le bastion perd alors sa raison d’être.
06/11, étape 69 : règle ADM en tête,
Pass TCP ADM subnets → SRV_HA : 443, « Agents et API GLPI vers SRV_HA » (créée par Axel) : inventaire GLPI des machines ADM et API de GLPI depuis le bastion (l’API elle-même est filtrée par adresse dans HAProxy : bastion etsrv-supervisionseulement).
Site public de GSB et Matomo (10-11/11, étape 72) : aucune règle ajoutée. Le site public arrive par Pangolin sur
srv-docker(zone ADM), qui jointSRV_HA : 443avec la règle ADM ci-dessus ; Matomo est servi parsrv-ha(stats.sio.internal) ; les sondes desrv-metriques(ADM) passent par la même règle ; la basematomoest dans Galera (flux WEB vers BDD déjà ouverts) ; les deux agents Wazuh des serveurs web utilisent la règle WEB versSRV_WAZUHexistante. Le filtrage se fait dans HAProxy (administration, connexion, API, auteurs refusés pour le nom public ; l’intranet renvoyé vers le nom interne).
LogAnalyzer (06/11, étape 67) :
srv-supervisionécoute aussi en HTTPS 8443 (lecture des journaux). Aucune règle ajoutée : le poste d’administration arrive par l’onglet Tailscale (Pass any → any, comme pour Grafana 3000) ; aucune autre zone n’a de règle vers ADM:8443 — vérifié depuis USERS et WEB (bloqué).
4.4 bis Onglet VISITEURS — VLAN 50 (30/10/2026)
La zone la plus fermée : des invités qui n’ont droit qu’au DNS, au DHCP et à Internet (modèle de la zone « Visiteurs » de GSB).
| # | Action | Proto | Source | Destination | Port | Log | Rôle |
|---|---|---|---|---|---|---|---|
| 1 | Pass | TCP/UDP | VISITEURS subnets | VISITEURS address | PORTS_DNS_NTP | — | résolution de noms et heure |
| 2 | Pass | — | 10.0.50.200 (poste-visiteur) | SRV_SUPERVISION | 514 | — | journaux du poste de test vers la supervision |
| 2 bis | Pass | TCP | 10.0.50.200 (poste-visiteur) | SRV_WAZUH | PORTS_WAZUH | — | 03/11 — le poste de test seul, pas VISITEURS subnets : les appareils des invités ne sont pas gérés et n’auront jamais d’agent ; ouvrir le port d’enrôlement à toute la zone permettrait à un invité d’inscrire un faux agent ou d’attaquer le serveur qui surveille le lab (moindre privilège, choix d’Axel le 03/11) |
| 3 | Reject | any | VISITEURS subnets | This Firewall (self) | any | aucune interface de pfSense, sur aucune de ses adresses | |
| 4 | Reject | any | VISITEURS subnets | RESEAUX_PRIVES | any | aucune zone du lab, ni le réseau de l’école | |
| 5 | Pass | TCP | VISITEURS subnets | any | PORTS_WEB | — | Internet ; 12/11 — limiteurs VISITEURS_ENVOI / VISITEURS_RECEPTION (In / Out pipe), 50 Mbit/s par sens pour toute la zone (étape 76, test T21) |
Pourquoi
RESEAUX_PRIVESet pasLAB_NETS:LAB_NETSne contient que le lab. Un visiteur ne doit pas non plus atteindre le réseau de l’école (10.1.0.0/16, dont l’hyperviseur) : la règle 5 l’y laisserait passer en 80/443. Les réseaux privés (RFC 1918) couvrent les deux.Règle 1 : protocole TCP/UDP et ports
PORTS_DNS_NTP. La première version (TCP, port *) ouvrait l’interface web de pfSense aux visiteurs et ne laissait pas passer le DNS, qui est en UDP (corrigée le 30/10).Testé le 30/10 (tâche 15.6) : DNS et
HTTP/2 200vers Internet ; 6 cibles internes refusées et journalisées. Détail :Documentation-pfSense.md, étape 55.
4.5 Onglet WAN
État au 15/10/2026 : UNE seule règle entrante active, générée par la redirection de port vers PBS (§5).
| # | Action | Proto | Source | Destination | Port | État | Description |
|---|---|---|---|---|---|---|---|
| 1 | Pass | any | any | any | any | décochée le 25/09 | (règle générée par enableallowallwan) |
| 2 | Pass | TCP | PVE_HOST | SRV_PBS | PORTS_PBS | active depuis le 15/10 | (générée par pfSense à partir de la redirection : règle associée à la redirection : elle se modifie depuis NAT → Port Forward, pas ici) |
Pourquoi une exception à « zéro règle entrante » : l’hyperviseur de l’école (
10.1.0.253) doit envoyer les sauvegardes des VM au serveur PBS, placé dans le VLAN 30. Il est côté WAN et ne connaît pas les réseaux10.0.x.0/24: il vise donc l’adresse WAN de pfSense (10.1.0.197:8007), que pfSense redirige vers10.0.30.13:8007. L’ouverture est la plus étroite possible : une source (l’hyperviseur seul), un port, une destination. Toute autre machine du réseau de l’école reste refusée.
Correction du 25/09. Ce document décrivait une règle n°2
POSTE_ADMIN → WAN address : 443, présentée comme une dérogation assumée. Cette règle n’a jamais été créée : l’analyse des quatre sauvegardes XML (17/09 → 25/09) montre que l’onglet WAN n’a jamais contenu que la règle allow all. La dérogation décrite ici était théorique.POSTE_ADMINreste un alias valide, simplement inutilisé.La cible est atteinte, et elle est meilleure que le compromis prévu : zéro règle entrante sur le WAN. L’accès distant passe intégralement par le tunnel Tailscale, qui n’ouvre aucun port en entrée. C’est le canon, pas un compromis.
Filet de sécurité en cas de panne du tunnel : la console Proxmox, qui ne dépend d’aucune règle de pare-feu. Un accès de secours ne doit jamais dépendre du système qu’il secourt.
4.6 Onglet LAN — 10.0.0.0/24
Interface de secours sur le trunk, sans machine raccordée. On conserve la règle allow all créée à l’installation : c’est le filet de sécurité en cas d’erreur de configuration sur les VLAN.
5. NAT
Firewall → NAT → Outbound
Laisser le mode Automatic outbound NAT rule generation (valeur par défaut).
pfSense crée alors automatiquement les règles de traduction pour tous les réseaux internes vers le WAN. Tes VLAN sortent donc en 10.1.0.197, l’adresse de pfSense côté école.
Pourquoi du NAT ici ? Le réseau de l’école ne connaît pas tes réseaux
10.0.x.0/24et n’a aucune route vers eux. Sans traduction, les paquets partiraient mais aucune réponse ne reviendrait. Le NAT fait passer tout ton lab pour une machine unique aux yeux de l’école.On passera en mode Hybrid seulement si tu as besoin d’une règle de NAT particulière pour une machine donnée.
Une seule règle NAT entrante (Port Forward), depuis le 15/10 : le site web, lui, n’est toujours pas publié vers l’école (décision validée).
Firewall → NAT → Port Forward
| Interface | Proto | Source | Destination | Port dest. | Redirigé vers | Port | Règle de filtrage | Description |
|---|---|---|---|---|---|---|---|---|
| WAN | TCP | PVE_HOST | WAN address | PORTS_PBS | SRV_PBS | PORTS_PBS | associée (Add associated filter rule) | Sauvegardes PBS depuis pve-01 |
Vérifié le 15/10 depuis l’hyperviseur : curl -k https://10.1.0.197:8007/ répond 200.
« Associée » plutôt que « passer » : pfSense crée la règle WAN correspondante et la tient à jour avec la redirection. Changer la source ou le port dans la redirection met la règle à jour seule.
6. Durcissement prévu en phase 8
| # | Action | Pourquoi |
|---|---|---|
| 8.1 | Supprimer la règle WAN allow all | interface d’administration exposée |
| 8.2 | Supprimer la règle POSTE_ADMIN | Tailscale couvre déjà l’accès, y compris sur site. On vise zéro règle entrante ; le filet de sécurité en cas de panne du tunnel est la console Proxmox, qui ne dépend d’aucune règle de pare-feu. |
| — | Décocher la règle 4.3 n°4 (Internet BDD) | une fois MySQL installé |
| — | Restreindre l’ICMP à ADM subnets comme source | le ping large n’est utile qu’en phase de tests |
| — | Activer le log sur les règles Reject | sans journal, on ne prouve pas qu’un flux est bloqué |
| — | (bonus) Monter un VPN WireGuard | remplacerait la dérogation WAN par le vrai canon |
| — | Phase 10 : bind-address à 0.0.0.0 sur les nœuds Galera | assouplissement du verrou 1 imposé par la réplication — compensé par la règle 4.2 n°3, à documenter comme dette |
Le log sur les règles Reject est indispensable pour la phase 7. C’est ce qui te permettra de montrer, capture à l’appui (Status → System Logs → Firewall), qu’un flux interdit a bien été refusé. Un pare-feu qui bloque sans le prouver ne démontre rien.
7. Correspondance avec les tests de la phase 7
| Test | Flux | Attendu | Règle concernée |
|---|---|---|---|
| 7.1 | AD-Core-01 → AD-Core-02 (même VLAN) | passe | aucune — intra-VLAN (attend la création d’AD-Core-02) |
| 7.2 | srv-web → srv-mysql:3306 | passe | 4.2 n°3 |
| 7.3 | client Win → srv-mysql:3306 | refusé | 4.1 n°5 |
| 7.4 | client Win → Internet | passe — vérifié le 05/11 pour toutes les zones (BDD refusé comme prévu), capture 192 | 4.1 n°6 |
| 7.5 | client Win → DNS de l’AD | passe | 4.1 n°2 |
| 7.6 | client Win → srv-web:80 | passe | 4.1 n°4 |
| — | srv-mysql → Internet | refusé (après fermeture) | 4.3 n°4 décochée |
| — | AD-Core-01 → srv-web:22 | refusé | 4.4 n°5 — passer par Termix |
| 7.7 | Répartition sur les 2 serveurs web | alternance | HAProxy, pas une règle |
| 7.8 | Arrêt d’apache2 sur srv-web-01 | le site tient | HAProxy retire le nœud |
| 7.9 | Écriture nœud 2, lecture nœud 3 | réplication | intra-VLAN, non filtré |
| 7.10 | Arrêt de mariadb sur le nœud 1 | WordPress tient | bascule HAProxy |
| 7.11 | Arrêt de 2 nœuds sur 3 | écritures refusées | quorum Galera |
| 7.12 | Média téléversé présent sur les 2 web | synchronisé | lsyncd, pas une règle |
| 7.13 | Rejouer 7.3 après la phase 10 | toujours refusé | 4.1 n°6 — non-régression |

