Chapitre 1513 minIntermédiaire
Superviser pfSense avec Zabbix et envoyer ses journaux à Wazuh
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- activer SNMP sur pfSense en limitant son exposition ;
- superviser le pare-feu dans Zabbix et l'afficher dans Grafana ;
- envoyer les journaux du pare-feu à Wazuh et vérifier leur décodage ;
- écrire une règle d'alerte locale et la première action qui va avec.
3 exercices corrigés1 schéma
Superviser pfSense, c'est mesurer en continu son état (processeur, mémoire, table d'états, débit et erreurs des interfaces, services) pour être alerté avant la panne, et collecter ses journaux pour détecter les attaques et pouvoir enquêter. Dans le laboratoire de Sorbier, Zabbix interroge le pare-feu en SNMP et Grafana en fait des tableaux de bord, tandis que Wazuh reçoit ses journaux par syslog et lève des alertes de sécurité. Ce chapitre configure les deux chaînes, côté pfSense et côté serveurs.
Deux besoins, deux outils
| Supervision (métriques) | Journaux de sécurité | |
|---|---|---|
| Question | « Le pare-feu va-t-il bien ? » | « Que s'est-il passé, et est-ce une attaque ? » |
| Données | Des nombres mesurés à intervalle régulier : charge, mémoire, états, débits | Des événements datés : connexions refusées, connexions VPN, échecs d'authentification, alertes Suricata |
| Outil chez Sorbier | Zabbix (collecte, seuils, alertes) et Grafana (tableaux de bord), sur srv-journaux 192.168.10.180 | Wazuh (collecte, décodage, règles, alertes, tableau de bord), sur le même srv-journaux 192.168.10.180 |
| Protocole | SNMP (UDP 161), interrogé par Zabbix | Syslog (UDP 514), envoyé par pfSense |
| Cours de référence | Supervision | Wazuh et Cybersécurité des infrastructures |
Avant d'équiper des outils externes, pfSense a ses propres écrans : Status > Dashboard (charge, mémoire, états, interfaces), Status > Monitoring (graphiques historiques), Status > Traffic Graph (débit en temps réel par interface et par machine). Ils servent au dépannage ; ils ne préviennent personne la nuit.
Activer SNMP sur pfSense
pfSense contient un agent SNMP (le démon bsnmpd de FreeBSD), configurable dans Services > SNMP :
| Section | Champ | Valeur chez Sorbier |
|---|---|---|
| SNMP Daemon | Enable | Coché |
| Polling Port | 161 | |
| System location | Siège Sorbier, baie serveur | |
| System contact | L'adresse de l'équipe informatique | |
| Read Community String | Une chaîne longue et aléatoire, jamais public | |
| SNMP Traps | Enable | Facultatif ; Zabbix interroge déjà régulièrement |
| Modules | MibII, PF, Host Resources, UCD | MibII : interfaces et débits ; PF : le filtre et sa table d'états ; Host Resources : processeur, mémoire, disque et processus ; UCD : charge système |
| Interface Binding | Bind Interfaces | SERVEURS : l'agent n'écoute que sur cette interface |
L'agent intégré fonctionne avec une communauté, en SNMP v2c : la communauté circule en clair. On compense en limitant l'exposition : l'agent n'écoute que sur l'interface SERVEURS, une seule règle autorise srv-journaux à l'interroger (règle 3 de l'onglet SERVEURS, chapitre 5), et le flux reste dans le VLAN des serveurs. Pour du SNMPv3, chiffré et authentifié, le paquet net-snmp existe, mais il ne connaît pas les compteurs du filtre pf ; l'autre option est le paquet Zabbix-agent, dont les échanges avec le serveur se chiffrent avec une clé partagée (PSK).
Teste depuis srv-journaux (paquet snmp), avec des identifiants numériques pour ne pas dépendre des fichiers MIB :
# Description du système : doit renvoyer une chaîne qui mentionne pfSense et FreeBSD
snmpget -v2c -c '<communauté>' 192.168.10.188 1.3.6.1.2.1.1.1.0
# Les compteurs du filtre pf (branche BEGEMOT-PF-MIB)
snmpwalk -v2c -c '<communauté>' 192.168.10.188 1.3.6.1.4.1.12325.1.200
Les adresses sont celles de pf1 en grappe (chapitre 13) : on supervise chaque pare-feu à son adresse propre (.188 pour pf1, .189 pour pf2), jamais l'adresse virtuelle, qui répondrait tantôt pour l'un, tantôt pour l'autre. Avec un seul pare-feu, l'adresse est 192.168.10.190.
Ajouter pfSense dans Zabbix
Zabbix fournit un modèle officiel pour pfSense, PFSense by SNMP. Dans l'interface de Zabbix 7.0 LTS : Data collection > Hosts > Create host :
| Champ | Valeur |
|---|---|
| Host name | pf1 |
| Templates | PFSense by SNMP |
| Host groups | Pare-feu |
| Interfaces | Add > SNMP : adresse 192.168.10.188, port 161, SNMP version SNMPv2, SNMP community {$SNMP_COMMUNITY} |
| Macros | {$SNMP_COMMUNITY} = la communauté, en type secret |
Le modèle découvre les interfaces et collecte notamment :
| Mesure | Ce qu'elle surveille |
|---|---|
| État du filtre pf | Le pare-feu filtre-t-il encore ? |
| Nombre d'états, limite, taux d'occupation de la table d'états | Une table qui se remplit annonce un refus de nouvelles connexions (charge exceptionnelle ou déni de service) |
| État des processus DHCP, DNS (Unbound) et du serveur web | Les services rendus par le pare-feu |
| Débit entrant et sortant, erreurs, rejets et état de chaque interface | Saturation du lien Internet, câble ou carte défaillants, interface tombée |
| Trafic autorisé et bloqué par interface | Un pic de trafic bloqué peut signaler un balayage ou une attaque |
| Nombre de règles | Un changement inattendu de la politique |
Ses déclencheurs (triggers) préviennent par exemple quand une interface tombe, quand le taux d'occupation de la table d'états dépasse un seuil, ou quand le pare-feu ne répond plus en SNMP. L'envoi des alertes (courriel, messagerie d'équipe) et l'organisation de la supervision sont expliqués dans le cours Supervision.
Un tableau de bord Grafana
Grafana ne collecte rien : il affiche des données stockées ailleurs. Avec le greffon Zabbix pour Grafana (alexanderzobnin-zabbix-app), il lit les mesures de Zabbix par son API :
# Sur srv-journaux, Grafana 13 : installer le greffon, puis redémarrer Grafana
sudo grafana cli plugins install alexanderzobnin-zabbix-app
sudo systemctl restart grafana-server
Il reste à activer l'application dans Grafana, à créer une source de données Zabbix (URL de l'API de Zabbix, jeton d'API d'un compte Zabbix en lecture seule), puis un tableau de bord « Pare-feu » : débit du WAN, occupation de la table d'états, charge et mémoire de pf1 et pf2, trafic bloqué par interface. C'est l'écran qu'on affiche dans le bureau du service informatique, et une bonne illustration pour l'oral de l'E6.
Envoyer les journaux à Wazuh
Côté pfSense : Status > System Logs > Settings, section Remote Logging Options :
| Champ | Valeur |
|---|---|
| Send log messages to remote syslog server | Coché |
| Source Address | SERVEURS : les journaux partent de l'adresse SERVEURS du pare-feu |
| IP Protocol | IPv4 |
| Remote log servers | 192.168.10.180:514 |
| Remote Syslog Contents | Firewall Events, System Events, General Authentication Events, VPN Events, DHCP Events, Captive Portal Events (ou Everything) |
Garde le format de message par défaut, BSD (RFC 3164), dans les réglages généraux de la même page : c'est celui que les décodeurs de Wazuh reconnaissent. Les alertes de Suricata partent aussi si l'option Send Alerts to System Log est cochée sur ses interfaces (chapitre 12).
Côté Wazuh : le serveur doit accepter le syslog du pare-feu. Dans /var/ossec/etc/ossec.conf sur srv-journaux, ajoute un bloc remote à côté de celui des agents :
<remote>
<connection>syslog</connection>
<port>514</port>
<protocol>udp</protocol>
<allowed-ips>192.168.10.188</allowed-ips>
<allowed-ips>192.168.10.189</allowed-ips>
<!-- les équipements du VLAN ADMIN : switchs, bornes -->
<allowed-ips>192.168.10.208/28</allowed-ips>
<local_ip>192.168.10.180</local_ip>
</remote>
allowed-ips est obligatoire : Wazuh n'accepte le syslog que des adresses listées (ici pf1 et pf2, avec un seul pare-feu 192.168.10.190, et le réseau ADMIN, dont les switchs et les bornes envoient leur syslog par la règle 6 de l'onglet ADMIN). Redémarre le service : sudo systemctl restart wazuh-manager.
Ce que Wazuh fait des journaux de pfSense
Le jeu de règles livré avec Wazuh contient un décodeur pf pour les lignes du programme filterlog (le journal du filtre, chapitre 5), qui en extrait l'action, le protocole, les adresses et les ports, et des règles dédiées :
| Règle | Niveau | Ce qu'elle signale |
|---|---|---|
| 87700 | 0 | Regroupe les événements du filtre de pfSense (aucune alerte) |
| 87701 | 5 | Un paquet bloqué par le pare-feu ; marquée pour ne pas produire d'alerte à chaque blocage |
| 87702 | 10 | 18 blocages en 45 secondes depuis la même adresse : balayage ou tentative d'intrusion, rattachée à la technique T1110 (force brute) de MITRE ATT&CK |
Un blocage isolé est du bruit de fond (Internet balaie en permanence le WAN) ; une rafale depuis la même source mérite une alerte. Pour vérifier le décodage, l'outil /var/ossec/bin/wazuh-logtest du serveur Wazuh accepte une ligne collée à la main et affiche le décodeur et la règle qui correspondent.
On complète avec ses propres règles, dans /var/ossec/etc/rules/local_rules.xml. Par exemple, une alerte à chaque échec de connexion à l'interface web du pare-feu, que pfSense journalise avec le message « webConfigurator authentication error » :
<group name="pfsense,local,">
<rule id="100200" level="10">
<match>webConfigurator authentication error</match>
<description>pfSense : échec de connexion à l'interface d'administration</description>
<group>authentication_failed,</group>
</rule>
</group>
Les identifiants de 100000 à 120000 sont réservés aux règles locales. Teste la règle avec wazuh-logtest, puis redémarre wazuh-manager.
Exercices
Exercice 1 sur 3 La supervision qui ne remonte rien Réussi À revoir
Après avoir ajouté pf1 dans Zabbix, l'hôte reste rouge : « No SNMP data collection ». Depuis srv-journaux, snmpget vers 192.168.10.188 ne répond pas. Le journal du pare-feu montre : Refus vers le pare-feu, 192.168.10.180:41234 -> 192.168.10.188:161 UDP.
- Explique.
- Corrige, en précisant la place de la règle.
Voir la réponseMasquer la réponse de l'exercice 1
- La requête SNMP de srv-journaux vers le pare-feu est refusée par la règle « Refus vers le pare-feu » de l'onglet SERVEURS : la règle qui l'autorise manque, ou elle est placée sous le refus, ou elle vise encore l'ancienne adresse
192.168.10.190(adresse virtuelle depuis la grappe) au lieu de SERVEURS address. - Onglet SERVEURS de
pf1(recopié surpf2) : Pass, UDP, sourceSRV_JOURNAUX, destination SERVEURS address (qui désigne.188surpf1et.189surpf2), port 161, au-dessus de la règle « Refus vers le pare-feu ». Vérifier aussi que l'agent SNMP écoute bien sur l'interface SERVEURS (Bind Interfaces) et que la communauté est la même dans pfSense et dans la macro{$SNMP_COMMUNITY}.
Tu avais trouvé ?
Exercice 2 sur 3 Rédiger les alertes du pare-feu Réussi À revoir
Propose quatre alertes à configurer pour le pare-feu de Sorbier, en précisant pour chacune l'outil (Zabbix ou Wazuh), la condition et la première action attendue.
Voir la réponseMasquer la réponse de l'exercice 2
| Alerte | Outil | Condition | Première action |
|---|---|---|---|
| Interface WAN tombée | Zabbix | État opérationnel de l'interface WAN différent de up | Vérifier la box et le lien de l'opérateur, ouvrir un ticket chez l'opérateur, prévenir les utilisateurs |
| Table d'états presque pleine | Zabbix | Taux d'occupation au-dessus de 80 % | Chercher la source (Diagnostics > States, pfTop) : charge légitime ou déni de service ; agir selon le cas |
| Rafale de blocages depuis une même adresse | Wazuh (règle 87702) | 18 blocages en 45 secondes depuis la même source | Si la source est interne : machine probablement compromise, l'isoler ; si externe : vérifier qu'aucun service n'a répondu |
| Échec de connexion à l'administration | Wazuh (règle locale 100200) | Message « webConfigurator authentication error » | Identifier la source ; hors VLAN ADMIN, c'est une anomalie de règle ou une tentative d'intrusion : corriger et ouvrir un incident |
Tu avais trouvé ?
Exercice 3 sur 3 Pourquoi Wazuh ne reçoit rien Réussi À revoir
pfSense est configuré pour envoyer ses journaux à 192.168.10.180:514. Sur srv-journaux, une capture (tcpdump -n -i ens18 udp port 514) montre bien les paquets qui arrivent depuis 192.168.10.188, mais aucun événement pfSense n'apparaît dans Wazuh. Le bloc remote contient <allowed-ips>192.168.10.190</allowed-ips>. Explique et corrige.
Voir la réponseMasquer la réponse de l'exercice 3
Depuis la mise en grappe, pf1 envoie ses journaux depuis son adresse propre de l'interface SERVEURS, 192.168.10.188, et non plus depuis 192.168.10.190, devenue l'adresse virtuelle. Wazuh n'accepte le syslog que des adresses de allowed-ips : il ignore donc les paquets. Correction : remplacer l'adresse par 192.168.10.188 et ajouter 192.168.10.189 (pour pf2), puis sudo systemctl restart wazuh-manager. Les journaux de pf2 doivent eux aussi arriver : chaque pare-feu envoie les siens.
Tu avais trouvé ?