Introduction
SNMP (Simple Network Management Protocol) est le protocole standard pour monitorer et gérer les équipements réseau, serveurs et applications. En 2026, avec l'essor de l'IoT et des data centers hybrides, SNMP reste incontournable pour collecter des métriques comme l'usage CPU, la mémoire ou les interfaces réseau.
Ce tutoriel débutant vous guide pour installer et configurer net-snmp sur Ubuntu/Debian, la référence open-source. Nous couvrons les versions v2c (simple, communauté-based) et v3 (sécurisée avec authentification/chiffrement). Imaginez SNMP comme un 'interphone' pour vos machines : un agent écoute les requêtes et renvoie des stats précises via des MIB (Management Information Bases).
Pourquoi c'est crucial ? Des outils comme Zabbix, Nagios ou Prometheus l'utilisent pour alerter en temps réel. À la fin, vous saurez monitorer un serveur en 15 minutes. (142 mots)
Prérequis
- Système Ubuntu 24.04 LTS ou Debian 12+ (root ou sudo)
- Connexion internet pour les paquets
- Connaissances basiques de terminal Linux
- Un serveur de test (VM recommandée pour sécurité)
Installation de net-snmp
sudo apt update
sudo apt install -y snmp snmpd snmp-mibs-downloader
touch /var/lib/snmp/snmpd.conf
sudo systemctl stop snmpd
sudo systemctl disable snmpdCette commande met à jour les paquets, installe l'agent SNMP (snmpd), les outils clients (snmp) et les MIB standard. On arrête/désactive le service pour configurer en sécurité. Évitez d'oublier les MIB, sinon les OIDs ne seront pas lisibles.
Comprendre la configuration de base
Le fichier principal est /etc/snmp/snmpd.conf. Il définit l'agent :
- rocommunity : Lecture seule avec mot de passe (v2c).
- sysLocation/sysContact : Infos descriptives.
Copiez le fichier par défaut et éditez-le. Par défaut, snmpd écoute sur UDP 161, accessible localhost seulement pour sécurité.
Configuration SNMP v2c de base
# Informations système
sysLocation "Data Center Paris"
sysContact "admin@example.com"
# Communauté lecture seule (remplacez 'public' par un secret !)
rocommunity monsecret 127.0.0.1
rocommunity monsecret DEFAULT
# Autoriser localhost et votre IP de monitoring
agentAddress udp:127.0.0.1:161,udp:192.168.1.0/24:161
# Activer les traps (optionnel)
trap2sink montrapserver.example.com montrapscret
# Fin de config minimaleCe fichier configure une communauté 'monsecret' pour lecture (rocommunity). Limitez les IPs pour sécurité. 'agentAddress' restreint l'écoute. Sauvegardez et testez : un piège courant est d'oublier de remplacer 'public' par un secret fort.
Activation et redémarrage du service
sudo cp /etc/snmp/snmpd.conf.sample /etc/snmp/snmpd.conf.bak
sudo systemctl enable snmpd
sudo systemctl start snmpd
sudo systemctl status snmpdOn sauvegarde le sample, active et démarre snmpd. 'status' vérifie que le service écoute sur 161/udp sans erreur. Si 'inactive', vérifiez les logs avec journalctl -u snmpd.
Tester la configuration v2c
Utilisez snmpget pour une OID unique (ex: sysDescr.0) et snmpwalk pour un sous-arbre. OID 1.3.6.1.2.1.1.1.0 = description système.
Si ça marche, votre agent répond ! Analogie : snmpget = question précise, snmpwalk = inventaire complet.
Test avec snmpget et snmpwalk
snmpget -v2c -c monsecret localhost 1.3.6.1.2.1.1.1.0
snmpwalk -v2c -c monsecret localhost 1.3.6.1.2.1.1
snmpwalk -v2c -c monsecret localhost 1.3.6.1.2.1.25.1snmpget teste sysDescr, snmpwalk explore sysUpTime et hostResources. Remplacez 'localhost' par IP distante si autorisée. Erreur 'No Such Object' ? Vérifiez MIB installées et communauté.
Script Python client SNMP
from pysnmp.hlapi import *
iterator = getCmd(SnmpEngine(),
CommunityData('monsecret', mpModel=1),
UdpTransportTarget(('localhost', 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')))
for errorIndication, errorStatus, errorIndex, varBinds in iterator:
if errorIndication:
print(errorIndication)
break
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
break
else:
for varName, varValue in varBinds:
print('%s = %s' % (varName.prettyPrint(), varValue.prettyPrint()))Installez pysnmp (pip install pysnmp). Ce script query sysDescr via v2c. Copiez-collable, il gère erreurs. Utile pour intégration automatisée ; v1=0, v2c=1 dans mpModel.
Passer à SNMP v3 pour la sécurité
v3 ajoute auth/chiffrement (USM). Créez un user avec passlib/md5 ou sha/aes. Plus sûr que v2c pour prod.
Configuration SNMP v3
createUser monuser MD5 monmotdepasse AES monclechiffre
rouser monuser authPriv
# Ou sans chiffrement : rouser monuser auth
# Test OID
sysLocation "Serveur v3"
sysContact "admin@example.com"
agentAddress udp:127.0.0.1:161Ajoutez ces lignes à snmpd.conf, redémarrez. 'createUser' génère keys à la volée. authPriv = auth + chiffrement. Test avec -v3 -u monuser -a MD5 -A monmotdepasse -x AES -X monclechiffre.
Test SNMP v3
snmpget -v3 -u monuser -l authPriv -a MD5 -A monmotdepasse -x AES -X monclechiffre localhost 1.3.6.1.2.1.1.1.0
snmpwalk -v3 -u monuser -l authPriv -a MD5 -A monmotdepasse -x AES -X monclechiffre localhost 1.3.6.1.2.1.1-l authPriv force auth+priv. Si 'Unknown user', redémarrez snmpd après createUser. Stockez creds en sécurité, pas en clair.
Bonnes pratiques
- Toujours v3 en prod : Évitez v1/v2c sur internet (sniffable).
- Restreignez IPs : agentAddress + rocommunity IP/masque.
- Secrets forts : 16+ chars, rotation annuelle.
- MIB custom : Ajoutez vos OIDs pour apps spécifiques.
- Logs activés : snmpd.conf inclut 'syslog' pour debug.
Erreurs courantes à éviter
- Port 161 bloqué : ufw allow from IP_MONITOR to any port 161 proto udp.
- Communauté par défaut 'public' : Changez-la immédiatement !
- Service non redémarré : Toujours systemctl restart snmpd après édition conf.
- MIB manquantes : snmptranslate -mALL -IR sysUpTime échoue sans snmp-mibs-downloader.
Pour aller plus loin
- Docs officielles : net-snmp.org
- Outils avancés : Zabbix SNMP, Prometheus snmp_exporter
- MIB browser : iReasoning MIB Browser