Chapitre 718 minIntermédiaire
SNMPv3 : superviser switchs, pfSense, Proxmox et TrueNAS
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- expliquer SNMP : manager, agent, MIB, OID, interrogation et trap ;
- configurer un hôte SNMPv3 en authPriv dans Zabbix et le tester ;
- superviser un switch Cisco, pfSense et TrueNAS en SNMP ;
- superviser Proxmox VE par son API avec un jeton en lecture seule ;
- recevoir et exploiter les traps SNMP.
3 exercices corrigés1 schéma
SNMP (Simple Network Management Protocol) est le protocole standard pour superviser les équipements sur lesquels on n'installe pas d'agent : switchs, routeurs, pare-feu, NAS, onduleurs, imprimantes. Le serveur de supervision interroge l'agent SNMP intégré à l'équipement sur le port UDP 161, et l'équipement peut lui envoyer des alertes spontanées, les traps, sur le port UDP 162. Ce chapitre explique SNMP (MIB, OID, versions), configure SNMPv3 sur les switchs Cisco et dans Zabbix, puis supervise pfSense, TrueNAS et l'hyperviseur Proxmox VE, qui se supervise mieux par son API.
SNMP en cinq notions
| Notion | Définition |
|---|---|
| Manager | Le logiciel qui interroge et reçoit : ici, le serveur Zabbix (ou un proxy) |
| Agent SNMP | Le service intégré à l'équipement, qui répond aux requêtes et envoie les traps |
| OID (Object Identifier) | L'adresse d'une information, sous forme d'une suite de nombres dans un arbre : 1.3.6.1.2.1.1.5.0 est le nom de l'équipement |
| MIB (Management Information Base) | Le dictionnaire qui décrit les OID : leur nom lisible (sysName), leur type, leur sens. Les MIB standard (SNMPv2-MIB, IF-MIB, HOST-RESOURCES-MIB) sont communes à tous, chaque constructeur publie les siennes |
| Trap | Un message envoyé par l'agent de lui-même, sans requête, quand un événement survient. L'inform est un trap avec accusé de réception |
Les OID à reconnaître :
| OID | Nom (MIB) | Contenu |
|---|---|---|
1.3.6.1.2.1.1.1.0 | sysDescr (SNMPv2-MIB) | Description : modèle, système, version |
1.3.6.1.2.1.1.3.0 | sysUpTime | Durée depuis le démarrage de l'agent, en centièmes de seconde |
1.3.6.1.2.1.1.5.0 | sysName | Nom de l'équipement |
1.3.6.1.2.1.2.2.1.8.N | ifOperStatus (IF-MIB) | État du port N : 1 = up, 2 = down |
1.3.6.1.2.1.31.1.1.1.6.N | ifHCInOctets (IF-MIB) | Octets reçus par le port N, compteur 64 bits |
1.3.6.1.6.3.1.1.5.3 | linkDown | L'identifiant du trap « port tombé » (linkUp : …5.4) |
Le .0 final désigne une valeur unique (un scalaire) ; un .N désigne la ligne N d'une table, souvent le numéro du port (ifIndex).
Les opérations : get lit un OID, getnext et getbulk parcourent un sous-arbre (c'est ce que fait la commande snmpwalk), set modifie une valeur, trap et inform remontent un événement. La supervision n'a besoin que de la lecture : ne donne jamais de droit d'écriture au compte de supervision.
SNMPv1, v2c et v3
| Version | Authentification | Chiffrement | À retenir |
|---|---|---|---|
| v1 (1988) | Une « communauté », un mot transmis en clair | Aucun | Obsolète, compteurs 32 bits seulement |
| v2c | La communauté, toujours en clair | Aucun | Ajoute getbulk et les compteurs 64 bits. Encore très répandue, mais n'importe qui qui capture un paquet lit la communauté |
| v3 | Un utilisateur et un mot de passe, avec des messages signés (SHA, MD5 déconseillé) | Oui (AES, DES déconseillé) | Le seul choix acceptable aujourd'hui |
SNMPv3 définit trois niveaux de sécurité :
| Niveau | Authentification | Chiffrement | Usage |
|---|---|---|---|
noAuthNoPriv | Non (un nom d'utilisateur seul) | Non | Jamais |
authNoPriv | Oui | Non | Les valeurs circulent en clair : à éviter |
authPriv | Oui | Oui | À utiliser |
Chaque agent SNMPv3 a un identifiant unique, l'engine ID (snmpEngineID), qui entre dans le calcul des clés. Deux équipements ne doivent jamais le partager : c'est un piège quand on clone des VM ou qu'on recopie une configuration.
Configurer SNMPv3 sur un switch Cisco
La configuration des switchs de Sorbier est celle du cours Routage et commutation : un groupe en priv, un utilisateur zabbix, et les traps vers srv-journaux.
SW-ETAGE1(config)# ip access-list standard SNMP-SUPERVISION
SW-ETAGE1(config-std-nacl)# permit host 192.168.10.180
SW-ETAGE1(config-std-nacl)# exit
SW-ETAGE1(config)# snmp-server group SUPERVISION v3 priv access SNMP-SUPERVISION
SW-ETAGE1(config)# snmp-server user zabbix SUPERVISION v3 auth sha MotDePasseAuth-2026 priv aes 128 CleChiffrement-2026
SW-ETAGE1(config)# snmp-server host 192.168.10.180 version 3 priv zabbix
SW-ETAGE1(config)# snmp-server enable traps snmp linkdown linkup
SW-ETAGE1(config)# snmp-server enable traps port-security
SW-ETAGE1(config)# snmp-server location Lyon siege - local technique 1er etage
SW-ETAGE1(config)# snmp-server contact informatique@sorbier.example
- la liste d'accès
SNMP-SUPERVISIONn'autorise que srv-journaux à interroger le groupe ; - sans vue
write, le groupe est en lecture seule ; show snmp useraffiche l'utilisateur, ses protocoles et l'engine ID local (aussi visible avecshow snmp engineID) ; le mot de passe n'apparaît pas dans la configuration.
Tester avant de configurer Zabbix
Sur srv-journaux, installe les outils SNMP (sudo apt install snmp) et interroge le switch :
snmpget -v3 -l authPriv -u zabbix -a SHA -A 'MotDePasseAuth-2026' -x AES -X 'CleChiffrement-2026' \
192.168.10.211 1.3.6.1.2.1.1.5.0 1.3.6.1.2.1.1.3.0
snmpwalk -v3 -l authPriv -u zabbix -a SHA -A 'MotDePasseAuth-2026' -x AES -X 'CleChiffrement-2026' \
192.168.10.211 1.3.6.1.2.1.2.2.1.8
La première commande renvoie le nom et la durée de fonctionnement, la seconde l'état de chaque port. Sous Debian, les MIB des constructeurs ne sont pas installées : les résultats s'affichent avec les OID numériques, ce qui ne gêne pas Zabbix.
| Réponse | Signification |
|---|---|
Timeout: No Response from 192.168.10.211 | Rien ne revient : port 161 filtré, ACL du switch qui refuse la source, mauvaise adresse, ou mauvais niveau de sécurité |
snmpget: Authentication failure (incorrect password, community or key) | Mot de passe d'authentification ou protocole (SHA/MD5) faux |
snmpget: Unknown user name | Utilisateur inconnu de l'agent |
Decryption error | Phrase ou protocole de chiffrement faux |
Créer l'hôte SNMPv3 dans Zabbix
Pour ne pas écrire les mots de passe sur chaque hôte, définis-les une fois en macros secrètes : Administration > Macros, {$SNMPV3.USER} = zabbix, {$SNMPV3.AUTH} et {$SNMPV3.PRIV} de type Secret text. Puis Data collection > Hosts > Create host :
| Champ | Valeur |
|---|---|
| Host name | SW-ETAGE1 |
| Templates | Cisco IOS by SNMP |
| Host groups | Réseau/Switchs |
| Interfaces | Add > SNMP : IP 192.168.10.211, port 161 |
| SNMP version | SNMPv3 |
| Context name | vide |
| Security name | {$SNMPV3.USER} |
| Security level | authPriv |
| Authentication protocol | SHA1 (le sha de Cisco) |
| Authentication passphrase | {$SNMPV3.AUTH} |
| Privacy protocol | AES128 (le aes 128 de Cisco) |
| Privacy passphrase | {$SNMPV3.PRIV} |
Les protocoles doivent correspondre exactement à ceux de l'équipement. Zabbix propose aussi SHA224 à SHA512 et AES192 ou AES256 : utilise-les si l'équipement les accepte, et note que AES192C et AES256C sont des variantes propres à Cisco. L'icône SNMP de la colonne Availability passe au vert dès la première réponse.
Le modèle Cisco IOS by SNMP collecte la durée de fonctionnement, le processeur, la mémoire, la température quand le matériel la publie, et découvre chaque interface : état, débit entrant et sortant, erreurs, rejets. Ses déclencheurs signalent un redémarrage, un port qui tombe (s'il était actif et que la macro {$IFCONTROL} vaut 1), une interface utilisée à plus de 90 % ({$IF.UTIL.MAX}), des erreurs en hausse. Pour un switch d'une autre marque, prends le modèle du constructeur s'il existe, sinon Network Generic Device by SNMP. Les modèles de Zabbix 7.0 collectent chaque table en une seule requête groupée (élément walk[…]) dont ils extraient ensuite chaque valeur : c'est léger pour l'équipement.
Superviser pfSense
pfSense propose deux façons d'être interrogé en SNMP, avec un compromis à connaître (le cours pfSense montre le même réglage côté pare-feu : superviser pfSense avec Zabbix).
Démon intégré (bsnmpd) | Paquet net-snmp | |
|---|---|---|
| Où | Services > SNMP | System > Package Manager > Available Packages, paquet net-snmp |
| Versions | Accès par communauté (v1, v2c) dans l'interface | SNMPv3 avec utilisateurs, authentification et chiffrement |
| Données | MIB standard et module PF : table d'états, raisons des blocages | MIB standard (interfaces, processeur, mémoire, disques), sans les compteurs propres au filtrage |
| Modèle Zabbix | PFSense by SNMP (tout fonctionne) | Network Generic Device by SNMP ou Linux by SNMP pour l'essentiel |
Avec le démon intégré, dans Services > SNMP : coche Enable, renseigne System location et System contact, remplace la Read Community String public par une chaîne longue et aléatoire, coche les modules MibII, Host Resources et PF, et dans Interface Binding limite l'écoute à l'interface SERVEURS (192.168.10.190). Ajoute sur l'interface SERVEURS une règle qui n'autorise que 192.168.10.180 vers This Firewall, UDP 161. Le modèle PFSense by SNMP donne alors l'utilisation de la table d'états ({$STATE.TABLE.UTIL.MAX}), les paquets bloqués par motif, le trafic de chaque interface.
Avec net-snmp, pour respecter une politique « SNMPv3 partout » : désactive d'abord le démon intégré (Enable décoché dans Services > SNMP : les deux ne peuvent pas écouter tous les deux sur UDP 161), installe le paquet, puis dans sa page de configuration crée un utilisateur SNMPv3 en lecture seule avec authentification SHA et chiffrement AES, et limite l'écoute à l'interface SERVEURS. Côté Zabbix, l'hôte reçoit une interface SNMPv3 comme un switch.
Chez Sorbier, la politique de sécurité impose SNMPv3 : l'équipe choisit net-snmp, et complète par ce que pfSense surveille déjà lui-même (Status > Gateways pour la latence et les pertes des passerelles, Status > Monitoring pour ses propres graphiques). Sur une maquette d'E6, le démon intégré avec une communauté forte, limité à une interface et à une adresse source, est défendable si tu sais expliquer le risque : la communauté circule en clair, mais uniquement dans le VLAN des serveurs.
Enfin, ajoute à l'hôte pfsense le modèle ICMP Ping : le pare-feu est la passerelle de tous les VLAN, c'est l'équipement dont la panne a le plus d'effets (dépendances, chapitre 9).
Superviser Proxmox VE par son API
Un hyperviseur Proxmox VE est un Debian : on pourrait y mettre l'agent 2. Mais ce qui intéresse l'exploitation, c'est la vue du cluster : l'état des nœuds, la charge de chaque VM, l'occupation des banques de stockage. Le modèle officiel Proxmox VE by HTTP la lit dans l'API REST de Proxmox, en HTTPS sur le port 8006, avec un jeton d'API en lecture seule.
Sur un nœud du cluster, en ligne de commande :
pveum user add zabbix@pve --comment "Supervision Zabbix (lecture seule)"
pveum acl modify / --users zabbix@pve --roles PVEAuditor
pveum user token add zabbix@pve supervision --privsep 1
pveum acl modify / --tokens 'zabbix@pve!supervision' --roles PVEAuditor
zabbix@pveest un compte du domaine d'authentification interne de Proxmox, sans mot de passe utile : on ne s'en sert que par son jeton ;- le rôle prédéfini
PVEAuditordonne la lecture (Sys.Audit,VM.Audit,Datastore.Audit…) et aucun droit de modification : exactement ce que demande le modèle ; - avec
--privsep 1, le jeton a ses propres droits, d'où la seconde ligneacl modify; - la commande
token addaffiche l'identifiant complet (zabbix@pve!supervision) et le secret, une seule fois : copie-le aussitôt.
Les mêmes réglages se font dans l'interface web : Datacenter > Permissions > Users, Datacenter > Permissions > API Tokens, Datacenter > Permissions (bouton Add). Dans Zabbix, crée un hôte pve-cluster avec le modèle Proxmox VE by HTTP et les macros {$PVE.URL.HOST} (l'adresse de gestion d'un nœud), {$PVE.TOKEN.ID} = zabbix@pve!supervision et {$PVE.TOKEN.SECRET} (type Secret text). Le port est 8006 par défaut ({$PVE.URL.PORT}).
Superviser TrueNAS
TrueNAS Community Edition (le nom de TrueNAS SCALE depuis la version 25.04) fournit un service SNMP basé sur net-snmp : System > Services, ligne SNMP, bouton de modification. Active la prise en charge de SNMPv3, crée l'utilisateur avec l'authentification SHA et le chiffrement AES, coche le démarrage automatique et démarre le service. Comme le système est un Debian, le modèle Linux by SNMP de Zabbix fournit le processeur, la mémoire, les interfaces et les volumes. Le modèle officiel TrueNAS CORE by SNMP vise l'ancienne édition CORE (FreeBSD) : il ne s'applique pas à l'édition Community. Pour l'état des pools ZFS, des disques et des réplications, TrueNAS produit aussi ses propres alertes, qu'il sait envoyer par courriel : garde-les actives en complément (superviser et maintenir un NAS dans le cours sur le stockage).
Recevoir les traps
Les traps réduisent le délai de détection d'un événement à quelques secondes, au lieu d'un intervalle d'interrogation. Leur réception demande un petit montage sur srv-journaux : le démon snmptrapd reçoit les traps, un script les écrit dans un fichier, et le serveur Zabbix lit ce fichier.
-
Installe le démon et le module Perl :
sudo apt install snmptrapd libsnmp-perl. -
Récupère le script
zabbix_trap_receiver.pldans les sources de Zabbix 7.0 (dossiermisc/snmptrap/), copie-le dans/usr/local/bin/, et règle sa variable$SNMPTrapperFilesur/var/log/zabbix/zabbix_traps.log. -
Dans
/etc/snmp/snmptrapd.conf, déclare l'utilisateur SNMPv3 avec l'engine ID de l'équipement qui envoie (lu avecshow snmp engineID) et branche le script :createUser -e 0x800000090300AABBCCDDEE01 zabbix SHA MotDePasseAuth-2026 AES CleChiffrement-2026 authUser log,execute zabbix perl do "/usr/local/bin/zabbix_trap_receiver.pl";Une ligne
createUserpar équipement, puisque chacun a son engine ID. Redémarre :sudo systemctl restart snmptrapd. -
Dans
/etc/zabbix/zabbix_server.conf:StartSNMPTrapper=1etSNMPTrapperFile=/var/log/zabbix/zabbix_traps.log, puis redémarre le serveur. -
Dans Zabbix, le trap est rattaché à l'hôte dont l'interface SNMP a l'adresse source du trap. Les modèles réseau contiennent un élément
snmptrap.fallback(type SNMP trap, information Log) qui recueille tous les traps de l'hôte ; un élémentsnmptrap["regexp"]ne garde que ceux qui correspondent à une expression, par exemplesnmptrap["1\.3\.6\.1\.6\.3\.1\.1\.5\.3"]pourlinkDown.
Un déclencheur sur un trap n'a pas d'état « résolu » naturel : règle OK event generation sur None et coche Allow manual close, ou crée un déclencheur qui se résout à la réception du trap linkUp. Pense aussi à la rotation du fichier de traps (logrotate), qui grossit sans fin.
Exercices
Exercice 1 sur 3 Lire une configuration SNMP Réussi À revoir
Un audit relève sur un switch :
snmp-server community Sorbier2019 RW
snmp-server host 192.168.10.180 version 2c Sorbier2019
- Quels sont les deux défauts de sécurité ?
- Écris la configuration de remplacement.
- Qu'est-ce qui change dans l'hôte Zabbix ?
Voir la réponseMasquer la réponse de l'exercice 1
-
SNMP v2c : la communauté
Sorbier2019circule en clair dans chaque paquet, n'importe qui qui capture le trafic la lit. Et elle est en lecture-écriture (RW), sans restriction de source : quiconque la connaît peut modifier la configuration du switch, par exemple couper un port. -
La configuration de remplacement :
no snmp-server community Sorbier2019 RW ip access-list standard SNMP-SUPERVISION permit host 192.168.10.180 snmp-server group SUPERVISION v3 priv access SNMP-SUPERVISION snmp-server user zabbix SUPERVISION v3 auth sha <mot de passe long> priv aes 128 <clé longue> snmp-server host 192.168.10.180 version 3 priv zabbixPuis supprimer l'ancienne destination de traps (
no snmp-server host 192.168.10.180 version 2c Sorbier2019). -
L'interface SNMP de l'hôte passe en SNMPv3 : Security name
zabbix, Security levelauthPriv,SHA1etAES128, avec les deux phrases (de préférence en macros secrètes). Côté traps,snmptrapddoit connaître l'utilisateur avec l'engine ID du switch.
Tu avais trouvé ?
Exercice 2 sur 3 Diagnostiquer une interface SNMP rouge Réussi À revoir
L'hôte SW-ETAGE2 (192.168.10.212) affiche l'icône SNMP en rouge. Depuis srv-journaux, snmpget -v3 -l authPriv -u zabbix -a SHA -A '…' -x AES -X '…' 192.168.10.212 1.3.6.1.2.1.1.5.0 répond Timeout: No Response from 192.168.10.212. Le même test vers 192.168.10.211 fonctionne.
- Quelles causes peux-tu écarter grâce au second test ?
- Quelles causes restent, et comment les vérifier ?
Voir la réponseMasquer la réponse de l'exercice 2
- Le serveur, les outils, les mots de passe communs et la règle de pfSense en général fonctionnent : le flux vers
.211passe. Le problème est propre à SW-ETAGE2 ou au chemin vers lui. - Restent :
- SW-ETAGE2 injoignable :
ping 192.168.10.212(si ICMP est autorisé), état dans Monitoring > Hosts ; - l'alias
GESTION_EQUIPEMENTSde pfSense ne contient pas.212: regarder Status > System Logs > Firewall, filtré sur la destination ; - SNMP non configuré sur SW-ETAGE2, ou ACL
SNMP-SUPERVISIONabsente ou fausse :show snmp user,show running-config | include snmp,show access-lists SNMP-SUPERVISION(les compteurs de correspondance montrent si les requêtes arrivent et sont refusées).
Authentication failure, pas un timeout : l'absence totale de réponse oriente vers le réseau, le filtrage ou un agent SNMP inactif. - SW-ETAGE2 injoignable :
Tu avais trouvé ?
Exercice 3 sur 3 Proxmox en lecture seule Réussi À revoir
Un collègue propose de superviser Proxmox VE avec le compte root@pam et son mot de passe, « c'est plus simple ».
- Quels risques cela crée-t-il ?
- Que proposes-tu, et pourquoi le rôle
PVEAuditor? - Le jeton est enregistré dans Zabbix, mais aucune donnée n'arrive. Le dernier message de l'élément principal dit que la vérification du certificat a échoué. Que fais-tu ?
Voir la réponseMasquer la réponse de l'exercice 3
- Le mot de passe de l'administrateur suprême de l'hyperviseur serait stocké dans Zabbix : quiconque compromet Zabbix (ou lit ses macros) peut supprimer toutes les VM. Et un changement de ce mot de passe casserait la supervision.
- Un compte dédié
zabbix@pveet un jeton d'API à privilèges séparés, avec le rôlePVEAuditorsur/: il lit l'état des nœuds, des VM et du stockage mais ne peut rien modifier. Le jeton se révoque seul, sans toucher aux autres comptes. C'est le moindre privilège. - Le certificat de Proxmox n'est pas reconnu par srv-journaux (certificat autosigné). Installer sur les nœuds un certificat émis par l'autorité de certification interne, et ajouter le certificat de cette autorité aux autorités de confiance de srv-journaux (
/usr/local/share/ca-certificates/, puissudo update-ca-certificates). Désactiver la vérification ({$HTTP.TLS.VERIFY}ànone) n'est qu'un contournement de maquette.
Tu avais trouvé ?