Superviser vos serveurs avec Nagios

Nagios est un outils de supervision de serveurs. Dans l’infrastructure Nagios, il existe deux types de machines :

  • un serveur, sur lequel est exécuté Nagios,
  • une ou plusieurs machines qui seront les clients.

La particularité de Nagios est qu’il se base sur des plugins (sondes) pour définir les services qui seront supervisés. Notre configuration fera donc intervenir NRPE (Nagios Remote Plugin Executor) pour exécuter les plugins sur les machines distantes (les clients). Les plugins pourront également être exécutés en local (sur le serveur Nagios) sans utiliser NRPE.

Configuration préalable

Avant de pour voir installer Nagios sur le serveur, nous allons mettre à jour les dépôts et installer les pré-requis :

apt update
apt install build-essential libgd2-xpm-dev openssl libssl-dev xinetd apache2-utils apache2 unzip php5 libapache2-mod-php5.

Ensuite, nous allons créer un utilisateur ’nagios’. Cet utilisateur système sera celui qui lancera les processus de Nagios :

useradd nagios
mkdir /home/nagios
chown nagios:nagios /home/nagios
groupadd nagcmd
usermod -a -G nagcmd nagios

Compilation de Nagios depuis les sources

La version de Nagios qui est disponible dans les dépôts de Debian est beaucoup trop ancienne. Pour cette raison, nous allons compiler la dernière version à partir des sources :

cd /opt/
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.2.1.tar.gz
tar xzvf nagios-4.2.1.tar.gz
cd nagios-4.2.1
./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd-conf=/etc/apache2/conf-available
make all
make install
make install-commandmode
make install-init
make install-config

Afin que les commandes de Nagios puissent être exécutées depuis le serveur web, on ajoute www-data dans le groupe de nagioscmd :

usermod -G nagcmd www-data

Si vous utilisez une machine qui utilise systemd, il va falloir générer le script de démarrage de Nagios. Pour celà, on copie de script par défaut :

cp /etc/init.d/skeleton /etc/init.d/nagios

On va ensuite modifier ce script pour l’adapter à nos besoins, en ajoutant les lignes suivantes :

DESC="Nagios"
NAME=nagios
DAEMON=/usr/local/nagios/bin/$NAME
DAEMON_ARGS="-d /usr/local/nagios/etc/nagios.cfg"
PIDFILE=/usr/local/nagios/var/$NAME.lock

Enfin, il est nécessaire de rendre le script exécutable :

chmod +x /etc/init.d/nagios

Paramétrage du serveur Web

Toujours dans le dossier d’installation, nous allons générer le fichier de configuration du VirtualHost Apache pour Nagios :

cd /opt/nagios-4.2.1
/usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-available/nagios.djeeks.com.conf

On doit modifier ce fichier afin de définir le ServerName et le DocumentRoot :

ServerName nagios.djeeks.com
...
DocumentRoot /usr/local/nagios/share

Il est également possible d’ajouter des personnalisations à ce fichier, en restreignant, par exemple, l’accès à certaines IP ou en supprimant les directives pour les versions plus anciennes qu’Apache 2.3. Il est enfin conseiller d’ajouter les directives concernant les logs.

Une fois que le fichier du VirtualHost est bien configuré, il faut activer les modules cgi et rewrite pour Apache :

a2enmod cgi
a2enmod rewrite

On crée également un mot de passe afin de restreindre l’accès à l’interface web. Pour celà, on génère le fichier htpasswd :

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Attention : Si nous avons choisi un autre utilisateur que nagiosadmin pour se connecter à l’interface web, il faut modifier le fichier /usr/local/nagios/etc/cgi.cfg.

Il ne faut pas oublier de modifier les droits d’accès à ce fichier :

chmod 640 /usr/local/nagios/etc/htpasswd.users
chown root:www-data /usr/local/nagios/etc/htpasswd.users

