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 (alias SRV_WAZUH, PORTS_WAZUH, une règle par zone) ; zone VISITEURS (VLAN 50, §4.4 bis), alias RESEAUX_PRIVES ; règles de supervision et de journaux (phase 14)


1. Les 5 principes de lecture

#PrincipeConséquence pratique
1Les règles s’appliquent en entrée d’interface« USERS accède au web » → règle sur l’onglet USERS
2Première correspondance gagne, puis arrêtl’ordre des règles fait partie de la configuration
3Tout ce qui n’est pas autorisé est bloqué (règle implicite invisible)une interface neuve ne laisse rien passer
4pfSense est statefulon n’écrit que le sens aller, jamais le retour
5Le routage inter-VLAN est natifon 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

NomTypeContenuUsage
LAB_NETSNetwork10.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_PRIVESNetwork10.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

NomTypeContenuMachine
SRV_HAHost10.0.10.5Debian — HAProxy : répartiteur web et point d’entrée de la base
SRV_WEBHost10.0.10.10, 10.0.10.11Les 2 serveurs Apache + PHP + WordPress
GALERA_NODESHost10.0.20.10, 10.0.20.11, 10.0.20.12Les 3 nœuds du cluster Galera
SRV_MYSQLHost10.0.20.10Le nœud de référence, conservé pour le désigner seul
SRV_BASTIONHost10.0.30.12Debian — hôte Docker : Termix
DC_ADHost10.0.30.10, 10.0.30.11Les 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_ADMINHost10.70.0.18Poste de travail côté WAN — accès dérogatoire
SRV_PBSHost10.0.30.1315/10 — Proxmox Backup Server, serveur de sauvegarde (VLAN 30)
PVE_HOSTHost10.1.0.25315/10 — l’hyperviseur pve-01 de l’école, côté WAN : seule source autorisée vers PBS
SRV_METRIQUESHost10.0.30.1416/10 — serveur de métriques (Prometheus) — en service (VM 139, 19/10)
SRV_SUPERVISIONHost10.0.30.1516/10 — Grafana, réception des journaux, accès au cluster — en service (VM 140, 21/10)
SRV_WAZUHHost10.0.30.1603/11 — serveur Wazuh (détection d’intrusion, phase 16) : manager, indexeur, tableau de bord (VM 113)

Ports

NomTypeContenuUsage
PORTS_WEBPort80, 443HTTP / HTTPS
PORTS_ADMINPort22, 3389SSH / RDP — protocoles sortants du bastion
PORTS_ADMIN_FWPort443, 22Accès à l’administration de pfSense (à ne pas confondre avec le précédent)
PORTS_BASTIONPort443Interface web de Termix
PORTS_DNS_NTPPort53, 123Résolution de noms et synchronisation horaire fournies par pfSense
PORTS_GALERAPort3306, 4444, 4567, 4568Réplication Galera — documentaire : voir l’encadré ci-dessous
PORTS_HA_STATSPort8404Page de statistiques de HAProxy, pour l’accès externe (règle ADM 4 bis)
PORTS_PBSPort800715/10 — Interface web et API de PBS (redirection WAN, §4.5 et §5)
PORTS_EXPORTERSPort9100, 9104, 918216/10 — exporteurs de métriques : 9100 Linux et pfSense, 9104 MariaDB, 9182 Windows — confirmés le 20-21/10 (étape 47)
PORTS_SYSLOGPort51416/10 — réception des journaux (TCP)
PORTS_WAZUHPort1514, 151503/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_ADPort53, 88, 123, 135, 389, 445, 464, 636, 3268, 3269, 49152:65535Active Directory

