Comment installer et configurer un client et un démon SNMP sur Ubuntu 14.04

introduction

En tant qu’administrateur système, vous collectez en grande partie des informations précises sur vos serveurs et votre infrastructure. Il existe un certain nombre d’outils et d’options pour collecter et traiter ce type d’informations. Bon nombre d’entre eux reposent sur une technologie appelée * SNMP *.

SNMP est synonyme de protocole de gestion de réseau simple. C’est un moyen pour les serveurs de partager des informations sur leur état actuel, ainsi qu’un canal par lequel un administrateur peut modifier des valeurs prédéfinies. Bien que le protocole lui-même soit très simple, la structure des programmes qui implémentent SNMP peut être très complexe.

Dans notre dernier guide, nous avons appris à propos des les principes de base du protocole SNMP. Dans ce guide, nous allons commencer à montrer comment configurer les outils pour communiquer en utilisant SNMP. Nous allons utiliser deux serveurs Ubuntu 14.04 à des fins de démonstration, mais la plupart des autres systèmes devraient pouvoir suivre avec quelques modifications.

Installer le démon et les utilitaires SNMP

Nous pouvons commencer à explorer comment SNMP peut être implémenté sur un système en installant le démon et des outils sur certains systèmes Ubuntu.

Nous allons utiliser deux serveurs, l’un contenant la partie gestionnaire, l’autre serveur ayant l’agent. Nous pourrions également choisir d’installer l’agent sur la machine du gestionnaire, mais le fait de les séparer facilite la démonstration de la fonctionnalité fournie par chaque composant.

Sur le premier serveur, mettez à jour la base de données apt et installez le composant manager. Parallèlement à cela, nous allons également télécharger un autre paquet nommé + snmp-mibs-downloader + qui contient des informations exclusives sur les bases MIB standard qui nous permettent d’accéder à la plupart des arborescences MIB par leur nom:

sudo apt-get update
sudo apt-get install snmp snmp-mibs-downloader

Sur notre deuxième serveur, celui avec lequel nous allons interagir et qui exécutera le démon, nous pouvons installer les composants nécessaires en tapant:

sudo apt-get update
sudo apt-get install snmpd

Maintenant que vous avez installé ces composants, nous devons configurer notre configuration.

Configuration du gestionnaire SNMP

Comme nous l’avons mentionné ci-dessus, la majeure partie du travail est effectuée dans le composant agent. Notre configuration est donc relativement simple sur cette machine. Nous devons simplement modifier un fichier pour nous assurer que notre client peut utiliser les données MIB supplémentaires que nous avons installées.

Ouvrez le fichier + / etc / snmp / snmpd.conf dans votre éditeur de texte avec les privilèges sudo:

sudo nano /etc/snmp/snmp.conf

Dans ce fichier, il y a quelques commentaires et une seule ligne non commentée. Pour permettre au gestionnaire d’importer les fichiers MIB, il suffit de commenter la ligne + mibs: +:

mibs :

Enregistrez et fermez le fichier lorsque vous avez terminé.

Nous avons maintenant fini de configurer la partie gestionnaire, mais nous devrons tout de même utiliser ce serveur pour nous aider à configurer notre ordinateur agent.

Configuration de la machine de l’agent SNMP

En tant que véritable système client-serveur, l’ordinateur agent ne dispose d’aucun des outils externes nécessaires pour configurer sa propre configuration SNMP. Nous pouvons modifier certains fichiers de configuration pour effectuer certaines modifications, mais la plupart des modifications nécessaires seront effectuées en vous connectant à notre serveur d’agent à partir de notre serveur de gestion.

Pour commencer, sur notre ordinateur agent, nous devons ouvrir le fichier de configuration du démon avec les privilèges sudo:

sudo nano /etc/snmp/snmpd.conf

À l’intérieur, nous devrons apporter quelques modifications. Celles-ci seront principalement utilisées pour amorcer notre configuration afin que nous puissions la gérer à partir de notre autre serveur.

Premièrement, nous devons changer la directive + agentAddress +. Actuellement, il est configuré pour n’autoriser que les connexions provenant de l’ordinateur local. Nous devons commenter la ligne actuelle et la commenter en dessous, ce qui permet toutes les connexions (nous allons la verrouiller bientôt):

