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>

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

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 :

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

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.4 :

cd /tmp/
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.4.tar.gz
tar -zxvf nagios-4.4.4.tar.gz 
cd nagios-4.4.4/

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.

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

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é avant de limiter l'accès à l'interface web aux seuls utilisateurs et adresses IP autorisés.</note>

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

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.

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_users avec les arguments -w 5 et -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.

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
}

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 :

  1. On indique la ou les adresses des serveurs Nagios.
  2. On cochera tous les modules
  3. 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 notament 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 [External Script] 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. 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 : <code:bash>apt-get install nagios-nrpe-server</code> 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 Ngios et de redémarrer le service.

Nicolas THOREZ 2019/08/02 14:15

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • linux_nagios.1564751805.txt.gz
  • Dernière modification : 2019/08/02 13:16
  • (modification externe)