Flux sans règle pfSense (même zone ADM) (03/11) : srv-supervision → srv-wazuh UDP 514 (copie des seules alertes de Suricata, tâche 16.9) ; srv-wazuh → srv-supervision TCP 514 (ses journaux, dont les alertes graves de Wazuh). pfSense → srv-supervision UDP 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_GALERA ne 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 (4567 contrôle du groupe, 4568 transfert incrémental IST, 4444 synchronisation 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ède

On 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é iciEntrée dans les listes Source / DestinationDésigne
X subnetsWEB subnets, BDD subnets, ADM subnets, USERS subnetstout le réseau de l’interface, ex. 10.0.40.0/24
X addressWEB address, BDD address, ADM address, USERS addressl’adresse de pfSense seule sur cette interface, ex. 10.0.40.1
un aliaschoisir Address or Alias puis saisir le nomLAB_NETS, SRV_WEB, SRV_BASTION…
anyAnyn’importe quelle destination — en pratique Internet, une fois l’interne intercepté

Changement de vocabulaire depuis pfSense 2.7. Ce qui s’appelait X net s’appelle désormais X subnets, et Single host or alias est devenu Address 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 formulaireValeur
Source Port Rangeany — toujours, sans exception
Destination Port Range → From → liste(other)
Destination Port Range → From → Customle nom de l’alias, ex. PORTS_DNS_NTP
Destination Port Range → Tovide (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

#ActionProtoSourceDestinationPortLogDescription à saisirRôle
0 bisPassTCPUSERS subnetsSRV_SUPERVISIONPORTS_SYSLOG—Journaux syslog vers supervision21/10 — le poste envoie ses journaux Windows (Fluent Bit) : une destination, un port. Placée en tête de liste
0 terPassTCPUSERS subnetsSRV_WAZUHPORTS_WAZUH—Agents Wazuh vers srv-wazuh03/11 — postes gérés du domaine (testé depuis poste-win11 : 1514 et 1515 True)
1PassTCP/UDPUSERS subnetsUSERS addressPORTS_DNS_NTP—DNS et NTP fournis par pfSenserésolution de noms des clients
2PassICMPUSERS subnetsLAB_NETS——Diagnostic ping interne - a restreindre en phase 8outil de dépannage
3PassTCP/UDPUSERS subnetsADM subnetsPORTS_DC_AD—Jonction et authentification domaine sio.internalWindows 11 et Debian/SSSD
4PassTCPUSERS subnetsSRV_BASTIONPORTS_BASTION—Acces web Termixportail d’accès distant
5PassTCPUSERS subnetsSRV_HAPORTS_WEB—Acces site WordPress via le repartiteurmodifié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
6RejectanyUSERS subnetsLAB_NETSanyRefus de tout autre flux internecloisonnement
7PassTCPUSERS subnetsanyPORTS_WEB—Sortie Internet HTTP et HTTPSnavigation
—(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, any ne 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. Or USERS address appartient à 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, pingueraient 8.8.8.8 sans 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)

92-pfsense-regle-users-syslog

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

#ActionProtoSourceDestinationPortLogDescription à saisirRôle
0PassTCPSRV_HAGALERA_NODES9200—Sonde etat Galera pour HAProxy05/11 — HAProxy interroge la sonde de synchronisation de chaque nœud (étape 62) ; placée en tête de l’onglet
1PassTCP/UDPWEB subnetsWEB addressPORTS_DNS_NTP—DNS et NTP fournis par pfSenserésolution de noms
2PassICMPWEB subnetsLAB_NETS——Diagnostic ping internedépannage
3PassTCPSRV_HAGALERA_NODES3306—Repartiteur vers cluster Galeramodifiée en phase 10 — le flux vedette, resserré
3 bisPassTCPWEB subnetsSRV_SUPERVISIONPORTS_SYSLOG—Journaux syslog vers supervision16/10 — les serveurs web envoient leurs journaux (une destination, un port)
3 terPassTCPWEB subnetsSRV_WAZUHPORTS_WAZUH—Agents Wazuh vers srv-wazuh03/11 — testé depuis srv-web-01
3 quaterPassTCPWEB subnets10.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
4RejectanyWEB subnetsLAB_NETSanyRefus de tout autre flux internecloisonnement
5PassTCPWEB subnetsanyPORTS_WEB—Sortie Internet - depots Debianmises à 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

#ActionProtoSourceDestinationPortLogDescription à saisirRôle
1PassTCP/UDPBDD subnetsBDD addressPORTS_DNS_NTP—DNS et NTP fournis par pfSenserésolution de noms
2PassICMPBDD subnetsLAB_NETS——Diagnostic ping internedépannage
2 bisPassTCPBDD subnetsSRV_SUPERVISIONPORTS_SYSLOG—Journaux syslog vers supervision16/10 — exception assumée à « la base n’initie rien » : une destination, un port
2 terPassTCPBDD subnetsSRV_WAZUHPORTS_WAZUH—Agents Wazuh vers srv-wazuh03/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 quaterPassTCPBDD subnetsSRV_HA443—Agents GLPI vers SRV_HA06/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
3RejectanyBDD subnetsLAB_NETSanyRefus de tout flux interne sortantla base n’initie rien
4 PassTCPBDD subnetsanyPORTS_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

#ActionProtoSourceDestinationPortLogDescription à saisirRôle
1PassTCPADM subnetsADM addressPORTS_ADMIN_FW—Administration pfSense HTTPS et SSHaccès au webConfigurator
2PassTCP/UDPADM subnetsADM addressPORTS_DNS_NTP—DNS et NTP fournis par pfSenseforwarder de l’AD
3PassICMPADM subnetsLAB_NETS——Diagnostic ping internedépannage
4PassTCPSRV_BASTIONLAB_NETSPORTS_ADMIN—Bastion vers RDP et SSHle bastion
4 bisPassTCPSRV_BASTIONSRV_HAPORTS_HA_STATS—Bastion vers statistiques HAProxy (acces externe)14/10 — le connecteur de l’accès externe atteint une seule page
4 terPassTCPSRV_SUPERVISIONGALERA_NODES3306—Supervision vers cluster Galera (journaux et Grafana)16/10 — stockage des journaux et de la base de Grafana
4 quaterPassTCPSRV_METRIQUESLAB_NETSPORTS_EXPORTERS—Metriques vers exporteurs du lab16/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 quinquiesPassTCPSRV_METRIQUESSRV_HA443—Sonde du site web (metriques vers repartiteur)20/10 — la sonde du site interroge le répartiteur (un hôte, une cible, un port)
5RejectanyADM subnetsLAB_NETSanyRefus de tout autre flux internemême l’AD est cloisonné
6PassanyADM subnetsanyany—Sortie Internetmises à 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_FW est un 12ᵉ alias à créer (Port(s) : 443, 22, description Administration pfSense). Ne réutilise pas PORTS_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_BASTION et hérite de ce que cet hôte atteint. Plutôt que d’élargir la règle 4 (tous les LAB_NETS), on autorise uniquement SRV_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 laisse srv-metriques lire 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-win11 envoie 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 ADM 10.0.30.1) vers srv-supervision : ce trafic part du pare-feu lui-même, il n’est soumis à aucune règle d’interface. srv-supervision n’accepte l’UDP que de 10.0.30.1.

Mails d’alerte (29/10, étape 54) : Grafana, sur srv-supervision, envoie ses alertes à smtp.gmail.com sur 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-01 redirige vers 10.0.30.1 les noms dont il n’est pas l’autorité. Mais son serveur DNS conserve UseRootHint = 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 en ADM → 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 uniqueLe pare-feu : le trafic passe par lui en tant que routeur, filtrable et journalisable
Ce qui cesse de l’êtreLe 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_ADMIN servent 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-web ou srv-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 en ADM 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 et srv-supervision seulement).

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 joint SRV_HA : 443 avec la règle ADM ci-dessus ; Matomo est servi par srv-ha (stats.sio.internal) ; les sondes de srv-metriques (ADM) passent par la même règle ; la base matomo est dans Galera (flux WEB vers BDD déjà ouverts) ; les deux agents Wazuh des serveurs web utilisent la règle WEB vers SRV_WAZUH existante. 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).

