Snmptrap
| Fiche express | |
|---|---|
| Domaine | Supervision réseau (SNMP) — réception des traps |
| Commandes | snmptrapd (démon) · snmptrap (émission)
|
| Port | UDP/162 |
| Voir aussi | Snmptrap config (déclaration côté agent) · Snmpd.conf |
snmptrapd est le démon qui écoute les traps SNMP entrantes sur le port UDP/162. Sa configuration (/etc/snmp/snmptrapd.conf) définit comment chaque trap reçue est traitée, en particulier via la directive traphandle qui déclenche un script (shell/Perl/Python...) selon le type de trap reçu. Cette page couvre le côté récepteur ; pour les directives qui font qu'un agent envoie des traps, voir Snmptrap config.
Configuration de l'agent émetteur (rappel minimal)
# /etc/snmp/snmpd.conf
trapcommunity secret
trapsink localhost
informsink localhost # inform = trap avec accusé de réception (SNMPv2c/v3)
authtrapenable 1 # 1 = envoyer une trap en cas d'échec d'authentification, 2 = ne pas envoyer
Note de correction : trapsink/informsink attendent une destination précise (hôte, éventuellement suivi de la community et du port), pas une notation de sous-réseau — corrigé ici par rapport à un exemple erroné de la documentation source. Voir Snmptrap config pour la liste complète des directives.
systemctl restart snmpd
Vérifier les échanges avec un sniffer réseau :
tcpdump -vv -i lo udp port 162
Configuration du récepteur (snmptrapd.conf)
# /etc/snmp/snmptrapd.conf
disableAuthorization yes # obligatoire depuis net-snmp 5.3+ (sinon la trap est rejetée par défaut)
doNotRetainNotificationLogs yes # ne conserve pas l'historique NOTIFICATION-LOG-MIB (volume important sinon)
# lance un script pour chaque trap reçue ; "default" s'applique si aucun match plus précis
traphandle default /usr/local/bin/handle-trap.sh
traphandle IF-MIB::linkDown /usr/local/bin/handle-trap.sh
traphandle IF-MIB::linkUp /usr/local/bin/handle-trap.sh
Le contenu de la trap est transmis au script via l'entrée standard (stdin).
Valider la syntaxe du fichier avant de le déployer :
snmptrapd -c /etc/snmp/snmptrapd.conf -f -Le
(-f garde le processus au premier plan, -Le journalise sur la sortie standard — pratique pour tester avant de repasser en démon système.)
Ne pas oublier d'ouvrir le port UDP/162 sur le pare-feu local pour que les traps puissent arriver.
Émettre une trap manuellement (test)
Sur la machine réceptrice :
snmptrapd -f -Le
Depuis une autre machine :
snmptrap -v1 -c secret monitoring-server .1.3.6.1.2.1.25.3.3.1.2.8 0 1 i 1
Résultat côté récepteur (exemple) :
2026-01-01 11:33:14 0.0.0.0 (via UDP: [192.0.2.54]:32920) TRAP, SNMP v1, community secret
HOST-RESOURCES-MIB::hrProcessorLoad.8 Warm Start Trap (0) Uptime: 0:00:00.01
Créer une trap personnalisée
Déclarer une MIB minimale décrivant la trap :
# /usr/share/snmp/mibs/TRAP-TEST-MIB.txt
TRAP-TEST-MIB DEFINITIONS ::= BEGIN
IMPORTS ucdExperimental FROM UCD-SNMP-MIB;
demotraps OBJECT IDENTIFIER ::= { ucdExperimental 990 }
demo-trap TRAP-TYPE
STATUS current
ENTERPRISE demotraps
VARIABLES { sysLocation }
DESCRIPTION "Trap de démonstration"
::= 17
END
export MIBS=+TRAP-TEST-MIB
snmptrap -v1 -c public monitoring-server TRAP-TEST-MIB::demotraps localhost 6 17 '' SNMPv2-MIB::sysLocation.0 s "trap de test"
Vérifier la réception avec un sniffer :
tcpdump -w test.pcap -s 0 udp port 162
Traduire les traps (snmptt)
Le projet snmptt permet de traduire/enrichir les traps reçues (format lisible, corrélation, découpage) avant transmission à un outil de supervision (Nagios, Centreon...).
Voir aussi
- Snmptrap config — détail des directives côté agent émetteur
- Snmpd.conf
- SNMP