[Debian 9] Installation de LibreNMS avec Nginx et PHP7

LibreNMS est un serveur de supervision, fork de Observium. Avec son interface intuitive et claire, vous pourrez observer vos serveurs en un rien de temps !

Présentation de LibreNMS

Ce serveur de supervision est développé uniquement avec des langages pour le web, c’est-à-dire en PHP / SQL. Ainsi, le serveur est très léger et peut se mettre aisément sur tout type de machine !!

Le gros point fort de LibreNMS, c’est sa facilité de configuration. Avec tous les outils fournis de base, la supervision d’un matériel ou d’une machine en SNMP se fait tellement simplement que ça en est déconcertant ! Des modules sont présents pour pouvoir personnaliser votre installation de LibreNMS, notamment pour réceptionner les alertes par SMS ou par e-mail, modifier l’API pour que le serveur se comporte de la façon dont vous le souhaitez.

Par défaut, les mises à jour sont automatiques – elles sont déclenchées tous les jours à 00h15. Cette option peut être modifiée à souhait.

Enfin, grâce à ses module « autodiscover » et « distributed polling« , LibreNMS est capable de sonder tout votre réseau à la recherche de périphériques (matériels / machines), de les ajouter automatiquement dans votre liste en plus d’être intégrable dans une architecture distribuée. Pratique !


L’installation du serveur LibreNMS sur Debian 9

Se basant sur du SQL pour stocker les résultats de la supervision, vous devez installer un serveur SQL type MySQL ou MariaDB sur votre machine. Un tutoriel est présent sur le site pour que vous puissiez installer un serveur SQL type « MariaDB » à cette adresse -> Installer MariaDB sur Debian 9 – CZS

Lorsque le serveur SQL est prêt, vous pouvez désormais passer à la création de la base de données, avec un utilisateur spécifique. Connectez-vous à votre serveur SQL, puis saisissez le mot de passe de l’utilisateur « root » :

mysql -u root -p

Il faut ensuite créer la base de données – vous pouvez lui donner le nom que vous souhaitez :

CREATE DATABASE librenms;

Ajoutez les droits (privilèges) sur la base de données précédemment créée en y ajoutant un nouvel utilisateur unique qui aura tous les accès sur cette base – On lui ajoute aussi un mot de passe dans l’attribut « IDENTIFIED BY » :

GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost' IDENTIFIED BY 'password';

Mise à jour des droits sur le serveur SQL pour que toutes les modifications effectuées précédemment puissent être prises en compte immédiatement et déconnexion de la session sur le serveur SQL :

FLUSH PRIVILEGES;
exit
[su_divider top= »no » divider_color= »#009688″ size= »1″][/su_divider]

La première partie est terminée, le serveur SQL est prêt à l’emploi et donc prêt à réceptionner la base de LibreNMS. Il faut maintenant installer un serveur web et le PHP. J’ai choisi ici de fonctionner avec nginx et PHP7, puisque ce sont les outils les plus performants à l’heure actuelle pour avoir un serveur web puissant et robuste. Il y a des dépendances à installer pour pouvoir bénéficier pleinement du serveur. J’ai volontairement étoffé la liste des paquets comparée à celle fournit sur le wiki officiel, pour bénéficier de tous les outils en une seule fois.

apt install php7.0 php7.0-fpm php7.0-gd php7.0-curl php7.0-cli php7.0-mysql php7.0-mbstring php7.0-json php7.0-snmp php7.0-zip git rrdtool snmp snmpd fping imagemagick whois mtr-tiny php-pear python-mysqldb curl lm-sensors snmp-mibs-downloader gnuplot zip unzip acl

Attention pour « snmp-mibs-downloader », le paquet se trouve dans les dépôts « non-free » > https://packages.debian.org/search?keywords=snmp-mibs-downloader. (Merci @Arowan02 pour la précision !)

Tant que nous sommes dans les installations de paquets, il est judicieux d’installer dès à présent le serveur web nginx.

Nginx s’installe très vite, la configuration est toute aussi rapide dans cet exemple, puisque le serveur web est simple. Je supprime le fichier de configuration par défaut, pour éviter d’avoir des antécédents et des fichiers superflus qui ne sont pas utiles.

rm /etc/nginx/sites-available/default && rm /etc/nginx/sites-enabled/default

Créez un fichier de configuration que vous pouvez nommer « librenms« , dans le dossier « /etc/nginx/sites-available » avec ce type de configuration :

server {
    listen 80;
    server_tokens off;

    root /opt/librenms/html;
    index index.php index.html index.htm;

    access_log /var/log/librenms.access.log;
    error_log /var/log/librenms.error.log warn;

    server_name 192.168.51.228;

    client_max_body_size 15M;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    # EXECUTION PHP
    location ~ .php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+.php)(/.+)$;
       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_read_timeout 60;
       include fastcgi_params;
    }

    # IMAGES
    location ~* .(jpg|jpeg|png|gif|ico)$ {
        expires 365d;
    }
    location ~* .(pdf|css|js|swf|woff|otf|ttf|svg)$ {
        expires 30d;
    }
}

