📊 Supervision réseau — SNMP et Nagios fondements
| Formation | BTS SIO option SISR — IRIS Mediaschool |
|---|---|
| Bloc | B2 — Réseaux et sécurité |
| Module | M2.4 — Supervision et MCO |
| Compétence | B2.4 |
| Durée | 3h30 |
🎯 Introduction (10 min)
Le 4 octobre 2021, la panne BGP de Facebook a montré que la supervision peut détecter une anomalie globale en moins de 30 minutes (routes BGP retirées), mais que l'absence de procédures d'escalade efficaces et la nécessité d'interventions physiques prolongent la remise en service à plusieurs heures. Ce cas illustre qu'une simple alerte technique n'est pas suffisante : il faut une chaîne opérationnelle (notification, escalade, action) pour réduire le MTTR.
Dans cette séance nous posons les fondations techniques : comment SNMP permet de collecter l'état matériel et applicatif, et comment Nagios peut matérialiser des contrôles actifs/passifs et des politiques de notification.
🎯 Objectifs de la séance
- Configurer et expliquer les différences entre SNMP v1/v2c et SNMP v3 (USM
authPriv), et connaître les risques associés aux community strings par défaut. - Interroger une MIB et interpréter des OID (
sysDescr,interfaces.ifTable.ifDescr,hrStorage.hrStorageTable) avecsnmpget/snmpwalk, et distinguer GET / GETNEXT / GETBULK / SET / TRAP / INFORM. - Créer un check Nagios basique (ping et check_ssh), ajouter deux hôtes et vérifier que les checks remontent correctement dans l'interface Nagios.
📖 1. Fondements et architecture SNMP (80 min)
SNMP (Simple Network Management Protocol) repose sur un modèle manager / agent : un manager (outil de supervision centralisé) interroge des agents SNMP présents sur les équipements (switch, routeur, serveurs). Les agents exposent des objets organisés dans des MIBs (Management Information Base), identifiés par des OID (Object Identifiers) dans un arbre hiérarchique. La communication SNMP classique utilise UDP (port 161 pour requêtes, port 162 pour traps) ; c'est léger mais nécessite des précautions de sécurité.
1.1 Manager / Agent — principes et schéma
Le manager envoie des requêtes (GET, GETNEXT, GETBULK, SET) à l'agent qui retourne des valeurs. Les agents peuvent aussi initier l'envoi d'événements (TRAP ou INFORM) vers un manager configuré.
- TRAP : non sollicité, unidirectionnel — aucune confirmation requise.
- INFORM : trap avec accusé de réception — utile quand on veut s'assurer que l'alerte a bien été reçue.
+--------------------------+
| SNMP Manager |
| (Zabbix / Nagios / PRTG)|
+-----------+--------------+
| UDP 161/162
---------------+-----------------------------
| |
+--------------------+ +--------------------+
| win-srv01 (agent) | | cisco-switch (agent)|
| SNMP v3 authPriv | | SNMP v2c / v3 |
+--------------------+ +--------------------+
1.2 Versions SNMP et sécurité
SNMP v1/v2c reposent sur des community strings en clair ; il est fréquent de rencontrer encore les chaînes par défaut public (lecture seule) et private (lecture/écriture) — ces valeurs sont non sécurisées et doivent être remplacées ou, mieux, migrées vers SNMPv3.
| Version | Sécurité | Recommandation |
|---|---|---|
| SNMPv1 | Community string en clair, pas de chiffrement | ❌ Ne pas utiliser |
| SNMPv2c | Community string en clair (améliore GETBULK) | ⚠️ Éviter en prod |
| SNMPv3 | USM : authentification (SHA) + chiffrement (AES) | ✅ Recommandé |
SNMPv3 introduit USM (User-based Security Model) avec trois niveaux :
noAuthNoPriv— ni authentification ni chiffrement.authNoPriv— authentification uniquement (ex. SHA-256).authPriv— authentification et chiffrement (ex. SHA-256 + AES-256).
- Ne jamais utiliser
public/privateen production. - Restreindre les vues MIB (
snmp-server view) et les groupes d'accès. - Limiter les IP autorisées (liste blanche d'IP de management).
- Utiliser SNMPv3
authPriven priorité.
1.3 MIB, OID et exemples utiles
Une MIB est un dictionnaire d'objets ; chaque objet est identifié par un OID. L'arbre standard mib-2 se situe sous 1.3.6.1.2.1 (iso.org.dod.internet.mgmt.mib-2).
| Objet | OID | Description |
|---|---|---|
sysDescr | 1.3.6.1.2.1.1.1.0 | Description textuelle du système (scalaire — noter le suffixe .0) |
ifDescr | 1.3.6.1.2.1.2.2.1.2 | Description d'une interface (colonne de ifTable) |
hrStorageTable | 1.3.6.1.2.1.25.2.3 | Table de stockage (Host Resources : desc, taille, utilisé) |
Les tables SNMP sont indexées : pour obtenir la description de l'interface d'index 2, on lit l'OID 1.3.6.1.2.1.2.2.1.2.2 (l'index est ajouté en suffixe).
1.4 Opérations SNMP : GET, GETNEXT, GETBULK, SET, TRAP, INFORM
| Opération | Direction | Rôle |
|---|---|---|
| GET | Manager → Agent | Récupère la valeur d'un objet scalaire précis |
| GETNEXT | Manager → Agent | Parcours séquentiel d'objets (pratique pour les tables) |
| GETBULK | Manager → Agent | Récupère un grand nombre d'entrées en une seule requête (v2c/v3) |
| SET | Manager → Agent | Modifie une valeur (sensible — réservé aux administrateurs) |
| TRAP | Agent → Manager | Événement non sollicité, sans confirmation |
| INFORM | Agent → Manager | TRAP avec accusé de réception (confirm par le manager) |
Exemples de commandes (depuis debian-srv01)
# Lister les objets de system (mib-2.1) en SNMPv2c (exemple NON sécurisé)
snmpwalk -v2c -c public 192.168.10.5 1.3.6.1.2.1.1
# Récupérer la description système (scalaire) - SNMPv2c
snmpget -v2c -c public 192.168.10.5 sysDescr.0
# Sortie attendue :
# SNMPv2-SMI::mib-2.1.1.0 = STRING: "Microsoft Windows Server 2022 Standard ..."
# En SNMPv3 authPriv (SHA / AES) - lire le sysDescr
snmpwalk -v3 -u monitor -l authPriv \
-a SHA -A 'AuthPass123' \
-x AES -X 'PrivPass123' \
192.168.10.5 1.3.6.1.2.1.1
# Envoyer un trap SNMP v2c (exemple)
snmptrap -v2c -c public manager '' .1.3.6.1.6.3.1.1.5.3
snmpwalk / snmpget (Net-SNMP) en ligne de commande, et des MIB browsers graphiques comme iReasoning MIB Browser pour parcourir visuellement l'arbre des OID.
📖 2. Nagios : architecture et principes (60 min)
Nagios Core est un moteur de supervision qui exécute des contrôles (plugins) sur des hôtes et services définis dans des fichiers de configuration. Deux modes coexistent : les checks actifs (Nagios interroge l'hôte) et les checks passifs (l'hôte ou un agent envoie le résultat au serveur Nagios). Pour exécuter des commandes à distance sur un hôte (métriques locales non exposées en SNMP), on installe un agent NRPE ou on utilise des sondes qui publient des résultats passifs.
Composants clés
- nagios-core : moteur qui orchestre les vérifications et notifications.
- Plugins : scripts (
check_ping,check_ssh,check_nrpe…) qui retournent OK / WARNING / CRITICAL. - NRPE (ou agents alternatifs) : exécution distante de plugins sur l'hôte supervisé.
- Fichiers d'objets : définitions
hosts/services/commands/contacts/contact_groups.
2.1 Exemples de configuration Nagios (syntaxe classique)
Définition de commandes dans commands.cfg :
define command{
command_name check-host-alive
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 100.0,20% -c 500.0,60% -p 5
}
define command{
command_name check-ssh-port
command_line $USER1$/check_ssh -H $HOSTADDRESS$ -p 22
}
Définition d'un hôte et d'un service SSH dans hosts.cfg / services.cfg :
define host{
use generic-host
host_name win-srv01
alias win-srv01
address 192.168.10.5
}
define service{
use generic-service
host_name win-srv01
service_description SSH
check_command check-ssh-port
}
Les plugins Nagios se trouvent généralement dans /usr/lib/nagios/plugins/. La variable $USER1$ est définie dans resource.cfg et pointe vers ce dossier.
2.2 Checks actifs vs passifs, escalades et notifications
| Type | Initiateur | Cas d'usage typique |
|---|---|---|
| Check actif | Nagios lance périodiquement le plugin | Services réseau classiques (ping, HTTP, SSH) |
| Check passif | L'hôte pousse le résultat (NSCA, broker) | Tâches asynchrones, équipements derrière NAT |
Les notifications sont construites à partir de contacts / contact_groups et d'actions définies sur des triggers d'état. Les escalades (escalations) permettent de contacter des personnes différentes selon la durée d'un incident :
- 1ère alerte → on-call N1
- Après 30 min → manager
- Après 2h → intervention physique
🛠️ Travaux Pratiques — TP S1 (70–80 min)
Vous êtes technicien chez InnovatTech SARL. Objectif : sécuriser l'accès SNMP en SNMPv3 authPriv sur deux équipements (win-srv01 et Cisco Catalyst), vérifier la lecture depuis debian-srv01 et créer deux checks Nagios (PING + SSH) pour win-srv01 et debian-srv02.
Prérequis techniques
- Accès administrateur sur
win-srv01et sur le Catalyst (mode enable/config). - Accès SSH/root sur
debian-srv01(serveur de supervision) et accès au serveur Nagios. - Outils sur
debian-srv01:snmp,snmp-mibs-downloader
sudo apt install -y snmp snmp-mibs-downloader
Étape 1 — Activer SNMP v3 authPriv sur win-srv01 (Net-SNMP)
- Installer Net-SNMP pour Windows (si l'agent SNMP natif ne supporte pas v3).
- Créer/modifier le fichier
snmpd.conf(chemin typique :C:\usr\etc\snmp\snmpd.conf) :
# snmpd.conf (extrait) - SNMPv3 user authPriv
createUser monitor SHA "AuthPass123" AES "PrivPass123"
# Limiter la vue si besoin :
rouser monitor
- Démarrer/réinitialiser le service SNMP (PowerShell en Administrateur) :
net stop snmpd
net start snmpd
Get-Service -Name snmpd
Étape 2 — Activer SNMP v3 sur Cisco Catalyst 2960
enable
configure terminal
! Vue restreinte
snmp-server view INNOVATTECH_RO 1.3.6.1.2.1 included
! Groupe v3 avec confidentialité
snmp-server group MGMT v3 priv read INNOVATTECH_RO write INNOVATTECH_RO
! Utilisateur v3 SHA / AES-256
snmp-server user monitor MGMT v3 auth sha AuthPass123 priv aes 256 PrivPass123
end
write memory
Étape 3 — Vérifier l'accès depuis debian-srv01
# SNMPv3 authPriv (SHA / AES) - lecture de sysDescr
snmpwalk -v3 -u monitor -l authPriv \
-a SHA -A 'AuthPass123' \
-x AES -X 'PrivPass123' \
192.168.10.5 1.3.6.1.2.1.1
# SNMPv2c (si l'agent n'est pas encore migré)
snmpwalk -v2c -c public 192.168.10.5 1.3.6.1.2.1.1
La commande snmpwalk retourne une liste d'objets, et sysDescr.0 contient une chaîne descriptive du système :
SNMPv2-SMI::mib-2.1.1.0 = STRING: "Microsoft Windows Server 2022 Standard ..."
Étape 4 — Créer un check Nagios basique (PING + SSH)
1. Définir les commandes dans commands.cfg :
define command{
command_name check-host-alive
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 100.0,20% -c 500.0,60% -p 5
}
define command{
command_name check-ssh-port
command_line $USER1$/check_ssh -H $HOSTADDRESS$ -p 22
}
2. Ajouter les hôtes et services (hosts.cfg / services.cfg) :
define host{
use generic-host
host_name win-srv01
alias win-srv01
address 192.168.10.5
}
define service{
use generic-service
host_name win-srv01
service_description PING
check_command check-host-alive
}
define host{
use generic-host
host_name debian-srv02
alias debian-srv02
address 192.168.30.5
}
define service{
use generic-service
host_name debian-srv02
service_description SSH
check_command check-ssh-port
}
3. Vérifier la configuration et recharger Nagios :
sudo nagios -v /etc/nagios/nagios.cfg
sudo systemctl restart nagios
sudo systemctl status nagios --no-pager
Livrable attendu
- Un fichier
snmpd.conf(win-srv01) ou capture de la configuration SNMP v3 Cisco. - Un extrait des fichiers Nagios (
commands.cfg,hosts.cfg,services.cfg) montrant les définitions ajoutées. - Un court rapport (1 page) avec les sorties
snmpwalkprouvant l'accès et une capture d'écran Nagios montrant les services en OK.
Critères de réussite
- ☑
snmpwalksur SNMP v3 retournesysDescr.0pour win-srv01 et pour le switch. - ☑ Nagios affiche les hôtes
win-srv01etdebian-srv02avec les services PING/SSH en état OK. - ☑ Les fichiers de configuration Nagios sont valides (
nagios -vsans erreur).
🔁 Synthèse (10 min)
Cette séance a posé les bases de la supervision réseau : SNMP fournit un modèle standardisé pour interroger et surveiller des objets sur des équipements, avec des versions (v1/v2c/v3) aux niveaux de sécurité très différents. Nagios offre un moteur de checks et de notifications très modulable, adapté aux contrôles actifs et aux escalades opérationnelles.
En attendant la séance suivante (Zabbix), vous devez être capable d'interroger une MIB, d'expliquer la différence entre TRAP et INFORM, et d'ajouter un check Nagios simple pour un hôte.
En une phrase, expliquez pourquoi SNMPv3 est recommandé en production par rapport à v2c.
SNMP repose sur le modèle manager/agent via UDP (161/162). SNMPv3 authPriv est le seul niveau garantissant authentification et confidentialité. Nagios orchestre des plugins qui retournent OK/WARNING/CRITICAL — les checks actifs sont initiés par Nagios, les checks passifs sont poussés par l'agent. Les escalades permettent de contacter les bonnes personnes au bon moment.
📝 QCM — Testez vos connaissances
- Sur quel port UDP l'agent SNMP écoute-t-il les requêtes GET/GETNEXT envoyées par le manager ?
- Quelle version de SNMP introduit l'authentification et le chiffrement via le modèle USM (authPriv) ?
- Quelle opération SNMP envoie un événement non sollicité de l'agent vers le manager avec accusé de réception ?
- Quel OID correspond au scalaire
sysDescrdans la MIB-2 standard ? - Dans Nagios, comment appelle-t-on un check dont le résultat est envoyé par l'hôte lui-même plutôt que déclenché par Nagios ?
📝 Afficher les corrections
- Port 161 — L'agent SNMP écoute sur le port UDP 161 pour les requêtes du manager ; le port 162 est réservé aux TRAPs/INFORMs.
- SNMPv3 — SNMPv3 introduit USM avec trois niveaux (noAuthNoPriv, authNoPriv, authPriv). v1 et v2c n'utilisent que des community strings en clair, sans aucune protection cryptographique.
- INFORM — L'INFORM est un TRAP confirmable : le manager envoie un accusé de réception à l'agent, garantissant que l'alerte a bien été reçue. Le TRAP simple est unidirectionnel et sans confirmation.
- 1.3.6.1.2.1.1.1.0 — L'OID de sysDescr est 1.3.6.1.2.1.1.1.0 (mib-2.system.sysDescr.0). Le suffixe
.0indique un objet scalaire (instance unique). - Check passif — Dans un check passif, c'est l'hôte (ou un agent/script) qui pousse le résultat vers Nagios via NSCA ou un broker. À l'inverse, le check actif est lancé périodiquement par le moteur Nagios lui-même.