#  Listen for connections from the local system only
agentAddress  udp:127.0.0.1:161
#  Listen for connections on all interfaces (both IPv4 *and* IPv6)

Ensuite, nous devrons insérer temporairement une ligne + createUser +. Ces directives ne sont normalement pas conservées dans ce fichier, mais nous allons l’enlever à nouveau dans un instant, donc cela n’a pas trop d’importance.

L’utilisateur que nous créons sera appelé + bootstrap + et sera utilisé comme modèle pour créer notre premier «vrai» utilisateur. Pour cela, les packages SNMP effectuent un clonage des propriétés de l’utilisateur.

Lors de la définition d’un nouvel utilisateur, vous devez spécifier le type d’authentification (MD5 ou SHA), ainsi que fournir une phrase secrète qui * doit * comporter au moins 8 caractères. Si vous prévoyez d’utiliser le chiffrement pour le transfert, comme nous, vous devez également spécifier le protocole de confidentialité (DES ou AES) et éventuellement une phrase secrète de protocole de confidentialité. Si aucune phrase secrète de protocole de confidentialité n’est fournie, la phrase secrète d’authentification sera également utilisée pour le protocole de confidentialité.

Notre ligne de création d’utilisateur ressemblera à ceci:

createUser bootstrap MD5 temp_password DES

Maintenant que nous avons un nouvel utilisateur spécifié, nous devons définir le niveau d’accès que cet utilisateur aura. Nous allons configurer cela pour notre utilisateur + bootstrap +, ainsi que pour le nouvel utilisateur que nous allons créer, appelé + demo +. Nous allons leur permettre un accès en lecture et en écriture en utilisant la directive + rwuser + (l’alternative est + rouser + pour un accès en lecture seule).

Nous allons imposer l’utilisation du cryptage en spécifiant + priv + après notre utilisateur. Si nous voulions restreindre l’utilisateur à une partie spécifique de la MIB, nous pourrions spécifier l’OID de plus haut niveau auquel l’utilisateur devrait avoir accès à la fin de la ligne.

Pour nos besoins, nos deux lignes seront assez simples:

rwuser bootstrap priv
rwuser  priv

Lorsque vous avez terminé ces modifications, enregistrez et fermez le fichier.

Pour implémenter ces modifications, redémarrez le service + snmpd +:

sudo service snmpd restart

Désormais, à partir de la machine sur laquelle vous avez installé le logiciel de gestion, nous pouvons nous connecter à notre serveur d’agents pour créer notre utilisateur régulier.

Nous ferons cela en utilisant l’outil + snmpusm +, utilisé pour la gestion des utilisateurs. Pour que cela fonctionne correctement, vous devez connaître l’adresse IP de votre serveur d’agent.

Avant de commencer, nous allons parler un peu de la structure générale d’envoi d’une commande SNMP.

La structure générale des commandes SNMP

Lorsque vous utilisez la suite d’outils incluse dans le package + snmp + (la suite logicielle + net-snmp +), vous remarquerez quelques problèmes dans la manière dont vous devez appeler les commandes.