Le « server name » est à modifier – vous devez y ajouter le nom FQDN de votre machine, pour pouvoir y accéder.

Il faut créer un lien symbolique pour activer ce « vhost » et pouvoir accéder à l’interface de LibreNMS une fois qu’il sera installé :

ln -s /etc/nginx/sites-available/librenms /etc/nginx/sites-enabled/librenms && systemctl restart nginx.service

Une dernière étape concernant le serveur web est à effectuer : configuration de PHP. Quelques variables sont à ajouter / modifier pour que LibreNMS puisse pleinement être utilisable.

Dans le fichier « /etc/php/7.0/fpm/php.ini« , il faut définir le fuseau horaire tel quel :

date.timezone = Europe/Paris

La ligne est commentée à l’aide d’un point-virgule, enlevé ce signe. Une autre vérification est à effectuer sur le module « fopen » – il faut que la ligne « allow_url_fopen » soit bien sur « On« 

Le fichier « /etc/php/7.0/cli/php.ini » est aussi à modifier, pour ajouter là encore le fuseau horaire et contrôler la ligne  « allow_url_fopen ». Enregistrez les modifications et redémarrez le service PHP7.0-fpm (systemctl restart php7.0-fpm.service).

Le serveur web est prêt, il reste à effectuer la configuration du SNMP (très simple) et surtout, l’installation de LibreNMS !

