Chapitre 1315 minIntermédiaire
SNMPv3 et syslog : superviser les équipements réseau
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- expliquer le modèle de SNMP et lire un OID ;
- choisir la version et le niveau de sécurité de SNMP ;
- configurer SNMPv3 sur un serveur Debian et sur un switch Cisco ;
- centraliser les journaux avec syslog et rsyslog.
4 exercices corrigés1 schéma
SNMP (Simple Network Management Protocol) permet à un serveur de supervision d'interroger les équipements du réseau (switchs, routeurs, pare-feu, serveurs, onduleurs, imprimantes) sur leur état, et à ces équipements de lui signaler eux-mêmes un problème. SNMPv3, la seule version à utiliser aujourd'hui, authentifie et chiffre ces échanges. Syslog est le protocole avec lequel les équipements envoient leurs journaux à un serveur central. Ce chapitre explique le modèle de SNMP (gestionnaire, agent, MIB, OID), ses versions et leurs niveaux de sécurité, la configuration de SNMPv3 sous Debian et sur Cisco, puis la centralisation des journaux par syslog.
Gestionnaire, agent, MIB
| Élément | Rôle | Chez Sorbier |
|---|---|---|
| Gestionnaire (manager) | Interroge les équipements et reçoit leurs alertes | Le serveur de supervision Zabbix, sur srv-journaux (192.168.10.180) |
| Agent | Logiciel de l'équipement qui répond aux questions et envoie les alertes | Intégré aux switchs Cisco, à l'onduleur, aux imprimantes ; snmpd sur les serveurs Linux |
| MIB (Management Information Base) | La description des informations disponibles, rangées en arbre | MIB standard (interfaces, système) et MIB des constructeurs |
| OID (Object Identifier) | L'adresse d'une information dans l'arbre, en chiffres séparés par des points | 1.3.6.1.2.1.1.5.0, le nom de l'équipement |
L'arbre des OID est mondial. Sa branche la plus utilisée commence par 1.3.6.1 (iso.org.dod.internet), puis se sépare en .2.1 (mib-2, les informations standard, communes à tous les constructeurs) et .4.1 (enterprises, une branche par constructeur : 9 pour Cisco).
| OID | Nom | Contenu |
|---|---|---|
1.3.6.1.2.1.1.1.0 | sysDescr.0 | La description de l'équipement (modèle, version du système) |
1.3.6.1.2.1.1.3.0 | sysUpTime.0 | Le temps depuis le démarrage de l'agent, en centièmes de seconde |
1.3.6.1.2.1.1.5.0 | sysName.0 | Le nom de l'équipement |
1.3.6.1.2.1.2.2.1.8 | ifOperStatus | L'état de chaque interface : 1 = up, 2 = down |
1.3.6.1.2.1.31.1.1.1.6 | ifHCInOctets | Les octets reçus par interface, sur un compteur de 64 bits |
Le .0 final désigne l'unique valeur d'une information simple. Pour une information présente plusieurs fois (une ligne par interface), l'OID se termine par le numéro de l'interface : ifOperStatus.3.
Les opérations et les ports
| Opération | Sens | Port |
|---|---|---|
| GET | Le gestionnaire demande une valeur précise | UDP 161 de l'agent |
| GETNEXT | Il demande la valeur suivante dans l'arbre : c'est ainsi qu'on parcourt une table (snmpwalk) | UDP 161 |
| GETBULK (v2c et v3) | Il demande d'un coup un grand nombre de valeurs suivantes | UDP 161 |
| SET | Il modifie une valeur (désactiver une interface) : à interdire sauf besoin précis | UDP 161 |
| TRAP | L'agent signale un événement, sans accusé de réception | UDP 162 du gestionnaire |
| INFORM (v2c et v3) | Comme un trap, mais le gestionnaire accuse réception : l'agent réessaie sinon | UDP 162 |
La supervision combine les deux sens : le sondage (polling) régulier, toutes les minutes par exemple, pour les mesures (débit, charge), et les notifications pour être prévenu immédiatement d'un événement (une interface qui tombe, une alimentation en panne). La conception des tableaux de bord, des seuils et des alertes dans Zabbix et Grafana est le sujet du cours Supervision.
SNMPv1, v2c et v3
| Version | Authentification | Chiffrement | Verdict |
|---|---|---|---|
| v1 | Une communauté (un mot de passe partagé), en clair | Aucun | Obsolète |
| v2c | Communauté en clair ; apporte GETBULK, INFORM et les compteurs 64 bits | Aucun | Encore partout, à remplacer : n'importe qui sur le chemin lit la communauté |
| v3 | Par utilisateur, avec un code d'authentification des messages (HMAC SHA) | AES possible | La seule version à déployer |
SNMPv3 définit trois niveaux de sécurité :
| Niveau | Authentification | Chiffrement | Usage |
|---|---|---|---|
noAuthNoPriv | Non (seulement un nom d'utilisateur) | Non | À éviter |
authNoPriv | Oui | Non | Les valeurs circulent en clair |
authPriv | Oui | Oui | Le niveau à utiliser |
Pour l'authentification, préfère SHA-256 (ou SHA-512) quand les deux côtés le gèrent, sinon SHA-1 ; jamais MD5. Pour le chiffrement, AES (128 bits, la norme) ; jamais DES. Les deux phrases secrètes (authentification et chiffrement) font au moins 8 caractères, mais prends-les longues et différentes. Les droits de chaque utilisateur sont limités par des vues (VACM) : la liste des branches de l'arbre qu'il peut lire.
SNMPv3 sur un serveur Debian 13
Sur srv-intranet, l'agent Net-SNMP (version 5.9.4) :
sudo apt install snmpd snmp
sudo systemctl stop snmpd
# Créer l'utilisateur en lecture seule, SHA-256 et AES ; le script demande les deux phrases secrètes
sudo net-snmp-create-v3-user -ro -a SHA-256 -x AES zabbix
Le script écrit l'utilisateur dans le fichier persistant de l'agent (/var/lib/snmp/snmpd.conf) ; au démarrage, snmpd remplace les phrases secrètes par des clés dérivées. Dans /etc/snmp/snmpd.conf, il reste à :
# Écouter sur l'adresse du serveur (par défaut : 127.0.0.1 et [::1] seulement)
agentaddress udp:127.0.0.1:161,udp:192.168.21.10:161
# Supprimer les accès par communauté fournis par défaut
#rocommunity public default -V systemonly
#rocommunity6 public default -V systemonly
sudo systemctl start snmpd
# Depuis srv-journaux : interroger le nom de l'équipement, puis la table des interfaces
snmpget -v3 -l authPriv -u zabbix -a SHA-256 -A 'PhraseAuth' -x AES -X 'PhrasePriv' 192.168.21.10 1.3.6.1.2.1.1.5.0
snmpwalk -v3 -l authPriv -u zabbix -a SHA-256 -A 'PhraseAuth' -x AES -X 'PhrasePriv' 192.168.21.10 1.3.6.1.2.1.2.2.1.2
La première commande doit renvoyer le nom de la machine (STRING: srv-intranet). Une erreur Authentication failure signale une mauvaise phrase d'authentification ou un mauvais algorithme ; un Timeout signale un agent qui n'écoute pas sur cette adresse, ou un pare-feu qui bloque UDP 161.
SNMPv3 sur un switch Cisco
SW-COEUR(config)# ip access-list standard ACL-SUPERV
SW-COEUR(config-std-nacl)# permit host 192.168.10.180
SW-COEUR(config)# snmp-server view VUE-LECTURE iso included
SW-COEUR(config)# snmp-server group GRP-SUPERV v3 priv read VUE-LECTURE access ACL-SUPERV
SW-COEUR(config)# snmp-server user zabbix GRP-SUPERV v3 auth sha PhraseAuth priv aes 128 PhrasePriv
SW-COEUR(config)# snmp-server host 192.168.10.180 version 3 priv zabbix
SW-COEUR(config)# snmp-server enable traps snmp linkdown linkup
Le groupe fixe le niveau de sécurité (priv = authPriv), la vue en lecture et l'ACL des adresses autorisées ; l'utilisateur porte les phrases secrètes. La commande snmp-server host envoie les traps à Zabbix. Attention : auth sha désigne SHA-1. Sur les versions d'IOS XE qui proposent SHA-2 pour SNMPv3, choisis-le (l'aide ? après auth liste les algorithmes de ton modèle). Les utilisateurs SNMPv3 n'apparaissent pas dans la configuration affichée par show running-config : show snmp user les liste. La sécurisation complète de l'administration des équipements Cisco est dans le cours Routage et commutation.
Et les autres équipements ?
| Équipement | SNMP |
|---|---|
| Serveurs Windows | Le service SNMP de Windows ne gère que v1 et v2c et Microsoft le déclare obsolète : on supervise Windows avec l'agent de l'outil de supervision (agent Zabbix) |
| pfSense | Le service intégré (Services > SNMP, démon bsnmpd) fonctionne par communauté ; le paquet NET-SNMP apporte SNMPv3. On utilise aussi souvent le paquet de l'agent Zabbix |
| Onduleurs, imprimantes, NAS | SNMP est souvent leur seul moyen d'être supervisés : choisis du matériel qui gère SNMPv3 |
| Proxmox VE, TrueNAS | Agent SNMP disponible, mais l'API ou l'agent de supervision donnent plus d'informations |
Syslog : centraliser les journaux
Syslog est le format et le protocole d'envoi des journaux des équipements réseau et des systèmes Unix. Chaque message porte une origine (facility : noyau, authentification, messagerie, ou local0 à local7 pour les équipements), une gravité (severity) de 0 à 7, un horodatage, le nom de l'équipement et le texte.
| Gravité | Nom | Exemple |
|---|---|---|
| 0 | Emergency | Le système est inutilisable |
| 1 | Alert | Action immédiate nécessaire |
| 2 | Critical | Panne d'un composant matériel |
| 3 | Error | Erreur d'un service |
| 4 | Warning | Avertissement : un disque à 90 % |
| 5 | Notice | Événement normal mais notable : une interface qui change d'état |
| 6 | Informational | Information : une connexion réussie |
| 7 | Debug | Détail de débogage |
Un niveau de journalisation inclut tous les niveaux plus graves : régler un équipement sur informational (6) envoie les messages de 0 à 6, sans le débogage.
| Transport | Port | Remarque |
|---|---|---|
| UDP | 514 | Historique, sans accusé de réception : des messages se perdent sans que personne le sache |
| TCP | 514 (usage courant) | Fiable, mais en clair |
| TLS | TCP 6514 (RFC 5425) | Fiable et chiffré : le choix pour les flux qui traversent des zones, comme depuis la DMZ |
Chez Sorbier, srv-journaux (192.168.10.180) reçoit les journaux des switchs, du pare-feu et des serveurs Linux. Sur un switch Cisco :
SW-COEUR(config)# service timestamps log datetime msec localtime
SW-COEUR(config)# logging source-interface Vlan99
SW-COEUR(config)# logging host 192.168.10.180
SW-COEUR(config)# logging trap informational
Sur pfSense, Status > System Logs > Settings, rubrique Remote Logging Options : coche Enable Remote Logging et indique 192.168.10.180:514 dans Remote log servers (le cours pfSense montre la suite côté Wazuh : superviser pfSense et envoyer ses journaux).
Sous Debian 13, les journaux sont gérés par journald ; pour les envoyer à un serveur syslog, installe rsyslog :
# /etc/rsyslog.d/90-central.conf, sur les serveurs qui envoient
*.* action(type="omfwd" target="192.168.10.180" port="514" protocol="tcp"
queue.type="LinkedList" queue.filename="central" action.resumeRetryCount="-1")
# /etc/rsyslog.d/10-reception.conf, sur srv-journaux
# Les switchs et pfSense envoient en UDP 514 par défaut, les serveurs Linux en TCP 514
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
template(name="ParHote" type="string" string="/var/log/central/%HOSTNAME%/%PROGRAMNAME%.log")
if $fromhost-ip != "127.0.0.1" then {
action(type="omfile" dynaFile="ParHote")
stop
}
La file d'attente sur disque (queue.filename) garde les messages si srv-journaux est injoignable, et action.resumeRetryCount="-1" fait réessayer indéfiniment. Vérifie la syntaxe avec rsyslogd -N1 avant de redémarrer le service. Pour les flux qui traversent le pare-feu, comme ceux de la DMZ, Sorbier utilise syslog sur TLS, en TCP 6514 (matrice des flux du cours Cybersécurité des infrastructures).
Les journaux de Windows ne sont pas au format syslog : on les centralise par le transfert d'événements Windows (cours Windows Server) ou par l'agent d'un SIEM. L'analyse des journaux, la détection et la corrélation des événements de sécurité relèvent d'un SIEM comme Wazuh : voir le cours Wazuh, de la collecte des journaux à la lecture d'une alerte. Et rien de tout cela n'a de valeur si les horloges ne sont pas synchronisées (chapitre 7).
Exercices
Exercice 1 sur 4 Lire des OID Réussi À revoir
Le serveur de supervision obtient :
.1.3.6.1.2.1.1.5.0 = STRING: SW-COEUR
.1.3.6.1.2.1.1.3.0 = Timeticks: (864000) 2:24:00.00
.1.3.6.1.2.1.2.2.1.8.10101 = INTEGER: up(1)
.1.3.6.1.2.1.2.2.1.8.10102 = INTEGER: down(2)
- Quel est le nom de l'équipement, et depuis combien de temps son agent tourne-t-il ?
- Que dit la troisième ligne ? Et la quatrième ?
- Le
sysUpTimemontre que le switch a redémarré il y a 2 h 24 min, sans que personne n'ait été prévenu. Quelle notification aurait dû arriver, et pourquoi n'est-elle peut-être pas arrivée ?
Voir la réponseMasquer la réponse de l'exercice 1
SW-COEUR. 864 000 centièmes de seconde = 8 640 secondes = 2 heures 24 minutes.- L'interface d'index
10101est active (up), l'interface10102est inactive (down) :1.3.6.1.2.1.2.2.1.8estifOperStatus, et le dernier nombre est l'index de l'interface. - Un trap
coldStartouwarmStart(et des trapslinkDown/linkUp). Un trap n'a pas d'accusé de réception : envoyé en UDP pendant que le réseau redémarrait, il a pu se perdre. Les informs, acquittés, ou le sondage régulier desysUpTime(une valeur qui diminue signale un redémarrage) évitent de rater l'événement.
Tu avais trouvé ?
Exercice 2 sur 4 Choisir la version et le niveau Réussi À revoir
- Un auditeur capture le trafic du VLAN d'administration et y lit
publicdans des paquets UDP 161. Qu'en conclut-il ? - Quel niveau de sécurité SNMPv3 retiens-tu pour les switchs ? Avec quels algorithmes ?
- Pourquoi limiter l'utilisateur SNMP à la lecture, et l'agent à l'adresse du serveur de supervision ?
Voir la réponseMasquer la réponse de l'exercice 2
- Des équipements utilisent encore SNMPv1 ou v2c avec la communauté par défaut
public, en clair : n'importe qui peut lire leur configuration réseau et leur état. - authPriv, avec SHA-256 (ou SHA-1 si l'équipement ne gère que lui) pour l'authentification et AES-128 pour le chiffrement, et des phrases secrètes longues et différentes.
- Un compte en écriture (SET) permettrait de reconfigurer l'équipement si ses secrets fuyaient. Limiter l'accès au serveur de supervision (ACL sur le switch, pare-feu) réduit la surface d'attaque : même avec les bons secrets, un poste ne peut pas interroger l'agent.
Tu avais trouvé ?
Exercice 3 sur 4 Le niveau de syslog Réussi À revoir
Un switch est réglé avec logging trap warnings.
- Quelles gravités envoie-t-il au serveur syslog ?
- Les changements d'état d'interface (gravité 5, notifications) arrivent-ils ? Que faut-il changer ?
- Pourquoi ne pas tout régler sur
debugging?
Voir la réponseMasquer la réponse de l'exercice 3
- Les gravités 0 à 4 : emergencies, alerts, critical, errors, warnings.
- Non : 5 est moins grave que 4. Régler
logging trap notifications(0 à 5) oulogging trap informational(0 à 6). - Le débogage produit un volume énorme de messages : il sature le serveur et le réseau, noie les événements utiles et peut charger le processeur du switch. On ne l'active que temporairement, pendant un dépannage.
Tu avais trouvé ?
Exercice 4 sur 4 L'agent qui ne répond pas Réussi À revoir
Depuis srv-journaux, snmpget -v3 -l authPriv -u zabbix … 192.168.21.10 1.3.6.1.2.1.1.5.0 répond Timeout: No Response from 192.168.21.10. Sur srv-intranet, systemctl status snmpd indique que le service tourne.
- Donne deux causes possibles, et la commande qui vérifie chacune.
- Après correction, la commande répond
Authentication failure (incorrect password, community or key). Que vérifies-tu ?
Voir la réponseMasquer la réponse de l'exercice 4
- L'agent n'écoute que sur
127.0.0.1(valeur par défaut deagentaddress) :sudo ss -ulnp | grep 161sursrv-intranetdoit montrer192.168.21.10:161. Ou un pare-feu (local, ACL ou pare-feu entre les VLAN) bloque UDP 161 : vérifier les règles, et capturer avecsudo tcpdump -ni any udp port 161sursrv-intranetpour voir si les requêtes arrivent. - Le nom d'utilisateur, la phrase d'authentification et l'algorithme (
-a SHA-256des deux côtés : un agent configuré en SHA-256 refuse une requête en SHA-1). Une erreur sur la phrase de chiffrement donne plutôt des réponses illisibles ou une erreur de déchiffrement.
Tu avais trouvé ?