Nagios 4.0.x sur Debian & Nginx
Nagios est un logiciel de supervision destiné à contrôler un ou plusieurs serveurs afin de remonter d’éventuels problèmes avant que les clients, utilisateurs, etc. ne le fassent. Il peut envoyer des notifications de différentes façons (email, SMS, messagerie instantanée, etc…). Les informations d’état courants, les historiques et les rapports peuvent être consultés à partir d’un simple navigateur.
Nagios est capable entre autre de :
-
vérifier les services réseau (SMTP, HTTP, FTP, etc.)
surveiller les ressources des hôtes (charge CPU, RAM, espace disque, etc.)
contrôler les équipements (CPU, ventilateurs, etc.)
Cet article, le premier de la série, présente l’installation de Nagios Core, le moteur du service accompagné d’une interface web, sur Debian 7.5 et un serveur Nginx. Il s’inscrit dans la continuité de la série des Outils Web d’Administration et en reprend donc la logique de configuration (zone d’admin ssl, etc.). N’hésitez pas à relire l’introduction pour plus de détails.
Environnement
OS : Debian 7.5 stable (Wheezy) (64bits)
Serveur Web : nginx/1.6.0
PHP : 5.5.13
J’ai réalisé ce tutoriel sur un VPS classic d’OVH à 2.4€ par mois. C’est un environnement parfait pour faire tourner ses outils d’administration et de supervision à condition de ne pas avoir des centaines de serveurs.
Pré-Requis à la Compilation de Nagios
On commence par une rapide installation des quelques packages nécessaires à la compilation.
1 2 3 4 | root@server:~# apt-get install build-essential libgd2-xpm libssl-dev Reading package lists... Done Building dependency tree Reading state information... Done |
Et on crée un utilisateur Nagios. Il s’agit de l’utilisateur du service Nagios qui tournera en tâche de fond sur le serveur :
1 2 3 4 5 6 7 | root@server:~# groupadd -g 9000 nagios root@server:~# groupadd -g 9001 nagcmd root@server:~# useradd -u 9000 -g nagios -G nagcmd -d /usr/local/nagios -c 'Nagios Admin' nagios root@server:~# adduser www-data nagcmd Adding user `www-data' to group `nagcmd' ... Adding user www-data to group nagcmd Done. |
Compilation de Nagios
On récupère les sources de la dernière version de Nagios 4 sur SourceForge. A l’heure actuelle, il s’agit de la version 4.0.7 là où Debian n’intègre dans ses packages que la 3.4.1 !
Toutes les commandes suivantes sont passées depuis le répertoire /root.
1 2 3 | root@server:~# wget http://sourceforge.net/projects/nagios/files/nagios-4.x/nagios-4.0.7/nagios-4.0.7.tar.gz [...] 2014-06-23 21:02:47 (9,86 MB/s) - `nagios-4.0.7.tar.gz' saved [1798034/1798034] |
On configure dans un premier temps la compilation de Nagios avec les options suivantes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | root@server:~# tar xzf nagios-4.0.7.tar.gz root@server:~# cd ./nagios-4.0.7/ root@server:~/nagios-4.0.7# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagcmd [...] *** Configuration summary for nagios 4.0.7 06-03-2014 ***: General Options: ------------------------- Nagios executable: nagios Nagios user/group: nagios,nagios Command user/group: nagios,nagcmd Event Broker: yes Install ${prefix}: /usr/local/nagios Install ${includedir}: /usr/local/nagios/include/nagios Lock file: ${prefix}/var/nagios.lock Check result directory: ${prefix}/var/spool/checkresults Init directory: /etc/init.d Apache conf.d directory: /etc/httpd/conf.d Mail program: /usr/bin/mail Host OS: linux-gnu IOBroker Method: epoll Web Interface Options: ------------------------ HTML URL: http://localhost/nagios/ CGI URL: http://localhost/nagios/cgi-bin/ Traceroute (used by WAP): /usr/sbin/traceroute Review the options above for accuracy. If they look okay, type 'make all' to compile the main program and CGIs. |
Et on compile enfin Nagios.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | root@server:~/nagios-4.0.7# make all [...] *** Compile finished *** If the main program and CGIs compiled without any errors, you can continue with installing Nagios as follows (type 'make' without any arguments for a list of all possible options): make install - This installs the main program, CGIs, and HTML files make install-init - This installs the init script in /etc/init.d make install-commandmode - This installs and configures permissions on the directory for holding the external command file make install-config - This installs *SAMPLE* config files in /usr/local/nagios/etc You'll have to modify these sample files before you can use Nagios. Read the HTML documentation for more info on doing this. Pay particular attention to the docs on object configuration files, as they determine what/how things get monitored! make install-webconf - This installs the Apache config file for the Nagios web interface make install-exfoliation - This installs the Exfoliation theme for the Nagios web interface make install-classicui - This installs the classic theme for the Nagios web interface |
Il ne reste plus qu’à suivre les instructions ci-dessus pour installer Nagios :
1 2 3 4 5 6 7 8 | root@server:~/nagios-4.0.7# make install root@server:~/nagios-4.0.7# make install-init root@server:~/nagios-4.0.7# make install-commandmode root@server:~/nagios-4.0.7# make install-config root@server:~/nagios-4.0.7# make install-webconf /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/httpd/conf.d/nagios.conf /usr/bin/install: cannot create regular file `/etc/httpd/conf.d/nagios.conf': No such file or directory make: *** [install-webconf] Error 1 |
Oups, Apache n’est pas installé sur le serveur d’où l’erreur avec make install-webconf
. Remarquez, si vous souhaitez utiliser apache, il n’est jamais trop tard pour un apt-get purge nginx && apt-get install apache
mais ça serait bien dommage.
On lance maintenant le service Nagios, et si tout se passe bien :
1 2 | root@server:~/nagios-4.0.7# service nagios start Starting nagios: done. |
Configurer Nginx pour Nagios
En s’inspirant de la config apache qui se trouve dans ./sample-config/httpd.conf
on va recréer une config Nginx. Nagios utilise des scripts CGI. En plus des packages installés dans l’introduction, c’est à dire nginx, php5-fpm et apache2-utils essentiellement, il faut donc rajouter les packages suivants :
1 | apt-get install spawn-fcgi fcgiwrap |
Je présente ici une version complète de ma config Nginx mais épurée des précédents ajouts de la série Outils Web d’Administration. Honnêtement, elle devenait trop longue pour rester claire. La configuration suivante est donc fonctionnelle telle qu’elle mais s’intègre très bien aux précédents éléments de configuration fournis jusqu’à maintenant.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # ce server block transforme les requetes http en https server { listen 80; # Utilisez ci-dessous votre propre nom de domaine ou sous domaine server_name admin-tools.writesthisblog.com default; return 301 https://$server_name$request_uri; } server { listen 443 ssl; # Utilisez ci-dessous votre propre nom de domaine ou sous domaine server_name admin-tools.writesthisblog.com; access_log /var/log/nginx/admin_access.log; error_log /var/log/nginx/admin_error.log; # gere le controle d acces a la zone d admin auth_basic "Veuillez-vous authentifier"; auth_basic_user_file /etc/nginx/secu/admin-password; # voir https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx ssl_certificate /etc/nginx/secu/admin.crt; ssl_certificate_key /etc/nginx/secu/admin.key; # dans ssl_params les parametre ssl commun a tous les serveurs https include /etc/nginx/ssl_params; root /var/www/admin; index index.php; fastcgi_intercept_errors on; # fichiers a ne pas servir location ~ /\. { deny all; } # configuration specifique a Nagios location /nagios { alias /usr/local/nagios/share/; try_files $uri $uri/ index.php; } # execution du php pour Nagios location ~ ^/nagios/(.*\.php)$ { alias /usr/local/nagios/share/$1; include /etc/nginx/php_params; } # execution des scripts CGI # les logins utilises pour se connecter a la zone d admin sont passes # aux scripts CGI. Important pour les authentification Nagios location ~ ^/nagios/cgi-bin/(.*\.cgi)$ { alias /usr/local/nagios/sbin/$1; fastcgi_param AUTH_USER $remote_user; fastcgi_param REMOTE_USER $remote_user; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/fcgiwrap.socket; } } |
Un lien pour charger une version de /etc/nginx/ssl_params
.
On peut maintenant accéder à son interface Nagios avec l’url, dans mon cas, https://admin-tools.writesthisblog.com/nagios/
. Normalement, vous voyez maintenant régulièrement le message d’erreur suivant :
It appears as though you do not have permission to view information for any of the hosts you requested…
If you believe this is an error, check the HTTP server authentication requirements for accessing this CGI and check the authorization options in your CGI configuration file.
Configurer les Contrôles d’Accès à Nagios
Le fichier de configuration des autorisation d’accès à Nagios est /usr/local/nagios/etc/cgi.cfg
. Deux options se présentent.
Désactiver complètement les autorisations au niveau de Nagios !
Oui, c’est une très mauvaise idée en général, sauf que, dans ce tuto, l’accès à la zone d’admin est contrôlé par login et mot de passe. Cette option ne laisse donc l’accès complet à Nagios qu’aux clients authentifiés de la zone.
1 2 3 4 5 6 7 8 9 10 11 12 | root@server:~# cat /usr/local/nagios/etc/cgi.cfg | grep -B 10 use_authentication # NOTE: It is a really *bad* idea to disable authorization, unless # you plan on removing the command CGI (cmd.cgi)! Failure to do # so will leave you wide open to kiddies messing with Nagios and # possibly hitting you with a denial of service attack by filling up # your drive by continuously writing to your command file! # # Setting this value to 0 will cause the CGIs to *not* use # authentication (bad idea), while any other value will make them # use the authentication functions (the default). use_authentication=0 |
Gérer finement les autorisations
C’est à dire paramétrer selon les utilisateurs de la zone d’admin. Attention les utilisateurs ici sont bien ceux déclarés dans les contrôles d’accès de Nginx qui passe ensuite au CGI leur login.
1 2 3 4 5 6 7 8 9 | root@server:~# cat /usr/local/nagios/etc/cgi.cfg | grep authorized_for authorized_for_system_information=nagiosadmin authorized_for_configuration_information=nagiosadmin authorized_for_system_commands=nagiosadmin authorized_for_all_services=nagiosadmin authorized_for_all_hosts=nagiosadmin authorized_for_all_service_commands=nagiosadmin authorized_for_all_host_commands=nagiosadmin #authorized_for_read_only=user1,user2 |
Par défaut, l’utilisateur nagiosadmin dispose de toutes les autorisations. On peut donc simplement rajouter nagiosadmin aux utilisateurs de la zone d’admin :
1 2 3 4 | root@vps62429:~# htpasswd /etc/nginx/secu/admin-password nagiosadmin New password: Re-type new password: Adding password for user nagiosadmin |
On peut aussi rajouter user1 ou user2 avec des accès partiels paramétrés dans cgi.cfg, bref toutes les combinaisons de configurations sont possibles.
Configuration de Nagios
Tous les fichiers de configuration de Nagios se trouvent dans le répertoire /usr/local/nagios/etc/
. Par défaut, les configurations marchent assez bien pour démarrer avec Nagios. Il faut juste modifier dans le fichier /usr/local/nagios/etc/objects/contacts.cfg
l’adresse email de nagiosadmin, voir créer les contacts pour chaque utilisateur déclaré au chapitre précédent.
Il va de soi que le serveur portant Nagios doit être capable d’envoyer des mails, par exemple en utilisant exim.
Prochaine Étape
On a donc maintenant Nagios Core fonctionnel et ce n’est que le début. Dans un prochain article, je présenterai l’installation et la configuration de quelques plugins et addons afin de pouvoir commencer à superviser tous ses différents serveurs.