[su_divider top= »no » divider_color= »#009688″ size= »1″][/su_divider]

Le paquet SNMP (snmpd) a été installé précédemment – il convient de faire une petite configuration pour pouvoir récupérer les informations de la machine locale. Ouvrez le fichier « /etc/snmp/snmpd.conf » et dans la partie « ACCESS CONTROL », ajoutez cette ligne :

rocommunity public 127.0.0.1

Vous pourrez ainsi récupérer facilement les informations qui transitent via SNMP (v2) de votre machine locale avec la communauté « public ».

Il faut redémarrer le service snmpd pour appliquer les modifications, via un « systemctl restart snmpd.service« .

[su_divider top= »no » divider_color= »#009688″ size= »1″][/su_divider]

Selon le tutoriel de base pour LibreNMS, l’installation du serveur se fait dans « /opt/librenms ». Vous pouvez changer ce dossier pour le placer où vous le souhaitez, mais attention à bien répercuter par la suite toutes vos configurations (vhost nginx, user, scripts). J’ai décidé de suivre les directives de l’équipe de développement et garder l’emplacement « /opt/librenms » comme dossier source.

Dans un premier temps, il faut créer l’utilisateur nécessaire pour le serveur de supervision :

useradd librenms -d /opt/librenms -M -r

L’utilisateur doit faire partie du groupe « www-data », pour pouvoir « utiliser le serveur web », il faut donc le modifier en conséquence :

usermod -a -G librenms www-data

Le compte est prêt à l’emploi – la prochaine étape consiste à récupérer l’archive de LibreNMS via GIT. Vous aurez ainsi la dernière version stable, bénéficiant des dernières mises à jour. Un dossier va être créé automatiquement dans le dossier /opt/ pour réceptionner LibreNMS.

cd /opt/ && git clone https://github.com/librenms/librenms.git

[su_divider top= »no » divider_color= »#009688″ size= »1″][/su_divider]

Le serveur est presque prêt à partir de ce point ! Avant de pouvoir lancer l’installation via l’interface web, il faut « composer » LibreNMS pour initialiser l’installation web. Le framework PHP se base sur Composer pour effectuer des installations de paquets complémentaires.
Dirigez-vous dans le dossier « /opt/librenms », puis lancez la commande suivante (nécessite une connexion internet) :

./script/composer_wrapper.php install --no-dev

Il est impératif d’avoir les paquets « php7.0-zip unzip zip » dans votre serveur pour que composer puisse effectuer ses opérations sans encombre. Sans ces outils, vous aurez ce type d’erreur :

Enfin, une fois composer terminé, l’installation va alors pouvoir se lancer via l’interface web accessible directement dans votre navigateur.

Il y a de nombreux modules déjà installés via PHP7.0 précédemment, tout est au vert, cliquez sur le bouton « Next Stage« . Attention, si il vous manque un paquet, je vous suggère très rapidement d’installer les manquants pour éviter des erreurs de script plus tard.

L’étape suivante concerne la connexion à la base de données :

Entrez les identifiants et cliquez sur le bouton « Next Stage« . L’installation va alors s’initier. Selon la puissance de votre machine, les étapes peuvent prendre plus ou moins de temps ;

La page peut sembler être bloquée ou en cours de chargement > c’est normal, laissez le processus se mener au terme. Vous pourrez par la suite cliquer sur le bouton « Goto Add User » lorsque l’installation sera terminée.

Le compte utilisateur que vous allez créer ici correspond au compte Administrateur de LibreNMS. Veillez donc à bien le protéger avec un mot de passe fort.

Un message d’erreur risque de s’afficher, quant au fichier de configuration qu’il faut créer. Vous pouvez donc copier et coller toutes les informations dans un fichier nommé « config.php » à la racine de votre dossier LibreNMS, soit « /opt/librenms » dans cet exemple.

Il faut être très vigilant dans cette création de fichier : Il ne doit pas se finir avec un « ?> », sans quoi l’application LibreNMS ne sera pas utilisable.

Enfin, la dernière page s’affichera :

Pour assurer un LibreNMS pleinement fonctionnel, vous pouvez exécuter un script php de contrôle et de validation de l’application :

php validate.php

Plusieurs points sont à voir, voici les solutions :

  • chmod ug+rw /opt/librenms/rrd && chmod ug+rw /opt/librenms/log
    Permet d’avoir des droits corrects et des dossiers exploitables pour faire des graphiques et stocker des logs
  • chmod 0775 /opt/librenms/rrd
  • ./scripts/github-remove -s
    Permet d’enlever les quelques fichiers non nécessaires suite au clone du dépôt GIT.
  • cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
    Ajoute une tâche d’automatisation du poller, pour sonder en SNMP les matériels

Prochaines étapes, ajouter différents matériels et serveurs à superviser en SNMP… !

Julien H

Passionné depuis toujours par l'informatique, je transforme ma passion en expertise. J'utilise quotidiennement les outils et systèmes Microsoft. Je ne délaisse pas mon côté ouvert, notamment via l'utilisation des OS Debian et Archlinux. L'infosec m'ouvre les yeux sur les enjeux actuels et futurs de l'IT.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Share This
Fermer
Fermer