La première chose à faire est de vous authentifier auprès du démon SNMP avec lequel vous souhaitez communiquer. Cela implique généralement de fournir quelques informations. Les plus communs sont ci-dessous:

  • * -v VERSION *: Cet indicateur est utilisé pour spécifier la version du protocole SNMP que vous souhaitez utiliser. Nous utiliserons la v3 dans ce guide.

  • * -c COMMUNITY *: Cet indicateur est utilisé si vous utilisez des chaînes de communauté SNMP v1 ou v2-style pour l’authentification. Puisque nous utilisons une authentification basée sur l’utilisateur de type v3, nous n’en aurons pas besoin.

  • * -u USER-NAME *: Ce paramètre permet d’indiquer le nom d’utilisateur sous lequel vous souhaitez vous authentifier. Pour lire ou modifier quoi que ce soit en utilisant SNMP, vous devez vous authentifier avec un nom d’utilisateur connu.

  • * -l LEVEL *: Ceci est utilisé pour spécifier le niveau de sécurité auquel vous vous connectez. Les valeurs possibles sont + noAuthNoPriv + pour aucune authentification et aucun cryptage, + authNoPriv + pour l’authentification mais pas de cryptage et + authPriv + pour l’authentification et le cryptage. Le nom d’utilisateur que vous utilisez doit être configuré pour fonctionner au niveau de sécurité que vous spécifiez, faute de quoi l’authentification échouera.

  • * -a PROTOCOL *: Ce paramètre permet de spécifier le protocole authentication utilisé. Les valeurs possibles sont + MD5 + ou + SHA +. Cela doit correspondre aux informations spécifiées lors de la création de l’utilisateur.

  • * -x PROTOCOL *: Ce paramètre permet de spécifier le protocole encryption utilisé. Les valeurs possibles sont + DES + ou + AES +. Cela doit correspondre aux informations spécifiées lors de la création de l’utilisateur. Cela est nécessaire chaque fois que la spécification de privilège de l’utilisateur est suivie de + priv +, rendant le cryptage obligatoire.

  • * -A PASSPHRASE *: Ceci est utilisé pour donner le mot de passe d’authentification qui a été spécifié lors de la création de l’utilisateur.

  • * -X PASSPHRASE *: Il s’agit de la phrase secrète de chiffrement spécifiée lors de la création de l’utilisateur. Si aucun n’a été spécifié mais qu’un algorithme de cryptage a été fourni, le mot de passe d’authentification sera utilisé. Ceci est requis lorsque le paramètre + -x + est fourni ou chaque fois que la spécification de privilège d’un utilisateur est suivie d’un + priv +, nécessitant un cryptage.

En utilisant ces informations, nous pouvons commencer à construire nos commandes. Compte tenu de la manière dont nous avons configuré notre utilisateur bootstrap, les commandes que nous utiliserons avec ce compte ressembleront à ceci:

-u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password

Par exemple, depuis votre serveur de gestion, vous pouvez tester pour vous assurer que votre compte bootstrap est disponible en tapant:

snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password  1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64

La chaîne + 1.3.6.1.2.1.1.1.0 + est l’OID responsable de l’affichage des informations système. Il retournera essentiellement la sortie de + uname -a + sur le système distant.

Maintenant que nous avons vérifié que nous pouvons nous authentifier correctement auprès du serveur qui exécute le démon SNMP, nous pouvons continuer à créer notre compte utilisateur normal.

Configurer le compte d’utilisateur normal

Bien que nous ayons spécifié les privilèges du compte utilisateur + demo + dans notre fichier + snmpd.conf +, nous n’avons pas encore créé cet utilisateur. Nous allons utiliser l’utilisateur + bootstrap comme modèle pour notre nouvel utilisateur.

Sur le serveur de gestion, nous pouvons créer l’utilisateur à partir du modèle en utilisant l’outil + snmpusm + et la syntaxe générale suivante:

snmpusm   create

Donc, en utilisant ce que nous savons sur les indicateurs d’authentification que nous devons passer et en exploitant le compte d’utilisateur que nous avons déjà (+ bootstrap +), nous pouvons faire en sorte qu’un utilisateur corresponde aux privilèges utilisateur que nous avons déjà définis (+ demo +) .

La commande ressemblera à ceci:

snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password  create demo bootstrap

Vous devriez recevoir le message suivant:

User successfully created.

Nous avons maintenant un utilisateur entièrement fonctionnel appelé + demo + sur notre serveur distant. Cependant, il utilise toujours les mêmes informations d’authentification que le compte + bootstrap +. Nous devrions changer le mot de passe pour quelque chose d’autre. Cette fois, nous allons utiliser le compte + demo + pour nous authentifier. N’oubliez pas que les mots de passe * doivent * comporter au moins 8 caractères:

snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password  passwd temp_password

Vous devriez recevoir le message suivant:

SNMPv3 Key(s) successfully changed.

Nous pouvons tester nos nouveaux identifiants et mot de passe en demandant à notre serveur distant depuis combien de temps le service SNMP est en cours d’exécution. Nous allons utiliser la commande + snmpget + pour obtenir une valeur unique de l’autre machine.

Cette fois, nous tirerons parti des définitions de MIB supplémentaires que nous avons téléchargées. Nous pouvons les utiliser pour demander la valeur par nom au lieu de l’ID numérique OID.

snmpget -u demo -l authPriv -a MD5 -x DES -A  -X   sysUpTime.0

Vous devriez récupérer une valeur qui représente la dernière fois que le démon SNMP distant a été redémarré:

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (383018) 1:03:50.18

Création d’un fichier de configuration client

