---
categories: ['OpenBSD','Système','Base']
date: 2019-11-21T16:03:44+01:00
description: "Comment activer et configurer le client SNMP sous OpenBSD, et si possible le faire de façon sécurisé"
draft: false
tags: ['OpenBSD','snmp']
title: "snmp : client SNMP sous OpenBSD"
translationKey: "openbsd-snmp-client"
---
## Description
**snmp** est le client {{< abbr SNMP "Simple Network Management Protocol" >}}
par défaut sous OpenBSD, intégré dans le système de base depuis 6.6 !
*Il est bien sûr nécessaire qu'un agent soit installé, configuré sur la
machine à interroger. Sous OpenBSD, c'est le service natif {{% tag snmpd %}}.*
## Documentation
La documentation se fait au-travers du manpage, tels que :
* {{< man snmp >}}
## Utilisation
Premier aspect qui "saute aux yeux" est que **snmp** est fourni avec un
ensemble de sous-commandes, qui ont leurs propres options.
Pour information : les **{{< abbr OID "Object Identifier" >}}** sont des
identifiants d'objets.
### Description des sous commandes
* `snmp get` pour récupèrer le varbind OID depuis un agent SNMP. Il est
possible de spécifier plusieurs OID.
* `snmp getnext` pour récupèrer le varbind qui suit l'OID requis. Il est
aussi possible d'en spécifier plusieurs.
* `snmp walk` récupère toutes les branches d'un OID.
* `snmp bulkget` récupère les 10 prochains varbind suivant chaque OID.
* `snmp bulkwalk` récupère tous les varbind qui sont des branches de l'OID.
* `snmp set` permet de définir un ou plusieurs varoid, ainsi que son
format de type de données.
* `snmp trap` envoie un message de capture à un agent.
* `snmp mibtree` permet de faire un dump *(une sauvegarde)* de l'arborescence
des objets compilés au format MIB.
Les deux sous commandes `bulk*`, ainsi que `trap` ne sont fonctionnelles
qu'à partir de SNMP v2.
Pour info, la sous commande `get` est aussi utile pour récupèrer les
messages d'erreurs.
### SNMP v1
Oui, c'est possible ; mais du fait que c'est une version "historique",
qu'il n'est plus recommandé de l'utiliser, passons à la suite…
### SNMP v2
Il n'y a pas de réelle sécurité avec SNMPv2. Elle se base principalement
sur l'option `community` et les deux options `read-*`.
Exemple :
```sh
$ snmp walk -v 2c -c public $(hostname) sysDescr
```
Cet exemple nous montre l'interrogation d'un agent sur le protocole `v2c`
faisant partie de la communauté `public`.
Un petit mot sur l'option `community`, ne cherchez pas à la faire fonctionner
avec SNMPv3, elle a été supprimée du protocole.
### SNMP v3
Les options principales sont :
* `-A` spécifie le mot de passe utilisateur de l'agent à interroger.
* `-a` spécifie le protocole de chiffrement lié à l'option `-A`.
- Par défaut, l'option `-a` est paramétrée sur `MD5`.
*Attention, l'option équivalente pour le service snmpd `hmac` est,
elle, basée sur `hmac-sha1`. Donc, dans le cas d'un agent SNMPd
fonctionant sous OpenBSD configuré par défaut à interroger, il faudra
veiller à spécifier `SHA1`*.
* `-l` spécifie le niveau de sécurité. Par défaut, la valeur est `noAuthNoPriv`.
* `authNoPriv` est requise par l'une des deux options `-A` ou `-k`.
* `authPriv` est requise par l'une des deux options `-K` ou `-X`.
* `-u` spécifie le nom de l'utilisateur
* `-v` spécifie la version du protocole SNMP utilisé
* `-X` spécifie le mot de passe de confidentialité de l'utilisateur
* `-x` spécifie le protocole de chiffrement de confidentialité. Les options
sont `des` ou `aes`.
Ces options sont utiles voire nécessaires pour faire de
l'{{< anchor "authentification dite forte" "authentification forte" >}}.
Il y a bien sûr d'autres options possibles :
* certaines ne sont pas nécessaires d'être généralement spécifiées,
c'est le cas de `-E`, `-e`, `-n`, `-Z`.
* les options `-K`, `-k` *(ces deux dernières options sont l'équivalent
des options `-A` et `-X` mais encodées sous forme hexadécimale)*.
* certaines sont spécifiques à l'usage des sous commandes `bulk*`, `walk`.
* pour finir, il est possible de cibler les protocoles réseaux que sont
`udp`, `tcp`, (et leur équivalent IPv6 : `upd6` et `tcp6`) ou `unix`.
Les adresses IPv6 doivent être mises entre crochets `{ }`.
Lire le manpage {{< man snmp >}} pour en savoir plus sur l'utilité des
ces options.
Ci-dessous, retrouvez quelques exemples d'utilisation avec le protocole
SNMPv3. Il est bien entendu que nous n'abordons pas la partie de la
configuration de l'agent interrogé. Sous {{< tag OpenBSD >}}, la
configuration d'un agent SNMP se fait par le biais du service
{{% tag SNMPd %}}.
Dans chaque cas, les paramètres utilisés sont liés à ceux configurés dans
le service SNMPd.
### Sans authentification
Exemple :
```sh
$ snmp walk -u "test" -v 3 $(hostname) sysDescr
```
Dans cet exemple, nous interrogeons l'agent avec un nom d'utilisateur
nommé `test`, sans aucun niveau de sécurité.
### Authentification simple
Exemple :
```sh
$ snmp walk -A "secret007" -a SHA -l authNoPriv -u "uauth" -v 3 192.168.1.3 sysdescr
```
Ici, nous interrogeons l'agent ayant pour adresse `192.168.1.3` avec un
nom utilisateur `uauth` , une clé d'authentification `secret007` et un
niveau de sécurité spécifié à `authNoPriv`.
### Authentification forte
Quelques mots sur l'authentification forte : elle est à favoriser
IMPÉRATIVEMENT !
Exemple :
```sh
$ snmp walk -A "zx4pyrfyeu5x5c3kxqirhtsxksbmawju" -a SHA-512 -l authPriv -u "uenc" -v 3 -X "XHVBzYUpP8dKns75BaSwq6t7SUgF6oMz" -x aes $(hostname) sysdescr
```
Dans cet exemple, nous interrogeons localement l'agent,
* avec un utilisateur nommé `uenc`,
* une clé d'authentification "`zx4pyrfyeu5x5c3kxqirhtsxksbmawju`" basée
sur le protocole de chiffrement `SHA-512`,
* un niveau de sécurité sur `authPriv`,
* le mot de passe de l'utilisateur "`XHVBzYUpP8dKns75BaSwq6t7SUgF6oMz`"
basé sur le protocole de chiffrement `aes`.
## Dépannage
### Erreur : `usmStatsDecryptionErrors.0`
Le protocole de chiffrement que vous utilisez n'est pas celui attendu
par l'agent interrogé. Corrigez la valeur de votre option `-x`.
### Erreur : `usmStatsUnsupportedSecLevels.0`
Le niveau de sécurité que vous cherchez à utiliser n'est pas celui attendu
par l'agent interrogé. Corrigez la valeur de votre option `-l`.
### Erreur : `usmStatsWrongDigests.0`
Le protocole de chiffrement que vous utilisez n'est pas celui attendu
par l'agent interrogé. Corrigez la valeur de votre option `-a`.
### Message : `*** = No Such Object available on this agent at this OID`
Vous essayez de parcourir un arbre avec la sous commande `get`,
n'est-ce pas !?
Alors, soit vous recommencez en :
* utilisant la sous commande `walk`
* précisant un OID particulier
### Message : `Received report:`
Vous venez de parcourir un arbre avec la sous commande `walk`, et vous
avez pour retour juste ce message `Received report:` sans rien de plus.
Utilisez la sous commande `get` à la place, cela vous permettra d'obtenir
le message d'erreur adéquat.
### Message : `snmp: Invalid privacy protocol specified after -3x flag:`
Le niveau du protocole de sécurité que vous avez spécifié est incorrect.
Corrigez la valeur de votre option `-l`.
### Message : `snmp: ***: Unknown object identifier`
Vous avez spécifié un OID inconnu. Vérifiez et corrigez l'OID recherché.
---