Aller au contenu
Réussir mon BTS SIO

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

Par exemple

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

NotionDéfinition
ManagerLe logiciel qui interroge et reçoit : ici, le serveur Zabbix (ou un proxy)
Agent SNMPLe 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
TrapUn 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
Interrogation, à intervalle régulierServeur ZabbixmanagerSwitchagent SNMPget, UDP 161réponse : 2 (down)1.3.6.1.2.1.2.2.1.8.3ifOperStatus du port 3trap linkDown, UDP 162envoyé par le switch dès la coupure,sans requête du serveurArbre des OID1 iso3 org6 dod1 internet2 mgmt1 mib-21 system1 sysDescr3 sysUpTime5 sysName2 interfaces4 private1 enterprises9 cisco
SNMP : le manager interroge sur UDP 161, l'équipement prévient sur UDP 162 ; chaque information a son OID

Les OID à reconnaître :

OIDNom (MIB)Contenu
1.3.6.1.2.1.1.1.0sysDescr (SNMPv2-MIB)Description : modèle, système, version
1.3.6.1.2.1.1.3.0sysUpTimeDurée depuis le démarrage de l'agent, en centièmes de seconde
1.3.6.1.2.1.1.5.0sysNameNom de l'équipement
1.3.6.1.2.1.2.2.1.8.NifOperStatus (IF-MIB)État du port N : 1 = up, 2 = down
1.3.6.1.2.1.31.1.1.1.6.NifHCInOctets (IF-MIB)Octets reçus par le port N, compteur 64 bits
1.3.6.1.6.3.1.1.5.3linkDownL'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

VersionAuthentificationChiffrementÀ retenir
v1 (1988)Une « communauté », un mot transmis en clairAucunObsolète, compteurs 32 bits seulement
v2cLa communauté, toujours en clairAucunAjoute getbulk et les compteurs 64 bits. Encore très répandue, mais n'importe qui qui capture un paquet lit la communauté
v3Un 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é :

NiveauAuthentificationChiffrementUsage
noAuthNoPrivNon (un nom d'utilisateur seul)NonJamais
authNoPrivOuiNonLes valeurs circulent en clair : à éviter
authPrivOuiOuiÀ 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.

text
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-SUPERVISION n'autorise que srv-journaux à interroger le groupe ;
  • sans vue write, le groupe est en lecture seule ;
  • show snmp user affiche l'utilisateur, ses protocoles et l'engine ID local (aussi visible avec show 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 :

bash
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éponseSignification
Timeout: No Response from 192.168.10.211Rien 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 nameUtilisateur inconnu de l'agent
Decryption errorPhrase 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 :

ChampValeur
Host nameSW-ETAGE1
TemplatesCisco IOS by SNMP
Host groupsRéseau/Switchs
InterfacesAdd > SNMP : IP 192.168.10.211, port 161
SNMP versionSNMPv3
Context namevide
Security name{$SNMPV3.USER}
Security levelauthPriv
Authentication protocolSHA1 (le sha de Cisco)
Authentication passphrase{$SNMPV3.AUTH}
Privacy protocolAES128 (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 > SNMPSystem > Package Manager > Available Packages, paquet net-snmp
VersionsAccès par communauté (v1, v2c) dans l'interfaceSNMPv3 avec utilisateurs, authentification et chiffrement
DonnéesMIB standard et module PF : table d'états, raisons des blocagesMIB standard (interfaces, processeur, mémoire, disques), sans les compteurs propres au filtrage
Modèle ZabbixPFSense 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 :

bash
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@pve est 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 PVEAuditor donne 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 ligne acl modify ;
  • la commande token add affiche 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.

  1. Installe le démon et le module Perl : sudo apt install snmptrapd libsnmp-perl.

  2. Récupère le script zabbix_trap_receiver.pl dans les sources de Zabbix 7.0 (dossier misc/snmptrap/), copie-le dans /usr/local/bin/, et règle sa variable $SNMPTrapperFile sur /var/log/zabbix/zabbix_traps.log.

  3. Dans /etc/snmp/snmptrapd.conf, déclare l'utilisateur SNMPv3 avec l'engine ID de l'équipement qui envoie (lu avec show snmp engineID) et branche le script :

    text
    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 createUser par équipement, puisque chacun a son engine ID. Redémarre : sudo systemctl restart snmptrapd.

  4. Dans /etc/zabbix/zabbix_server.conf : StartSNMPTrapper=1 et SNMPTrapperFile=/var/log/zabbix/zabbix_traps.log, puis redémarre le serveur.

  5. 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ément snmptrap["regexp"] ne garde que ceux qui correspondent à une expression, par exemple snmptrap["1\.3\.6\.1\.6\.3\.1\.1\.5\.3"] pour linkDown.

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 :

text
snmp-server community Sorbier2019 RW
snmp-server host 192.168.10.180 version 2c Sorbier2019
  1. Quels sont les deux défauts de sécurité ?
  2. Écris la configuration de remplacement.
  3. Qu'est-ce qui change dans l'hôte Zabbix ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. SNMP v2c : la communauté Sorbier2019 circule 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.

  2. La configuration de remplacement :

    text
    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 zabbix
    

    Puis supprimer l'ancienne destination de traps (no snmp-server host 192.168.10.180 version 2c Sorbier2019).

  3. L'interface SNMP de l'hôte passe en SNMPv3 : Security name zabbix, Security level authPriv, SHA1 et AES128, avec les deux phrases (de préférence en macros secrètes). Côté traps, snmptrapd doit 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.

  1. Quelles causes peux-tu écarter grâce au second test ?
  2. Quelles causes restent, et comment les vérifier ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. Le serveur, les outils, les mots de passe communs et la règle de pfSense en général fonctionnent : le flux vers .211 passe. Le problème est propre à SW-ETAGE2 ou au chemin vers lui.
  2. Restent :
    • SW-ETAGE2 injoignable : ping 192.168.10.212 (si ICMP est autorisé), état dans Monitoring > Hosts ;
    • l'alias GESTION_EQUIPEMENTS de pfSense ne contient pas .212 : regarder Status > System Logs > Firewall, filtré sur la destination ;
    • SNMP non configuré sur SW-ETAGE2, ou ACL SNMP-SUPERVISION absente 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).
    Un mauvais mot de passe aurait donné Authentication failure, pas un timeout : l'absence totale de réponse oriente vers le réseau, le filtrage ou un agent SNMP inactif.

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

  1. Quels risques cela crée-t-il ?
  2. Que proposes-tu, et pourquoi le rôle PVEAuditor ?
  3. 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
  1. 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.
  2. Un compte dédié zabbix@pve et un jeton d'API à privilèges séparés, avec le rôle PVEAuditor sur / : 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.
  3. 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/, puis sudo update-ca-certificates). Désactiver la vérification ({$HTTP.TLS.VERIFY} à none) n'est qu'un contournement de maquette.

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 : Scénarios web, découverte réseau et cartesRevoir le sommaire du cours