--- 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é. ---