Snmptrap

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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