Skip to content
Learni
View all tutorials
Réseaux

Comment configurer SNMP v3 pour monitorer les réseaux en 2026

Introduction

SNMP (Simple Network Management Protocol) est le protocole standard pour monitorer et gérer les appareils réseau comme les routeurs, switches et serveurs. En 2026, avec la multiplication des menaces cyber, SNMP v3 s'impose comme la version sécurisée grâce à l'authentification et au chiffrement, contrairement aux versions v1/v2c vulnérables aux attaques par sniffing.

Ce tutoriel intermédiaire vous guide pas à pas pour configurer un agent SNMP v3 sur Ubuntu 24.04, tester les requêtes MIB et automatiser le monitoring via Python. Vous apprendrez à extraire des métriques comme l'utilisation CPU, la charge système ou les interfaces réseau, essentielles pour des outils comme Grafana ou Zabbix. Imaginez votre infrastructure réseau sous surveillance proactive : détection précoce des pannes, alertes en temps réel. À la fin, vous aurez un setup production-ready, scalable et sécurisé, bookmarkable pour tout admin sys expérimenté. (128 mots)

Prérequis

  • Serveur Ubuntu 24.04 LTS (ou Debian équivalent) avec accès root/sudo
  • Connaissances de base en administration Linux et réseaux (ports UDP 161/162)
  • Python 3.12+ installé
  • Accès internet pour les paquets
  • Firewall configuré (ufw ou firewalld) pour autoriser SNMP

Installer net-snmp

terminal-install.sh
#!/bin/bash
apt update
apt install -y snmp snmp-mibs-downloader snmpd snmp-utils
pip install pysnmp

Cette commande met à jour les paquets, installe l'agent SNMP (snmpd), les outils clients (snmp-utils), les MIBs pour décoder les OIDs, et pysnmp pour les scripts Python. Exécutez en sudo pour éviter les erreurs de permissions.

Comprendre la configuration SNMP v2c de base

Avant SNMP v3, testons une config v2c simple pour valider l'installation. SNMP utilise des OID (Object Identifiers) organisés en arbre MIB pour exposer des métriques. Par exemple, 1.3.6.1.2.1.1.1.0 (.iso.org.dod.internet.mgmt.mib-2.system.sysDescr) retourne la description système. L'agent écoute sur UDP 161, les traps sur 162.

Configurer snmpd.conf v2c basique

/etc/snmp/snmpd.conf
rocommunity public localhost
rocommunity public 127.0.0.1
sysLocation "Datacenter Paris, Salle 1"
sysContact "admin@exemple.com"

# Autoriser les vues limitées
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1

# Appliquer la vue
rocommunity public localhost view systemview
rocommunity public 127.0.0.1 view systemview

Ce fichier limite l'accès à 'public' depuis localhost avec des vues restreintes (systeme et host resources). Sauvegardez la config originale (/etc/snmp/snmpd.conf.default) avant édition. Cela expose sysDescr et hrSystemUptime sans risque excessif.

Redémarrer et tester SNMP v2c

terminal-test-v2c.sh
#!/bin/bash
systemctl restart snmpd
systemctl enable snmpd
systemctl status snmpd

# Tester
snmpget -v 2c -c public localhost .1.3.6.1.2.1.1.1.0
snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.1

Redémarre l'agent, l'active au boot et vérifie son statut. snmpget query un OID unique (sysDescr), snmpwalk liste toute la branche système. Une sortie comme 'Linux ubuntu 6.x' confirme le succès.

Passer à SNMP v3 pour la sécurité

SNMP v3 introduit USM (User-based Security Model) avec authNoPriv (HMAC-MD5), authPriv (SHA+AES) et noAuthNoPriv. Créez un utilisateur 'monuser' avec SHA-256 et chiffrement AES-192. Analogie : comme un coffre-fort avec clé + code PIN, contrairement à v2c (juste un mot de passe en clair).

Configurer SNMP v3 dans snmpd.conf

/etc/snmp/snmpd.conf
# Vider config v2c et ajouter v3
rwuser monuser SHA "motdepasseSHA" AES "motdepasseAES"
rouser monuser
ruser monuser

