Ceci est une ancienne révision du document !
~~CLOSETOC~~
Nagios - Installation d'un outil de supervision
La tâche principale d'un administrateur étant le MCO (Maintient en Condition Opérationnelle), la supervision des systèmes est incontournable. Nagios offre cette possibilité.
<note important>Nagios existe en deux versions :
- Nagios Core : la gratuite.
- Nagios XI : la payante.
Ici, on utilisera Nagios Core.</note>
- Référence : Nagios
Installation
<note>Cette procédure a été testée sur une Debian 9 pour les parties serveur et client Linux, et sur un Windows 10 Pro et un Windows Server 2016 Standard pour la partie client Windows.</note> <note warning>Cette procédure nécessite des droits d'administrateur (root). Attention donc à ce que vous faîtes.</note>
Mise à jour du 15/04/2020 La procédure a été complété pour une installation sous Debian 10.3. Les modifications seront précédé de la balise Pour Debian 10 alors que les commandes pour Debian 9 seront signalées par la balise Pour Debian 9.
Comme souvent sur Linux, il nous faut d'abord mettre à jour notre machine :
apt-get update apt-get upgrade
Une fois le système à jour, on commence par installer les prérequis : Pour Debian 9
apt-get install build-essential make apache2 apache2-utils php php-gd perl libgd2-xpm-dev libapache2-mod-php libperl-dev libssl-dev daemon wget unzip openssl
Pour Debian 10
apt-get install build-essential make apache2 apache2-utils php php-gd perl libgd-dev libapache2-mod-php libperl-dev libssl-dev daemon wget unzip openssl
On crée un utilisateur nagios et un groupe nagcmd auquel on ajoutera l'utilisateur nagios et www-data :
useradd nagios groupadd nagcmd usermod -a -G nagcmd nagios usermod -a -G nagcmd www-data
Il nous faut maintenant récupérer les sources de Nagios Core sur le site de Nagios. A l'heure où j'écris ces lignes, la version la plus récentes est la 4.4.5 :
cd /tmp/ wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.5.tar.gz tar -zxvf nagios-4.4.5.tar.gz cd nagios-4.4.5/
On configure les sources en vue de l'installation :
./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd_conf=/etc/apache2/sites-enabled/
Il nous reste plus qu'à compiler et installer Nagios :
make all make install make install-init make install-config make install-commandmode make install-webconf
A ce stade Nagios est installé. Cependant il n'est pas encore utilisable. Il faut d'abord configurer certains points.
Installation des plugins de base
Pour monitorer les services de bases d'un système, Nagios à besoin de différents plugins. On peut obtenir ces plugins sur nagios-plugin.org. Actuellement, la dernière version est la 2.2.1 :
cd /tmp/ wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz tar -zxvf /tmp/nagios-plugins-2.2.1.tar.gz cd nagios-plugins-2.2.1/
Une fois de plus, on configure les sources :
./configure --with-nagios-user=nagios --with-nagios-group=nagios
Ensuite, on compile et installe :
make make install
Configuration de l'interface Web
Les données de la supervision étant sensible, il nous faut en contrôler l'accès. Généralement, cela est fait par une demande d'authentification sur l'interface Web. On va donc créer un utilisateur à cet effet :
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Nagios utilisant le module CGI, il nous faut l'activer au niveau d'apache :
a2enmod cgi
Ensuite, il faut redémarrer apache pour prendre en compte les modifications :
systemctl restart apache2
Pour permettre l'accès à Nagios depuis d'autres machines, il faut penser à paramétrer vos pare-feux. A titre d'exemple, en local avec iptables, il faudra rajouter la règle suivante :
iptables -I INPUT -p tcp --destination-port 80 -j ACCEPT
<note tip>Cette règle est basique et donnée à titre d'exemple. Je vous recommande de vous reporter aux manuels d'utilisation de vos solutions de sécurité afin de limiter l'accès à l'interface web aux seuls utilisateurs et adresses IP autorisés.</note>
Démarrage et manipulation du service
A ce stade, Nagios doit pouvoir être accessible à l'adresse http://adresse_ip_de_votre_serveur/nagios. Pour cela, il faut d'abord le démarrer :
systemctl start nagios
Pour l'arrêter :
systemctl stop nagios
Pour connaître son état :
systemctl status nagios
Pour activer son démarrage automatique lors du démarrage du système :
systemctl enable nagios
Paramétrages
Avoir un outil de supervision, c'est bien, qu'il sache ce qu'il doit monitorer, c'est mieux. Pour cela, Nagios récupère le contenu des fichiers .cfg situés dan /usr/local/nagios/etc/objects/ (chemin par défaut) et y recherche les définitions des hôtes, services, contacts… Par défaut, le dossier contient déjà des définitions regroupées par type :
[11:06:39] nekan@srv-nagios-1:/usr/local/nagios/etc/objects# ls -l total 52 -rw-rw-r-- 1 nagios nagios 6755 août 2 10:12 commands.cfg -rw-rw-r-- 1 nagios nagios 1797 août 2 10:12 contacts.cfg -rw-rw-r-- 1 nagios nagios 4777 août 2 10:12 localhost.cfg -rw-rw-r-- 1 nagios nagios 3001 août 2 10:12 printer.cfg -rw-rw-r-- 1 nagios nagios 3484 août 2 10:12 switch.cfg -rw-rw-r-- 1 nagios nagios 12533 août 2 10:12 templates.cfg -rw-rw-r-- 1 nagios nagios 3512 août 2 10:12 timeperiods.cfg -rw-rw-r-- 1 nagios nagios 4074 août 2 10:12 windows.cfg
Chaque fichier contient les définitions de base que l'on peut prendre pour exemple afin de déclarer les différents définitions dont on aura besoins (nos machines, nos services…).
Concernant l'organisation, il n'y a pas d'obligations. On peut tout déclarer dans un seul fichier, les séparer dans un fichier par type, regrouper les informations d'une machine dans un seul fichier ou encore un gros mix de tout ça.
Le plus important dans tout ça, c'est de bien vérifier les définitions que nous avons déclarées avant de relancer le service Nagios et ce, afin d'éviter les plantages. Pour cela, Nagios est livré avec une routine de vérification :
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Ce qui nous renvoie quelque chose de ce style :
Nagios Core 4.4.4
Copyright (c) 2009-present Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 2019-07-29
License: GPL
Website: https://www.nagios.org
Reading configuration data...
Read main config file okay...
Read object config files okay...
Running pre-flight check on configuration data...
Checking objects...
Checked 8 services.
Checked 1 hosts.
Checked 1 host groups.
Checked 0 service groups.
Checked 1 contacts.
Checked 1 contact groups.
Checked 24 commands.
Checked 5 time periods.
Checked 0 host escalations.
Checked 0 service escalations.
Checking for circular paths...
Checked 1 hosts
Checked 0 service dependencies
Checked 0 host dependencies
Checked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
On notera sur le retour de la console le nombre total d'avertissement et d'erreur. Si les avertissements ne sont pas bloquant, les erreurs entraîneront l'impossibilité de démarrer le service.
Pour connaître toutes les options possibles pour les définitions d'objets : Nagios
A ce stade, Nagios peut se monitorer. Mais le but de la manœuvre est plus souvent de monitorer un ensemble de machines. Pour cela, Nagios communiquera avec des agents pour récupérer les informations en provenance des autres hôtes :
- NRPE pour les hôtes Linux.
- NSClient++ pour les hôtes Windows.
NRPE (Nagios Remote Plugin Executor)
Installation sur le client
On commence d'abord par mettre à jour la machine :
apt-get update apt-get upgrade
On peut maintenant installer les paquets nécessaires :
apt-get install nagios-nrpe-server nagios-plugins
Une fois les paquets installés, il faut autoriser NRPE à dialoguer avec le serveur Nagios. On commence par éditer le fichier /etc/nagios/nrpe.cfg, dans lequel on modifiera la ligne allowed_hosts=127.0.0.1 en y ajoutant l'adresse du ou des serveurs Nagios. Par exemple allowed_hosts=127.0.0.1,192.168.1.200,10.10.10.250.
On oublie pas bien sûr de redémarrer le service pour prendre en compte les modifications
systemctl restart nagios-nrpe-server.service
Il faut aussi penser à autoriser les flux à travers le pare-feu. Nagios et NRPE communique sur le port 5666, il faut donc ouvrir ce port sur votre solution de sécurité. Par exemple, pour iptables, on utilisera la règle suivante :
iptables -A INPUT -p tcp -s adresse_ip_du_serveur_nagios --dport 5666 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
On peut personnaliser les vérifications que pourra exécuter NRPE en ajoutant une commande dans /etc/nagios/nrpe.cfg dans dans un fichier .cfg situé dans le dossier /etc/nagios/nrpe.d/. Cette commande devra avoir pour syntaxe :
command[nom]=chemin argument
- nom : le nom de la commande telle qu'elle sera appelée par le serveur Nagios.
- chemin : le chemin absolu de la commande qui sera exécuté localement par NRPE.
- argument : les arguments pour la commande locale.
Ce qui nous donnera par exemple :
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
- Nagios va appeler la commande
check_users. - NRPE va exécuter localement la commande
/usr/lib/nagios/plugins/check_usersavec les arguments-w 5et-c 10. - A la fin de l'exécution de cette commande, NRPE renverra à Nagios le résultat, soit dans notre cas, un OK si il y a moins de 5 utilisateurs connectés, un avertissement de 5 à 9 utilisateurs et un critique au delà.
Une fois les commandes ajoutées, modifiées et/ou supprimées, il faut bien penser à relancer le service NRPE pour prendre en compte la nouvelle configuration.
Installation sur le serveur Nagios
De retour sur le serveur Nagios, il faut d'abord installer le plugin :
apt install nagios-nrpe-plugin
Puis, ajouter la commande générale dans votre fichier de définitions des commandes (/usr/local/nagios/etc/objects/commands.cfg par défaut) :
nano /usr/local/nagios/etc/objects/commands.cfg
Code à rajouter :
# Définition de commande pour l'utilisation de NRPE
define command {
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$
}
Ainsi pour que Nagios appelle la commande check_users vu précédemment, il faudra définir un service pour un l'hôte en question du style :
define service {
use generic-service
host_name client-linux.shyrka.sys
service_description Current Users
check_command check_nrpe!check_users
}
Installation de NSClient++ pour un hôte Windows
Installation sur le client
On commence par aller chercher le programme sur SourceForge. Actuellement la dernière version est la 0.4.1.73.
Une fois téléchargé, on lance l'installation et on clique sur Next:
On accepte les termes de la licence et on clique sur Next :
On choisira le mode d'installation Typical :
On passe à la suite en cliquant sur Next. Pour des raisons de sécurité, on évitera de cocher la case Allow all users to write config file :
Dans la fenêtre suivante :
- On indique la ou les adresses des serveurs Nagios.
- On cochera tous les modules
- On cliquera sur
Next
<note>On a aussi la possibilité d'indiquer un mot de passe pour permettre l'accès au service. Je n'utilise pas cette option car cela implique que le mot de passe sera indiqué en clair dans les commandes qui seront déclarées sur le serveur Nagios. Je préfère placer ma sécurité dans les droits de modifications des fichiers de configurations et dans les règles de pare-feu n'authorisant l'accès au port qu'en provenance de machines spécifiques.</note>
Finalement, on peut lancer l'installation en cliquant sur Install :
On laisse le processus aller à son terme :
On finit l'installation en cliquant sur Finish :
Pour permettre une meilleure efficacité du service et notamment permettre certaines vérification, on va ouvrir les propriétés du service NSClient++ (x64) dans services.msc puis dans l'onglet Connexion, on va cocher Autoriser le service à interagir avec le Bureau :
Tout comme le NRPE sous linux, NSClient++ est livrée avec des commandes locales préconfigurées. Les paramètres et les commandes de NSClient++ sont dans le fichier C:\Program Files\NSClient++\nsclient.ini. Le manuel de référence est aussi disponible dans le même dossier (C:\Program Files\NSClient++\NSClient++ Reference Manual.pdf). Pour permettre l'ajout de scripts externes, enregistrés dans le dossier C:\Program Files\NSClient++\scripts, nous allons éditer le fichier nsclient.ini, ajouter (si elle n'existe pas encore) la section [/settings/external scripts/scripts] et indiquer les nouvelles commandes sous la forme :
nom=chemin argument
- nom : le nom de la commande telle qu'elle sera appelée par le serveur Nagios.
- chemin : le chemin relatif (par rapport à nscp.exe, soit
scripts\nom_du_script.extension) de la commande qui sera exécuté localement par NSClient++. - argument : les arguments pour la commande locale.
Par exemple : check_users=scripts\check-users.bat -w 5 -c 10
Une fois le fichier nsclient.ini modifié, il ne faut pas oublier de redémarrer le service pour prendre en compte les modifications.
Paramétrage sur le serveur Nagios
Pour bénéficier de la commande check_nt, il nous faut installer le paquet qui le contient :
apt-get install nagios-nrpe-server
On a plus qu'à définir les services de la même manière que pour check_nrpe, par exemple :
define service {
use generic-service
host_name client-windows.shyrka.sys
service_description Current Users
check_command check_nt!check_users
}
Bien sûr, on oublie pas de vérifier la configuration de Nagios et de redémarrer le service.
— Nicolas THOREZ 2019/08/02 14:15

Discussion