#ActionProtoSourceDestinationPortLogRôle
1PassTCP/UDPVISITEURS subnetsVISITEURS addressPORTS_DNS_NTP—résolution de noms et heure
2Pass—10.0.50.200 (poste-visiteur)SRV_SUPERVISION514—journaux du poste de test vers la supervision
2 bisPassTCP10.0.50.200 (poste-visiteur)SRV_WAZUHPORTS_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)
3RejectanyVISITEURS subnetsThis Firewall (self)anyaucune interface de pfSense, sur aucune de ses adresses
4RejectanyVISITEURS subnetsRESEAUX_PRIVESanyaucune zone du lab, ni le réseau de l’école
5PassTCPVISITEURS subnetsanyPORTS_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_PRIVES et pas LAB_NETS : LAB_NETS ne 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 200 vers 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).

#ActionProtoSourceDestinationPortÉtatDescription
1Passanyanyanyany décochée le 25/09(règle générée par enableallowallwan)
2PassTCPPVE_HOSTSRV_PBSPORTS_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éseaux 10.0.x.0/24 : il vise donc l’adresse WAN de pfSense (10.1.0.197:8007), que pfSense redirige vers 10.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_ADMIN reste 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/24 et 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

InterfaceProtoSourceDestinationPort dest.Redirigé versPortRègle de filtrageDescription
WANTCPPVE_HOSTWAN addressPORTS_PBSSRV_PBSPORTS_PBSassocié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

#ActionPourquoi
8.1Supprimer la règle WAN allow allinterface d’administration exposée
8.2Supprimer la règle POSTE_ADMINTailscale 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 sourcele ping large n’est utile qu’en phase de tests
—Activer le log sur les règles Rejectsans journal, on ne prouve pas qu’un flux est bloqué
—(bonus) Monter un VPN WireGuardremplacerait la dérogation WAN par le vrai canon
—Phase 10 : bind-address à 0.0.0.0 sur les nœuds Galeraassouplissement 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

TestFluxAttenduRègle concernée
7.1AD-Core-01 → AD-Core-02 (même VLAN) passeaucune — intra-VLAN (attend la création d’AD-Core-02)
7.2srv-web → srv-mysql:3306 passe4.2 n°3
7.3client Win → srv-mysql:3306 refusé4.1 n°5
7.4client Win → Internet passe — vérifié le 05/11 pour toutes les zones (BDD refusé comme prévu), capture 1924.1 n°6
7.5client Win → DNS de l’AD passe4.1 n°2
7.6client Win → srv-web:80 passe4.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.7Répartition sur les 2 serveurs web alternanceHAProxy, pas une règle
7.8Arrêt d’apache2 sur srv-web-01 le site tientHAProxy retire le nœud
7.9Écriture nœud 2, lecture nœud 3 réplicationintra-VLAN, non filtré
7.10Arrêt de mariadb sur le nœud 1 WordPress tientbascule HAProxy
7.11Arrêt de 2 nœuds sur 3 écritures refuséesquorum Galera
7.12Média téléversé présent sur les 2 web synchronisélsyncd, pas une règle
7.13Rejouer 7.3 après la phase 10 toujours refusé4.1 n°6 — non-régression