# Groupes et vues
group MonGroup v3 noauth monuser
group MonGroup v3 auth monuser

view all included .1 1.3.6
access MonGroup "" any noauth exact all none none
access MonGroup "" any auth exact all none none

Crée l'utilisateur 'monuser' avec auth SHA et chiffrement AES. Les groupes appliquent des vues 'all' pour read/write. Redémarrez snmpd après. Utilisez des passphrases fortes (min 8 chars, >15 idéal).

Créer l'utilisateur SNMP v3

terminal-create-user.sh
#!/bin/bash
net-snmp-create-v3-user -ro -A "motdepasseSHA" -X "motdepasseAES" -a SHA -x AES192 monuser
systemctl restart snmpd

# Tester v3 noAuth
snmpget -v 3 -u monuser -l noAuthNoPriv localhost .1.3.6.1.2.1.1.1.0

# Tester v3 auth+priv
snmpget -v 3 -u monuser -l authPriv -a SHA -A "motdepasseSHA" -x AES -X "motdepasseAES" localhost .1.3.6.1.2.1.1.1.0

net-snmp-create-v3-user génère les clés USM automatiquement et met à jour snmpd.conf. Les tests valident les 3 niveaux de sécurité. Une erreur 'Unknown user' indique un mauvais restart ou passphrase.

Automatiser les requêtes avec Python

pysnmp est la lib Python standard pour SNMP. Elle gère les versions, MIBs et traps. Exemple : query CPU load (OID .1.3.6.1.4.1.2021.11.11.0) et loggez en JSON pour ELK ou InfluxDB.

Script Python monitoring SNMP v3

snmp_monitor.py
from pysnmp.hlapi import *

import sys

host = 'localhost'
port = 161
community = 'public'  # Non utilisé en v3
oid_cpu = '1.3.6.1.4.1.2021.11.11.0'

iterator = nextCmd(
    SnmpEngine(),
    CommunityData('monuser', mpModel=3, authKey='motdepasseSHA', authProtocol='HMAC-SHA2-256', privKey='motdepasseAES', privProtocol='AES192'),
    UdpTransportTarget((host, port)),
    ContextData(),
    ObjectType(ObjectIdentity(oid_cpu)),
    lexicographicMode=False
)

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('CPU Load: %s' % varValue.prettyPrint())

Ce script query l'OID CPU load via SNMP v3 authPriv. Il gère les erreurs et itère sur les réponses. Lancez avec 'python snmp_monitor.py'. Adaptez pour multiprocessing ou Prometheus exporter.

Configurer les traps SNMP

/etc/snmp/snmptrapd.conf
authCommunity log,execute,net public
traphandle default /usr/bin/snmptrap-handler.sh

# Format des traps
format %A %V %h %q %w %t %v

# Démarrer trap receiver
# systemctl enable snmptrapd && systemctl start snmptrapd

Configure le receiver de traps (UDP 162). Les traps sont des alertes asynchrones envoyées par l'agent. Le handler exécute un script personnalisé. Testez avec 'snmptrap -v 3 ...'.

Bonnes pratiques

  • Toujours SNMP v3 : Évitez v1/v2c en prod ; utilisez authPriv avec AES-256.
  • Vues MIB restreintes : Limitez les OIDs exposés (ex: pas ifTable pour la sécurité).
  • Passphrases uniques : >20 chars, rotation tous 90 jours via net-snmp-config.
  • Monitoring des logs : Surveillez /var/log/syslog pour 'snmpd' et intégrez à SIEM.
  • Firewall strict : ufw allow from IP_MONITOR to any port 161 proto udp.

Erreurs courantes à éviter

  • Oubli de restart snmpd : Config changée ? Toujours 'systemctl restart snmpd' sinon 'No Such Name'.
  • Passphrases mismatch : Erreur 'Unknown user name' ; recréer avec net-snmp-create-v3-user.
  • MIBs non installées : 'snmptranslate' échoue ; installez snmp-mibs-downloader.
  • Port bloqué : Vérifiez 'netstat -ulpn | grep 161' et firewall (ufw status verbose).

Pour aller plus loin