Installation de SNMP sous Linux
Sommaire
I. Présentation de SNMP
SNMP est un protocole réseau qui permet le monitoring et la supervision d'éléments systèmes et réseau. Généralement, un serveur de supervision utilise SNMP pour connaitre rapidement l'état du parc informatique (switch, routeur, serveurs) comme l'occupation RAM, CPU, Disque, etc.
Dans ce tutoriel, nous allons voir comment installer SNMP sous Linux, une machine Linux avec SNMP d'installé pourra alors être questionnée par une autre machine afin qu'elle puisse la superviser par exemple. Nous allons voir comment installer SNMP sous Debian 8 et sous CentOS 7.
Il est important de noter que les versions des dépôts sont différents sous Debian 8 (version 5.7.2.1 de net-snmp) et sous CentOS 7 (version 5.7.2 de net-snmp). Je vais détailler pour chaque étape, les différences de configuration entre les deux.
II. Installation de SNMPD
Il faut bien entendu commencer par installer le service SNMP sur notre machine Linux. Le service se mettra alors en écoute sur le port 161 en UDP afin d'être prêt à répondre aux sollicitations extérieures. Sous Debian, voici la commande à saisir
apt-get install snmpd snmp
Sous CentOS :
yum install net-snmp net-snmpd-utils
Net-snmp va alors s'installer, ainsi que ses dépendances.
Pour CentOS, il faudra également activer le démarrage du service SNMP au démarrage du serveur avec la commande suivante :
systemctl enable snmpd
Vous remarquerez également que je vous fait volontairement installer la partie "cliente" de SNMP sur vos serveurs via "net-snmpd-utils" et "snmp" . Cela permet de diagnostiquer plus rapidement des problèmes SNMP sur vos serveurs. Mais ce n'est pas obligatoire.
III. Mise en route
Sur les deux distributions, nous pourrons ensuite voir si le service est actif :
systemctl status snmpd
Si ce n'est pas le cas, nous pourrons le démarrer :
systemctl start snmpd
Enfin, une fois celui-ci démarré, nous verrons qu'il est actif sur le port UDP 161, cela avec la commande "ss" qui permet de lister les ports en écoute :
ss -ulnp
Pour détailler cette commande :
- l'option "u" permet de lister les ports UDP uniquement
- l'option "l" permet de lister les ports en écoute ("Listening" )
- l'option "n" permet d'afficher les numéros de ports et non leur correspondance (exemple : afficher "22" plutôt que "SSH" )
- l'option "p" permet d'afficher les processus correspondants aux ports en écoute
Dans tous les cas, nous devrions avoir quelque chose qui ressemble à cela :
Ce n'est pas le cas sous Centos, mais sous Debian, on voit ici que le port 161 est bien écoute en UDP, mais uniquement sur 127.0.0.1, ce qui empêchera les communications venant de l'extérieur. Si vous êtes sur Debian, pour ouvrir l'écoute sur l'extérieur, il faut aller modifier le fichier de configuration de snmp : /etc/snmp/snmpd.conf. On va alors voir dès les premières lignes, celles qui nous intéressent :
# 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) #agentAddress udp:161,udp6:[::1]:161
La documentation est ici assez explicite, nous allons commenter la ligne suivante :
agentAddress udp:127.0.0.1:161
Puis ajouter celle-ci :
agentAdrress udp:161
Ici, je mets en écoute mon service SNMPD sur le port 161 en UDP seulement pour l'IPv4. S'en suivra un redémarrage de SNMP
systemctl restart snmpd
Si vous êtes sous CentOS, SNMP écoute par défaut sur l'extérieur, donc tout va bien !
IV. Configuration basique
Nous allons maintenant effectuer quelques configurations basiques, notre service SNMP écoute maintenant les sollicitations extérieures, mais il reste quelques changements à faire dans la configuration pour qu'il soit pleinement opérationnel. Notamment l'ouverture de certaines branches du MIB.
Configuration basique de SNMP sous CentOS 7
Dans le fichier /etc/snmp/snmpd.conf à la ligne 41, nous allons changer la "community" . La community est une sorte de "mot de passe" qui va permettre de restreindre l'accès aux informations fournis par les serveurs SNMP. Par défaut, cette community est généralement "public" , c'est pourquoi il est recommandé de changer, autrement, n'importe qui dans votre réseau pourra alors questionner vos serveurs sur leurs états de santé :
# First, map the community name "public" into a "security name" # sec.name source community com2sec notConfigUser default masociete
Dans le bloc ci-dessus, j'ai remplacé "public" , par "masociete" pour vous donner un exemple.
Il est également nécessaire de corriger les lignes 55 et 56 pour qu'elles ressemblent à cela :
view systemview included .1.3.6.1.2.1 view systemview included .1.3.6.1.2.1.25.1
Enfin, afin d'ouvrir certaines informations et de permettre qu'elles soient transmises via SNMP, nous allons décommenter les lignes suivantes :
- lignes 85
- lignes 122 à 147
- lignes 151
Aux lignes 162 et 163, il peut être utile de mettre les valeurs propres à votre serveur, par exemple :
# It is also possible to set the sysContact and sysLocation system # variables through the snmpd.conf file: syslocation Serveur IT-Connect 01 syscontact [email protected]
Une fois tout cela fait, on pourra redémarrer SNMP pour recharger la configuration modifiée ("systemctl restart snmpd" ), puis passer à la phase de test de notre service SNMP.
Configuration basique de SNMP sous Debian 8
Comme pour CentOS7, nous allons aller modifier le fichier /etc/snmp/snmpd.conf, on commence par également changer le nom de la community à la ligne 52 :
rocommunity masociete default -V systemonly
Également à la ligne 54 si vous avez IPv6 d'actif. On va également remplir les informations permettant d'identifier l'administrateur à la ligne 81 :
sysLocation Serveur IT-Connect 01 sysContact [email protected]
Une fois tout cela fait, on pourra redémarrer SNMP pour recharger la configuration modifiée ("systemctl restart snmpd" ), puis passer à la phase de test de notre service SNMP.
V. Test de communication
Nous allons maintenant effectuer quelques tests pour vérifier que notre service SNMP est fonctionnel. Étant donné que nous avons installé la partie "client" de SNMP, on peut tester cela en localhost pour l'instant, en utilisant la commande "snmpwalk" :
snmpwalk -v1 127.0.0.1 -c masociete
Noté que 127.0.0.1 signifie "moi même". Je ne fais rien transiter sur le réseau pour l'instant. Également, "masociete" est la community que j'ai mis dans la configuration, pensez à mettre la valeur que vous avez vous même saisie. Dans ma commande je ne demande pas d'OID spécifique, si mon service est fonctionnel, je vais avoir en retour un ensemble d'informations relatives à mon système :
.1.3.6.1.2.1.1.1.0 = STRING: Linux itc-serveur-02 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 .1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.8072.3.2.10 .1.3.6.1.2.1.1.3.0 = Timeticks: (161275) 0:26:52.75 .1.3.6.1.2.1.1.4.0 = STRING: [email protected] (configure /etc/snmp/snmp.local.conf) .1.3.6.1.2.1.1.5.0 = STRING: itc-serveur-02 .1.3.6.1.2.1.1.6.0 = STRING: Serveur IT-Connect 01 (edit /etc/snmp/snmpd.conf) .1.3.6.1.2.1.1.8.0 = Timeticks: (3) 0:00:00.03 .1.3.6.1.2.1.1.9.1.2.1 = OID: .1.3.6.1.6.3.11.3.1.1 .1.3.6.1.2.1.1.9.1.2.2 = OID: .1.3.6.1.6.3.15.2.1.1 .1.3.6.1.2.1.1.9.1.2.3 = OID: .1.3.6.1.6.3.10.3.1.1 .1.3.6.1.2.1.1.9.1.2.4 = OID: .1.3.6.1.6.3.1 .1.3.6.1.2.1.1.9.1.2.5 = OID: .1.3.6.1.2.1.49 .1.3.6.1.2.1.1.9.1.2.6 = OID: .1.3.6.1.2.1.4 .1.3.6.1.2.1.1.9.1.2.7 = OID: .1.3.6.1.2.1.50 .1.3.6.1.2.1.1.9.1.2.8 = OID: .1.3.6.1.6.3.16.2.2.1 .1.3.6.1.2.1.1.9.1.2.9 = OID: .1.3.6.1.6.3.13.3.1.3 .1.3.6.1.2.1.1.9.1.2.10 = OID: .1.3.6.1.2.1.92 .1.3.6.1.2.1.1.9.1.3.1 = STRING: The MIB for Message Processing and Dispatching. .1.3.6.1.2.1.1.9.1.3.2 = STRING: The management information definitions for the SNMP User-based Security Model. .1.3.6.1.2.1.1.9.1.3.3 = STRING: The SNMP Management Architecture MIB. .1.3.6.1.2.1.1.9.1.3.4 = STRING: The MIB module for SNMPv2 entities .1.3.6.1.2.1.1.9.1.3.5 = STRING: The MIB module for managing TCP implementations .1.3.6.1.2.1.1.9.1.3.6 = STRING: The MIB module for managing IP and ICMP implementations .1.3.6.1.2.1.1.9.1.3.7 = STRING: The MIB module for managing UDP implementations .1.3.6.1.2.1.1.9.1.3.8 = STRING: View-based Access Control Model for SNMP. .1.3.6.1.2.1.1.9.1.3.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering. .1.3.6.1.2.1.1.9.1.3.10 = STRING: The MIB module for logging SNMP Notifications. ...
Si je veux une information plus spécifique, comme la description de mon système, je peux le demander également, par exemple :
snmpwalk -v1 127.0.0.1 -c masociete .1.3.6.1.2.1.1.1.0
La compréhension des OID et MIB peut être difficile lorsque l'on aborde SNMP, j'ai pour habitude d'utiliser l'option "-On" de snmpwalk qui permet d'afficher les OID dans leur forme numérique, qui sont plus facile à écrire.
Le tutoriel porte sur l'installation de SNMP, je n'irai donc pas m'aventurer sur les explications concernant les OID/MIB ici, mais sachez que l'on peut obtenir un grand nombre d'informations via SNMP, parfois la configuration devra être modifiée pour permettre la réponse à certaines requêtes SNMP. Il s'agira la plupart du temps d'ouvrir de nouvelle branche de notre MIB pour avoir accès à plus d'informations.
Pour terminer, vous pourrez normalement effectuer une requête similaire à distance, à travers le réseau (c'est à dire depuis une autre machine) si vous remplacer "127.0.0.1" par l'IP de la machine sur laquelle vous avez installé votre service SNMP.
En cas de problème :
- Vérifiez la connectivité réseau de vos deux machines, dans un premier temps via un ping
- Vérifiez si votre pare-feu (netfilter, iptables, nftables) ne bloque pas les paquets en entrée ou en sotie
- Vérifiez que votre service est bien en écoute sur le bon port, la bonne interface réseau, la bonne IP (v4, v6), notamment avec la commande "ss" vu dans l'article
- Vérifiez que les OID basiques soient joignables avant de questionner des OID plus spécifiques.
En espérant que tout cela soit clair et compréhensible ! Si vous avez des problèmes ou des questions, n'hésitez pas à utiliser notre forum.
Bonjour,
Merci pour ce tuto. Rien a dire.
J’ai installe snmp sur une vm debian tout est nickel.
Je voudrais savoir si je veux effectuer un test sur le reseau il faut installer snmp sur l’autre machine?
Merci
Grand merci pour ce tuto (et d’autres qui ont aussi pu m’aider).
Ne marche qu’avec Debian Jessie comme mentionné (forcement lorsqu’on essaye quand même sur Debian Wheezy afin de ne pas upgrader son serveur on s’arrache un peu les cheveux).
Salut les gars,
une petite faute de frappe au début de l’article : agentAdrress udp:161 au lieu de agentAddress
à plus tard.
Bonjour !
Je bosse sur un serveur Nagios, sous Debian 8.
J’ai suivi tout ce tuto, j’arrive à avoir les données du snmpwalk -v1 127.0.0.1 -c masociete mais un vilain Timeout: No Response from 192.168.1.171 lorsque je met l’IP de mon switch 🙁
J’arrive pourtant à le ping. Ceci veut bien dire que mon switch ne renvoi rien vers le snmp ?
Tout cela est encore un peu flou pour moi, j’attend votre aide avce impatience :$
Bonjour.
Le problème vient de ton switch qui n’a pas le SNMP d’activé, je te conseil de tester le snmp avec les deux versions. « snmpwalk -c masociete -v 2c IP ».
Si dans ce cas tu n’obtiens toujours pas de réponse, connecte toi à l’interface de ton switch et active SNMP car sur certains modèles SNMP est désactivé par défaut.
Bonjour vous avez utiliser nagios pour superviser quoi exactement? merci
Tres bon tuto, tiens bon mon ami…
Bonjour,
Merci infiniment, je me demandait pourquoi je me faisait jeter :
SNMP TABLE ERROR : No response from remote host
SNMP REQUEST ERROR : No response from remote host
« Ce n’est pas le cas sous Centos, mais sous Debian, on voit ici que le port 161 est bien écoute en UDP, mais uniquement sur 127.0.0.1 »
Il fallait le savoir 🙂
Bonne continuation pour le blog !
Bonjour,
J’ai configuré comme dit dans l’article sur une VM CentOS7, et pourtant j’ai cette erreur pour le contrôle de l’espace disque sur « / »:
Disk CRITICAL – no output (-p number expected… it doesn’t exist, try another disk number)
Et quand je lance la commande de check dans le terminal depuis le centreon:
[root@Centeon ~]# /usr/lib/nagios/plugins/check_centreon_snmp_remote_storage -H 192.168.0.17 -s
hrStorage 3 ::
Aucune partition n’est remonté? comment cela se fait-il?
J’ai également le Load average qui déconne (Load average: , , .).
Il n’y a que la Ram qui fonctionne.
Sous Ubuntu/Debian aucun problème par contre
Merci si quelqu’un à la réponse, je galère sur ce problème depuis un moment.
Bonjour,
j’ai une question concernant une sorte d’allias sur l’oid de base.
je m’explique j’ai énormément de script qui tournais avec beaucoup de commande snmpwalk.
sauf que chaque ligne de commande snmpwalk je ne n’avais jamais l’oid complet mais cela commençais par entreprises.1.5.10….. entreprises était donc une sorte allias de 1.3.6.1.4.1
il m’ont mis une machine toutes neuve et les script fonctionne plus sauf si je remplace entreprises par 1.3.6.1.4.1
comment retrouver ca sous debian
Merci
Merci beaucoup pour ce tuto.
Il m’a permit de finir la supervision un projet scolaire important pour obtenir mon diplôme de BTS 🙂
Merci beaucoup,
c’était utile pendant ma classe de Supervision ^^
Merci j’étais en galère
Bonjour,
La ligne d’installation sur CentOS pour net-snmp -utils n’est pas correcte.
net-snmpD-utils -> net-snmp-utils