Vous avez probablement déjà remarqué à ce stade que les détails de l’authentification pour toutes vos commandes SNMP seront relativement statiques à chaque demande. Plutôt que de les saisir chaque fois, nous pouvons créer un fichier de configuration côté client qui contiendra les informations d’identification avec lesquelles nous nous connectons.

Le fichier de configuration du client peut être placé à deux emplacements différents en fonction de l’étendue de votre partage.

Si vous souhaitez partager vos informations de connexion avec un utilisateur valide sur votre machine de gestion, vous pouvez placer vos détails de configuration dans le fichier global + snmp.conf +. Vous devez ouvrir ce fichier avec les privilèges sudo:

sudo nano /etc/snmp/snmp.conf

Si, toutefois, vous voulez définir les informations d’authentification de votre utilisateur uniquement, vous pouvez créer un répertoire caché + .snmp + dans le répertoire de base de votre utilisateur et créer le fichier à cet emplacement:

mkdir ~/.snmp
cd ~/.snmp
nano snmp.conf

Indépendamment de votre décision sur l’emplacement de votre configuration, le contenu sera le même.

Les commandes que nous utilisons pour nous authentifier figurent dans le tableau ci-dessous. Dans la colonne de droite, vous pouvez voir les noms de directive à utiliser pour définir ces détails de configuration dans le fichier + snmp.conf +:

Command Flag Description Translated snmp.conf directive

-u

The SNMPv3 username to authenticate as.

defSecurityName

-l authPriv

The security level to authenticate with.

defSecurityLevel authPriv

-a MD5

The authentication protocol to use.

defAuthType MD5

-x DES

The privacy (encryption) protocol to use.

defPrivType DES

-A

The authentication passphrase for the supplied username.

defAuthPassphrase

-X

The privacy passphrase fro the supplied username.

defPrivPassphrase

En utilisant ces informations, vous pouvez construire un fichier + snmp.conf + approprié. Pour notre guide, cela ressemblera à ceci:

defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase
defPrivPassphrase

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Maintenant, vous pouvez émettre des commandes sans fournir les détails de l’authentification. Vous aurez seulement besoin de la commande SNMP, de l’hôte et des arguments de la commande.

Au lieu de taper:

snmpget -u  -l authPriv -a MD5 -x DES -A  -X   sysUpTime.0

Nous pouvons simplement taper:

snmpget  sysUpTime.0

Comme vous pouvez le constater, cela réduit considérablement la quantité d’informations que nous devons fournir pour chaque demande.

Supprimer le compte bootstrap

Maintenant que votre compte habituel est correctement configuré, nous pouvons supprimer le compte + bootstrap +, car il est assez peu sécurisé.

Sur votre serveur d’agent, ouvrez à nouveau le fichier + / etc / snmp / snmpd.conf + avec les privilèges sudo.

Recherchez et commentez (ou supprimez) les deux lignes que nous avons précédemment ajoutées et qui font référence à l’utilisateur + bootstrap +:

createUser bootstrap MD5 temp_password DES
rwuser bootstrap priv

Enregistrez et fermez le fichier.

Maintenant, redémarrez le démon SNMP:

sudo service snmpd restart

Ceci répondra à la recommandation de ne pas avoir de directives + createUser + dans le fichier normal + snmpd.conf +. Il supprimera également les privilèges de cet utilisateur temporaire.

Si vous souhaitez supprimer complètement l’utilisateur + bootstrap de la table usmUserTable, vous pouvez le faire en exécutant cette commande à partir du serveur de gestion:

snmpusm  delete bootstrap

Vous recevrez la réponse suivante:

User successfully deleted.

Conclusion

À ce stade, vous devez disposer d’une configuration client-serveur entièrement configurée, capable de communiquer de manière sécurisée à l’aide du protocole SNMP. Vous pouvez facilement ajouter des démons supplémentaires sur d’autres hôtes et configurer l’accès aux comptes sur l’ensemble de votre infrastructure.

Dans le prochain guide, nous passerons en revue certains des https://www.digitalocean.com/community/tutorials/how-to-use-the-net-snmp-tool-suite-to-manage-and-monitor- serveurs [l’utilisation de base des outils net-snmp] avec lesquels nous travaillons. Nous montrerons comment récupérer des valeurs une par une ou en bloc et comment modifier des données.