Cette page a pour but de décrire la mise en place d'une configuration minimale SNMP pour un serveur Linux supervisé par le pack linux-by-SNMP__shinken.
La supervision d'un serveur Linux supervisé par un Poller Shinken se fait par requête/réponse SNMP.
|
Il est donc essentiel de correctement installer et configurer l'agent SNMP.
L'agent SNMP sous linux à installer provient du paquet net-snmp.
Il s'installe de la façon suivante :
# Ubuntu, Debian apt-get install snmpd # RHEL, Alma, Rocky, Centos, Fedora, OpenSUSE yum -y install net-snmp # Arch, Manjaro pacman -Syy net-snmp |
Des erreurs peuvent occurrer lors de cette étape avec Alma Linux. Se référer en cas d'erreur à la page Les erreurs lors de la configuration d'un serveur Linux à configurer pour le pack linux-by-SNMP__shinken. |
Vous pouvez également installer le paquet net-snmp-utils ( Utilitaires de gestion de réseau utilisant SNMP, issus du projet NET-SNMP ). L'installation de ce paquet est optionnelle pour le fonctionnement du pack.
# Ubuntu, Debian apt-get install snmp # RHEL, Alma, Rocky, Centos, Fedora, OpenSUSE yum -y install net-snmp-utils # Arch, Manjaro # Les utilitaires sont déja installés avec le packet net-snmp |
Une fois installé, vous pouvez activer le service snmpd :
systemctl enable snmpd systemctl start snmpd |
Sur certains systèmes, le firewall peut bloquer SNMP. Il faut donc autoriser le trafic sur le port 161/UDP utilisé par SNMP ( ici le port par défaut est utilisé, si vous avez configuré votre propre port, remplacez 161 par le vôtre ).
Ces commandes sont à effectuer avec un utilisateur ayant les droits root. |
Sur les systèmes Ubuntu / Debian / Fedora ( avec ufw ) :
Exécuter la commande suivante :
ufw status verbose |
Vérifier qu'une règle autorise l'accès au port 161 en UDP aux IP des polleurs shinken :
Exemple de retour valide :
Status: active To Action From -- ------ ---- 161/udp ALLOW Anywhere 161/udp (v6) ALLOW Anywhere (v6) |
Sur les systèmes RHEL / Alma / Rocky / Centos / Fedora / OpenSUSE ( avec firewalld ) :
Exécuter la commande suivante :
firewall-cmd --list-all |
Vérifier que "snmp" se trouve dans "services" OU que le port 161/UDP est présents dans "ports"
Exemple de retour valide :
public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: cockpit dhcpv6-client ntp snmp ssh ports: 80/tcp 7765/tcp 7766/tcp 7767/tcp 7768/tcp 7769/tcp 7770/tcp 7771/tcp 7772/tcp 7773/tcp 7777/tcp 7780/tcp 50000/tcp protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: |
Sur les systèmes Ubuntu / Debian / Fedora ( avec ufw ):
ufw allow 161/udp ufw reload |
Sur les systèmes RHEL / Alma / Rocky / Centos / Fedora / OpenSUSE ( avec firewalld ) :
firewall-cmd --permanent --add-service=snmp firewall-cmd --reload |
Pour éviter de faire manuellement la configuration, le pack met à disposition deux scripts distincts afin de configurer un serveur Linux à superviser :
configure-host-SNMPv1v2.sh : pour configurer une supervision minimale en SNMP v1 et v2.configure-host-SNMPv3.sh : pour configurer une supervision minimale en SNMP v3.Ces scripts utilisent des templates de configuration fournis avec le pack :
snmpd-template-v1v2.conf
snmpd-template-v3.conf
Il n’est pas possible d’appliquer les deux configurations en même temps : vous devez choisir entre SNMP v1/v2 ou SNMP v3 selon vos besoins. |
Les scripts permettent de REMPLACER la configuration existante par la configuration minimale que nous livrons en SNMP, v1, v2 ou v3, et de faire fonctionner les checks du pack.
Si vous avez déjà une configuration SNMP fonctionnel, N'UTILISEZ PAS le script de configuration, car il va écraser votre configuration actuelle. Dans ce cas, il est plus logique de suivre la documentation de configuration pas à pas, pour vérifier que chaque autorisation nécessaire au pack est possible. |
Les scripts sont à exécuter en local sur le serveur Linux à superviser.
|
Avant d'exécuter le script choisi, il est nécessaire de :
Avant de déployer le script de configuration sur plusieurs serveurs Linux à superviser, il est fortement conseillé de :
|
Chaque script va ÉCRASER le fichier ("/etc/snmp/snmpd.conf") et le remplacer par le template correspondant.
Les scripts peuvent être exécutés simplement avec l'option :
--override-default-conf |
Dans ce cas, les valeurs par défaut fournies dans le pack seront utilisées ( identiques à celles définies dans les modèles de supervision ).
=> Aucune configuration supplémentaire pour les paramètres d'authentification n'est nécessaire.
Cependant, il est vivement recommandé de personnaliser ces paramètres, en particulier les identifiants SNMP (communautés, utilisateurs, mots de passe…). |
Exemple SNMPv1v2 :Si vous souhaitez utiliser uniquement les paramètres par défaut du pack, exécutez :
Cette commande configure immédiatement l’hôte avec la communauté Si vous voulez adapter la configuration à votre environnement, vous pouvez surcharger certains paramètres en ligne de commande. Options disponibles :
Exemple avec une communauté personnalisée :
|
Exemple SNMPv3 :De la même manière, pour appliquer directement la configuration SNMPv3 avec les valeurs par défaut du pack, utilisez :
Les identifiants utilisés seront alors :
Options disponibles :
Dans la majorité des cas, vous devrez définir vos propres identifiants SNMPv3 afin d’assurer la sécurité et l’adaptation à votre environnement.
|
N'hésitez pas à vous approprier la configuration avant d'exécuter le script, en modifiant le fichier "snmpd-template-v1v2.conf" ou "snmpd-template-v3.conf" dans le dossier "supervised-host/conf" afin que la configuration s'adapte à vos besoins.
Une fois SNMP configuré, selon le mode d'authentification choisi :
Il est possible que votre serveur Linux supervisé soit configuré avec SELinux et que certains checks du pack n'aient pas les permissions d'accéder aux ressources nécessaires.
Dans ce cas, vous pouvez exécuter l’un des scripts avec l’option --configure-selinux afin d’ajouter les règles adaptées au service SNMP (snmpd).
./configure-host-SNMPv3.sh --configure-selinux |
Distributions RHEL |
Vous pouvez vérifier si SELinux est activé avec la commande :
Vous devriez observer parmi le résultat les ligne suivante :
RÉSOLUTION MANUELLE : Sur l'hôte distante, exécutez les commandes suivantes :
Dans le fichier, remplissez et sauvegardez :
Puis exécutez :
Ces commandes vont compiler, empaqueter et installer le module SELinux créé. |
Le fichier principal de configuration SNMP est : "/etc/snmp/snmpd.conf".
Par précaution, faîtes une copie puis éditez le fichier de configuration :
cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak vim /etc/snmp/snmpd.conf |
Si vous n'avez pas déjà de configuration SNMP,
Si vous n'avez jamais configuré le serveur SNMP ( vous avez le fichier par défaut ), vous pouvez utiliser la configuration suivante.
Cette configuration minimale offre un accès en lecture à l'agent SNMP supportant le v1, v2 ( v2c ) et v3 ( v3 ). |
# sec.name source community com2sec notConfigUser default public # groupName securityModel securityName group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser group notConfigGroup usm shinken # name incl/excl subtree mask(optional) view shinken included .1.3.6.1 # group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact shinken none none rouser shinken # Inclus la configuration necessaire pour le bon fonctionnement des checks. includeDir /etc/snmp/shinken |
Cette configuration définit :
Ensuite, il est NÉCESSAIRE de suivre :
|
Si vous avez déjà votre propre configuration SNMP personnalisée, ou que vous avez des besoins spécifiques, vous pouvez suivre la configuration pas à pas.
Vous trouverez également la documentation officielle de la configuration snmpd ici.
Il est possible de passer cette étape si vous souhaitez uniquement configurer la connexion SNMPv3.
La ligne suivante permet de créer une communauté, ici "public" et de l'associer à un nouveau nom de sécurité.
#### # First, map the community name "public" into a "security name" # sec.name source community com2sec notConfigUser default public |
Par défaut, la communauté est définie à public dans les modèles de supervisions du pack.
|
Il est possible de changer le champ "source" pour restreindre l'accès à la communauté définit, pour une adresse ou une plage d'adresse.
|
Ensuite, il est nécessaire de rattacher le nom de sécurité crée à un groupe, et à un modèle de sécurité.
# groupName securityModel securityName group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser |
Il est possible de passer cette étape si vous souhaitez uniquement configurer la connexion SNMPv1v2.
La connexion SNMP v3 nécessite la mise en place d'un utilisateur qui sera utilisé pour se connecter sur les hôtes supervisés.
Voici un exemple de création d'un utilisateur sur la machine supervisée qui sera interrogée par le pack en SNMP v3.
Arrêtez le service SNMP pour pouvoir lancer la commande de création d'un utilisateur :
service snmpd stop |
Créez vote utilisateur avec ses informations d'identification :
net-snmp-create-v3-user -ro -A shinkenpassword -a SHA -X shinkenencryptionkey -x AES shinken |
Redémarrez le service SNMP :
service snmpd start |
À noter qu'ici, nous avons défini :
Ces paramètres sont par défaut dans le pack et seront utilisés dans les modèles de supervisions pour interroger les équipements supervisés. Si vous créez vos propres paramètres, il faudra donc les modifier dans l'interface de configuration. |
Ensuite, il est nécessaire de rattacher l'utilisateur crée à un groupe, et à un modèle de sécurité.
# groupName securityModel securityName group notConfigGroup usm shinken |
usm signifie User Security Model et a été introduit et utilisé pour SNMP v3 |
Quelle que soit la version de SNMP configuré, V1, V2 ou V3, il est essentiel de configurer l'accès aux données.
Une fois les utilisateurs, noms de sécurités, et groupes créés, il faut ajouter une vue pour leur donner accès aux données.
# name incl/excl subtree mask(optional) view shinken included .1.3.6.1 |
Ici la vue "shinken" définit l'accès à l'arbre ".1.3.6.1". L'ensemble des OIDs qui commencent par ".1.3.6.1" sont donc inclus. |
Pour finir, il faut donner l'accès à la vue au groupe définit plus tôt.
# group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact shinken none none |
Ici seulement les droits de lectures ont été donnés au groupe "notConfigGroup" |
Sur votre machine locale, vous pouvez exécuter les commandes suivantes pour tester votre configuration SNMP.
Tester la configuration v2 ( les paramètres d'authentification peuvent être à changer ) :
snmpwalk localhost -v2c -c public 1.3.6.1.4.1 |
Le résultat attendu est une longue liste d'OID et de leurs valeurs associés, comme ci-dessous :
UCD-SNMP-MIB::memIndex.0 = INTEGER: 0 UCD-SNMP-MIB::memErrorName.0 = STRING: swap UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 5119996 kB UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 4175664 kB UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 1820668 kB UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 106600 kB ... |
Sur votre machine locale, vous pouvez exécuter les commandes suivantes pour tester votre configuration SNMP.
Tester la configuration v3 ( les paramètres d'authentification peuvent être à changer ) :
# Tester authPriv snmpwalk localhost -v3 -l authPriv -u shinken -a SHA -A "shinkenpassword" -x AES -X "shinkenencryptionkey" 1.3.6.1.4.1 # Tester authNoPriv snmpwalk localhost -v3 -l authNoPriv -u shinken -a SHA -A "shinkenpassword" 1.3.6.1.4.1 # Tester noAuthNoPriv snmpwalk localhost -v3 -l noAuthNoPriv -u shinken 1.3.6.1.4.1 |
Le résultat attendu est une longue liste d'OID et de leurs valeurs associés, comme ci-dessous :
UCD-SNMP-MIB::memIndex.0 = INTEGER: 0 UCD-SNMP-MIB::memErrorName.0 = STRING: swap UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 5119996 kB UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 4175664 kB UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 1820668 kB UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 106600 kB ... |
Les checks du pack linux-by-SNMP__shinken nécessitent la configuration ci-dessous pour fonctionner.
# linux-by-SNMP__shinken snmpd configuration file
# This file is essential for checks to work
# The file must be installed on hosts supervised by Shinken
# It must be included from the main snmpd configuration file
# check : Disks Usage by SNMP
includeAllDisks 10%
# check : Ntp Sync by SNMP
extend shinken__linux-by-snmp__ntp-sync__ntpq /bin/sh -c "export LC_LANG=C && unset LANG && ntpq -p ; date +'%H:%M:%S.%3N'"
# check : Ntp Sync Chrony by SNMP
extend shinken__linux-by-snmp__ntp-sync-chrony__chronyc /bin/sh -c "export LC_LANG=C && unset LANG && chronyc tracking ; date +'%H:%M:%S.%3N'"
# check : Stats CPU by SNMP
extend shinken__linux-by-snmp__stats-cpu__processes-cpu-time /bin/sh -c "export LC_LANG=C && unset LANG && awk '{ut[\$1]=\$14; st[\$1]=\$15} END { system(\"sleep 1\"); for (p in ut) { getline < (\"/proc/\" p \"/stat\"); split(\$0, d, \" \"); printf \"%s %d %d %d %d\\n\", p, ut[p], st[p], d[14], d[15] } }' /proc/[0-9]*/stat"
extend shinken__linux-by-snmp__stats-cpu__processes-cpu /bin/sh -c "export LC_LANG=C && unset LANG && ps -eo pcpu,pid,args --sort=-pcpu --no-headers"
extend shinken__linux-by-snmp__stats-cpu__frequency /bin/sh -c "export LC_LANG=C && unset LANG && cat /proc/cpuinfo | grep 'cpu MHz' | uniq | cut -d ' ' -f 3"
extend shinken__linux-by-snmp__stats-cpu__mpstat /bin/sh -c "export LC_LANG=C && unset LANG && mpstat -P ALL 1 1"
|
Copiez cette configuration et enregistrez-la dans un fichier : "/etc/snmp/shinken/linux-by-SNMP__shinken.conf"
mkdir -p /etc/snmp/shinken/ vim /etc/snmp/shinken/linux-by-SNMP__shinken.conf |
Il faut ensuite inclure ce fichier depuis la configuration principale snmpd.
Dans le fichier "/etc/snmp/snmpd.conf" :
vim /etc/snmp/snmpd.conf |
Assurez vous d'avoir la ligne suivante, sinon ajoutez la :
includeDir /etc/snmp/shinken |
Certain checks nécessitent des dépendances sur le serveur Linux à superviser. Il faut les installer pour leur bon fonctionnement.
Le check CPU Stats SNMPvX utilise le paquet SysStat, nécessaire au bon fonctionnement du check. Il faut l'installer avec la commande suivante :
# Debian, Ubuntu apt-get install sysstat # RHEL, Alma, Rocky, Centos, Fedora, OpenSUSE yum install sysstat # Arch, Manjaro pacman -Syy sysstat |
Pour toute erreur survenue lors de l'exécution des checks, voir la page Erreurs du pack linux-by-SNMP__shinken
La page suivante répertorie certaines erreurs qui peuvent intervenir lors de la configuration : Les erreurs lors de la configuration d'un serveur Linux à configurer pour le pack linux-by-SNMP__shinken