Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

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éesDes nombres mesurés à intervalle régulier : charge, mémoire, états, débitsDes événements datés : connexions refusées, connexions VPN, échecs d'authentification, alertes Suricata
Outil chez SorbierZabbix (collecte, seuils, alertes) et Grafana (tableaux de bord), sur srv-journaux 192.168.10.180Wazuh (collecte, décodage, règles, alertes, tableau de bord), sur le même srv-journaux 192.168.10.180
ProtocoleSNMP (UDP 161), interrogé par ZabbixSyslog (UDP 514), envoyé par pfSense
Cours de référenceSupervisionWazuh et Cybersécurité des infrastructures
srv-journaux : supervision192.168.10.180Zabbixseuils, alertesGrafanatableauxAPIpf1192.168.10.188agent SNMPenvoi sysloginterrogation SNMP, UDP 161srv-journaux : SIEM192.168.10.180Wazuhdécode, applique ses règles, alerteenvoi syslog, UDP 514deux flux internesau VLAN SERVEURS
Zabbix interroge pfSense en SNMP, pfSense pousse ses journaux à Wazuh en syslog

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 :

SectionChampValeur chez Sorbier
SNMP DaemonEnableCoché
Polling Port161
System locationSiège Sorbier, baie serveur
System contactL'adresse de l'équipe informatique
Read Community StringUne chaîne longue et aléatoire, jamais public
SNMP TrapsEnableFacultatif ; Zabbix interroge déjà régulièrement
ModulesMibII, PF, Host Resources, UCDMibII : 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 BindingBind InterfacesSERVEURS : 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 :

bash
# 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 :

ChampValeur
Host namepf1
TemplatesPFSense by SNMP
Host groupsPare-feu
InterfacesAdd > 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 :

MesureCe qu'elle surveille
État du filtre pfLe pare-feu filtre-t-il encore ?
Nombre d'états, limite, taux d'occupation de la table d'étatsUne 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 webLes services rendus par le pare-feu
Débit entrant et sortant, erreurs, rejets et état de chaque interfaceSaturation du lien Internet, câble ou carte défaillants, interface tombée
Trafic autorisé et bloqué par interfaceUn pic de trafic bloqué peut signaler un balayage ou une attaque
Nombre de règlesUn 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 :

bash
# 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 :

ChampValeur
Send log messages to remote syslog serverCoché
Source AddressSERVEURS : les journaux partent de l'adresse SERVEURS du pare-feu
IP ProtocolIPv4
Remote log servers192.168.10.180:514
Remote Syslog ContentsFirewall 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 :

xml
<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ègleNiveauCe qu'elle signale
877000Regroupe les événements du filtre de pfSense (aucune alerte)
877015Un paquet bloqué par le pare-feu ; marquée pour ne pas produire d'alerte à chaque blocage
877021018 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 » :

xml
<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.

  1. Explique.
  2. Corrige, en précisant la place de la règle.
Voir la réponseMasquer la réponse de l'exercice 1
  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.
  2. Onglet SERVEURS de pf1 (recopié sur pf2) : Pass, UDP, source SRV_JOURNAUX, destination SERVEURS address (qui désigne .188 sur pf1 et .189 sur pf2), 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
AlerteOutilConditionPremière action
Interface WAN tombéeZabbixÉtat opérationnel de l'interface WAN différent de upVé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 pleineZabbixTaux 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 adresseWazuh (règle 87702)18 blocages en 45 secondes depuis la même sourceSi la source est interne : machine probablement compromise, l'isoler ; si externe : vérifier qu'aucun service n'a répondu
Échec de connexion à l'administrationWazuh (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é ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Exercices corrigés pfSense type E6 et E7 SISRRevoir le sommaire du cours