Description
OpenBSD intègre par défaut dans le système de base snmpd qui est le démon du service SNMP.
- OpenBSD : 6.6
- Service : snmpd
Documentation
La documentation se fait au-travers des différents manpages, tels que :
Configuration
La configuration du serveur snmpd se fait, à minima, au-travers d’un seul fichier de configuration, à créer : /etc/snmpd.conf
.
Il existe trois versions du protocol ; la v1 est l’historique à ne plus utiliser ; la v2 apporte des prémices de sécurité ; la v3 est la plus sécurisante, néanmoins, il faut utiliser les niveaux de sécurité et de chiffrement les plus forts. (Pour info, dans certaines conditions, la v3 est aussi faillible et sujette à vulnérabilités).
Après avoir écrit le fichier de configuration, il faut donner les droits d’exécution adéquates et utilisateur au fichier de configuration :
Code : sh
# chown root:_snmpd /etc/snmpd.conf
# chmod 0600 /etc/snmpd.conf
Configuration Globale
Plusieurs options peuvent être paramétrées :
filter-routes
(yes|no): permet au noyau de filter les messages de mise à jour des routes dans le socket.listen on
address [tcp|udp]: spécifie l’adresse locale qui doit écouter les messages SNMP entrants. Il est possible de la spécifier plusieurs fois. Les deux protocoles TCP et UDP sont gérés.read-only
: spécifie la communauté autorisée en lecture seule. Par défaut, la valeur estpublic
read-write
(community string | disabled) : Soit spécifie la communauté autorisée en lecture et écriture, soit désactive l’écrite définitivement. Par défaut, la valeur estprivate
seclevel
: spécifie le niveau le plus bas de sécurité que snmpd(8) accepte. Par défault, la valeur estnone
. Si l’une des deux autres optionsauth
ouenc
est choisie, snmpd(8) n’acceptera que les requêtes SNMPv3.enc
oblige à ce que les messages soient chiffrés et une authentification valide, autrement ils seront supprimés.- Il existe aussi l’option
socket
, les différentes optionssystem
et celles relatives àtrap
. Je renvoie au manpage ;)
Les deux options read_*
ne servent QUE pour une configuration SNMP v2.
Macros
Des macros peuvent être définies. Considérez-les comme des variables. On ne peut utiliser des mots clés réservés. Elles commencent forcément par une lettre, un chiffre ou le symbole ‘_
’ suivi de tout autre caractère.
Configuration des utilisateurs
Avec SNMPv3, Il est possible de définir plusieurs utilisateurs par le biais de l’option user
, tel que :
user
name authkey key auth hmac enckey key enc cipherauthkey
est requis pour authentifier les messages en spécifiant une clé. Si la clé est omise, pas d’authentification.auth
hmac permet de cibler l’algorithme HMAC à utiliser. Par défaut, la valeur esthmac-sha1
. La valeur la plus forte esthmac-sha512
.enckey
key est la clé de chiffrement utilisé pour chiffrer et déchiffrer les messages dans un soucis de confidentialité. Sans, le compte utilisateur n’acceptera jamais l’entrée des messages ou ne chiffrera pas les messages sortants.enc
cipher est l’algorithme utilisé. Par défaut, sa valeur estdes
. Sa valeur la plus forte estaes
.
Il faut bien comprendre que le nom de l’utilisateur, les caractères donnant la valeur des clés key
sont des choix purement arbitraires. À vous de les spécifier…
Configuration des OID
Les OID sont les identifiants des objets. Je renvoie au manpage, si besoin de les gérer.
Utilisation
- Le service se nomme logiquement :
snmpd
- L’option de test de configuration :
-n
Ainsi la commande snmpd -n
permettra de s’assurer de la validité de l’ensemble de la configuration, à tout moment.
À chaque modification du fichier de configuration , il faudra relancer le service ad hoc.
SNMP v2
Pour débuter, commençons par :
Code :
listen on 192.168.1.3 udp
read-only community macompub
read-write community macompriv
À minima, nous n’avons besoin de rien de plus. C’est très basique et permet de tester/s’assurer du bon fonctionnement, de la bonne compréhension.
Testons la réponse :
Code : sh
$ snmp walk -v 2c -c macompub $(hostname) sysDescr
sysDescr.0 = STRING: OpenBSD omv.huc.fr.eu.org 6.6 GENERIC.MP#2 amd64
$ snmp walk -v 2c -c macompub $(hostname) ifName
ifName.1 = STRING: em0
ifName.2 = STRING: enc0
ifName.3 = STRING: lo0
ifName.4 = STRING: pflog0
Ce sont des exemples d’interrogation et réponses.
SNMP v3
Sans sécurité
Commençons avec un exemple sans sécurité :
Code :
seclevel none
user "test"
Après le rédémarrage du service :
Code : sh
$ snmp walk -u "test" -v 3 $(hostname) sysDescr
sysDescr.0 = STRING: OpenBSD omv.huc.fr.eu.org 6.6 GENERIC.MP#2 amd64
$ snmp walk -u "test" -v 3 $(hostname) ifName
ifName.1 = STRING: em0
ifName.2 = STRING: enc0
ifName.3 = STRING: lo0
ifName.4 = STRING: pflog0
Utilisateur authentifié
Code :
seclevel auth
user "uauth" authkey "secret007"
Après le rédémarrage du service :
Code : sh
$ snmp walk -A "secret007" -a SHA -l authNoPriv -u "uauth" -v 3 192.168.47.3 sysdescr
sysDescr.0 = STRING: OpenBSD omv.huc.fr.eu.org 6.6 GENERIC.MP#2 amd64
Authentification forte
Configurons le serveur par un exemple fort :
Code :
listen on 192.168.1.3 tcp
seclevel enc
user "uenc" authkey "zx4pyrfyeu5x5c3kxqirhtsxksbmawju" auth hmac-sha512 enckey "XHVBzYUpP8dKns75BaSwq6t7SUgF6oMz" enc aes
Après le redémarrage du service :
Code : sh
$ snmp walk -A "zx4pyrfyeu5x5c3kxqirhtsxksbmawju" -a SHA-512 -l authPriv -u "uenc" -v 3 -X "XHVBzYUpP8dKns75BaSwq6t7SUgF6oMz" -x aes $(hostname) sysdescr
sysDescr.0 = STRING: OpenBSD omv.huc.fr.eu.org 6.6 GENERIC.MP#2 amd64
$ snmp walk -A "zx4pyrfyeu5x5c3kxqirhtsxksbmawju" -a SHA-512 -l authPriv -u "uenc" -v 3 -X "XHVBzYUpP8dKns75BaSwq6t7SUgF6oMz" -x aes $(hostname) ifname
ifName.1 = STRING: em0
ifName.2 = STRING: enc0
ifName.3 = STRING: lo0
ifName.4 = STRING: pflog0
Gestion du service
- activation :
rcctl enable snmpd
- démarrage :
rcctl start snmpd
Après avoir activé et démarré le service, il est possible de vérifier le fonctionnement du service, tel que :
Code : sh
$ ps aux | grep snmpd
_snmpd 41593 0.0 0.1 772 3124 ?? SU 10:32PM 0:00.07 snmpd: snmpe (snmpd)
root 55283 0.0 0.0 820 1492 ?? Ip 10:32PM 0:00.01 /usr/sbin/snmpd
_snmpd 42220 0.0 0.1 752 2756 ?? Ip 10:32PM 0:00.02 snmpd: traphandler (snmpd)
root 80301 0.0 0.0 332 1256 p0 S+p 10:33PM 0:00.01 grep snmpd
$ netstat -ant | grep snmp
0xfffffd8105572100 stream 0 0 0xfffffd810e7e70e8 0x0 0x0 0x0 /var/run/snmpd.sock
Voilà, pour la partie serveur !
Et les clients ?
Les clients
Depuis OpenBSD 6.6, le client natif est snmp
Pour information, il y a sur chaque système OpenBSD, dans le répertoire /usr/share/snmp/mibs/
l’ensemble de fichiers MIB qui renferment toutes informations utiles :
Code : sh
$ ls -al /usr/share/snmp/mibs/
total 184
drwxr-xr-x 2 root wheel 512 Oct 12 18:34 ./
drwxr-xr-x 3 root wheel 512 Oct 12 18:34 ../
-r--r--r-- 1 root wheel 2331 Oct 12 18:34 OPENBSD-BASE-MIB.txt
-r--r--r-- 1 root wheel 8805 Oct 12 18:34 OPENBSD-CARP-MIB.txt
-r--r--r-- 1 root wheel 3283 Oct 12 18:34 OPENBSD-MEM-MIB.txt
-r--r--r-- 1 root wheel 39486 Oct 12 18:34 OPENBSD-PF-MIB.txt
-r--r--r-- 1 root wheel 18559 Oct 12 18:34 OPENBSD-RELAYD-MIB.txt
-r--r--r-- 1 root wheel 4635 Oct 12 18:34 OPENBSD-SENSORS-MIB.txt
-r--r--r-- 1 root wheel 2547 Oct 12 18:34 OPENBSD-SNMPD-CONF.txt
Il peut être utile de les “donner à manger” aux différents clients des autres systèmes de surveillance/métrologie/monitoring, tel Nagios , Munin , etc…