Une fois que tout est paramétré du côté du serveur web, on peut activer le VirualHost et recharger la configuration d’Apache :

a2ensite /etc/apache2/sites-available/nagios.djeeks.com.conf
systemctl reload apache2.service

Si on tente d’accéder au sous-domaine nagios.djeeks.com à ce moment de l’installation, il est normal que ça ne fonctionne pas. En effet, le daemon de Nagios n’est pas encore lancé et aucune configuration n’a été définie aussi bien pour le client que pour le serveur.

Installation des plugins

Pour installer les plugins de Nagios, il existe deux méthodes :

  • soit on compile les plugins à partir des sources,
  • soit on les installe depuis la version présente dans les dépôts.

Compilation des plugins Nagios

Pour l’installation des plugins Nagios depuis les sources, on se place dans le dossier /opt et on récupère l’archive :

cd /opt
wget http://nagios-plugins.org/download/nagios-plugins-2.1.3.tar.gz

Ensuite, on décompresse le fichier et on lance la compilation :

tar xvzf nagios-plugins-2.1.3.tar.gz
cd nagios-plugins-*
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl
make && make install

Cette méthode installe les plugins dans le dossier /usr/local/nagios/libexec.

Installation à partir des dépôts Debian

L’installation de ces plugins via les dépôts est beaucoup plus simple, il suffit d’exécuter cette commande :

apt install nagios-nrpe-plugin nagios-plugins nagios-plugins-basic nagios-plugins-contrib

Attention : Cette méthode installe les plugins dans un dossier différent de la méthode précende. Ici, ils sont installés dans le dossier /usr/lib/nagios/plugins. Il est donc nécessaire de modifier le fichier /usr/local/nagios/etc/resource.cfg :

USER1$=/usr/lib/nagios/plugins

Configuration du client avec NRPE

Le principe de fonctionnement de NRPE est que chaque client Nagios est un serveur NRPE. Le serveur Nagios (client NRPE) se connecte donc à chaque serveur NRPE (client Nagios) pour récupérer le résultat des sondes qui ont été exécutées en local (sur chaque client Nagios).

Configuration du client Nagios / serveur NRPE

Sur chaque client Nagios, on va installer les plugins que la machine pourra exécuter en local et le paquet pour le serveur NRPE :

apt install nagios-nrpe-server nagios-plugins nagios-plugins-basic nagios-plugins-contrib

Ensuite, on modifie le fichier /etc/nagios/nrpe.cfg :

server_address=IP_PUBLIQUE_DU_CLIENT_NAGIOS
allowed_hosts=127.0.0.1,IP_PUBLIQUE_DU_SERVEUR_NAGIOS

Ce fichier nous fourni également le numéro du port utilisé par NRPE (à la ligne server_port). Ce numéro de port va être utile afin d’ajouter une règle dans le firewall pour autoriser les communications avec le serveur Nagios :

iptables -t filter -A INPUT -s IP_SERVEUR_NAGIOS -p tcp --dport NUMERO_PORT_NRPE -j ACCEPT

Une fois les paramétrages terminés, on peut démarrer le service NRPE sur les clients Nagios :

systemctl start nagios-nrpe-server

Configuration du serveur Nagios / client NRPE

Avant de pouvoir tester les connection via NRPE, il ne faut pas oublier de démarrer Nagios sur le serveur :

/etc/init.d/nagios start

On peut également ajouter une règle dans le firewall pour chaque client (ou une règle globale si on ne précise pas d’IP de destination) :

iptables -t filter -A OUTPUT -d IP_CLIENT_NAGIOS -p tcp --dport NUMERO_PORT_NRPE -j ACCEPT

Enfin, on peut vérifier que le serveur Nagios arrive bien à contacter ses clients (via NRPE) grâce à la commande :

cd /usr/lib/nagios/plugins && ./check_nrpe -H IP_client_Nagios

Si tout fonctionne bien, cette commande doit nous renvoyer le numérode verison de NRPE.