Config snmptrapd

This commit is contained in:
jdubois 2023-04-07 17:29:44 +02:00
parent 71f566788e
commit 5f859fccd3

View file

@ -104,8 +104,94 @@ DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (107510) 0:17:55.10
### Recevoir des traps SNMP
#### snmptrapd
##### Installation
Le démon `snmptrapd` permet de recevoir et logger les traps SNMP, puis éventuellement exécuter une action suite à la réception d'une trap :
~~~
# apt install snmptrapd
~~~
Cependant, l'installation de ce paquet installe également le paquet `snmpd`, ce qui installe donc un agent SNMP sur notre manager SNMP. Si l'on souhaite que notre manager reste uniquement manager, il faut désactiver les fonctionnalités de l'agent, en éditant `/etc/snmp/snmpd.conf`. On indique à l'agent de n'écouter sur aucune IP :
~~~
agentaddress none
~~~
Tout le reste peut être commenté, puis on finit par redémarrer l'agent :
~~~
# systemctl restart snmpd
~~~
##### Modifier les arguments de démarrage
Par défaut, `snmptrapd` va écrire les traps reçues dans syslog, à partir de la facilité "warning".
On modifie les arguments de démarrage par :
* `-A` : n'écrase pas le fichier de log à chaque redémarrage du service, mais ajoute de nouvelles lignes
* `-LF 6 /var/log/snmptrap.log` : redirige les logs vers le fichier `/var/log/snmptrap.log`, à partir de la facilité syslog "info" et au-dessus
* `-f` : ne pas forker
* `-p /run/snmptrapd.pid` : fichier PID
* Si on utilise `SysvInit`, on modifie les arguments de démarrage du démon dans `/etc/default/snmptrapd` :
~~~
TRAPDOPTS='-A -LF 6 /var/log/snmptrap.log -f -p /run/snmptrapd.pid'
~~~
* Si on utilise `Systemd`, on modifie les arguments de démarrage du démon en surchargent l'unité
~~~
# systemctl edit snmptrapd.service
[Service]
ExecStart=
ExecStart=/usr/sbin/snmptrapd -A -LF 6 /var/log/snmptrap.log -f -p /run/snmptrapd.pid
# systemctl daemon-reload
~~~
##### Configuration
La configuration se fait dans `/etc/snmp/snmptrapd.conf` :
~~~
# Écouter sur l'IP 192.0.2.5
snmpTrapdAddr 192.0.2.5
# Autoriser à recevoir des traps sur la communauté private, et à uniquement logger ces traps
authCommunity log private
~~~
Par défaut le format dans lequel s'ecrivent les trap SNMP en version 2c correspond à `%.4y-%.2m-%.2l %.2h:%.2j:%.2k %B [%b]:\n%v\n` (soit la date, l'heure, l'hostname de la machine source, les IPs et ports source et destination, puis le contenu de la trap ; voir les explications du format dans [man snmptrapd(8)](https://manpages.debian.org/bullseye/snmptrapd/snmptrapd.8.en.html#FORMAT_SPECIFICATIONS). Il n'est pas très lisible et on peut le modifier pour simplement ajouter un saut de ligne entre chaque champs de la trap :
~~~
# Format des traps SNMPv2 : ajouter un saut de ligne entre chaque champs de la trap
format print2 %.4y-%.2m-%.2l %.2h:%.2j:%.2k %B [%b]:\n%V\n%v\n\n
~~~
Si on veut exécuter une action à la réception d'une trap en particulier, on peut utiliser l'option `traphandle`. Le paquet `traptoemail` est inclus avec `snmptrapd` et permet d'envoyer le contenu de la trap SNMP par email. Les autorisations doivent alors être changées pour rajouter le droit d'exécution :
~~~
# Autoriser à recevoir des traps sur la communauté private, et à logger ces traps puis exécuter une action
authCommunity log,execute private
# Envoyer un mail quand on reçoit certaines trap SNMP
traphandle IF-MIB::linkDown /usr/bin/traptoemail -s 127.0.0.1 me@example.org # Link Down
traphandle IF-MIB::linkUp /usr/bin/traptoemail -s 127.0.0.1 me@example.org # Link Up
traphandle default /usr/bin/traptoemail -s 127.0.0.1 me@example.org # Tout le reste
~~~
Si `default` est indiqué dans le champ OID, alors le programme sera invoqué pour chaque OID ne correspondant pas aux autres OID pour lesquels une `traphandle` est définie.
On finit par redémarrer le service :
~~~
# systemctl restart snmptrapd
~~~
## Intégration à Icinga