Utiliser Nmap pour générer vos fichiers de configuration Nagios
ATTENTION: Dans sa version actuelle, le script ne marche qu'avec la version 5 de Nmap. Sinon, le fichier .cfg généré risque de rester désespérément vide...
Renseigner des fichiers de configuration de Nagios "à la mimine" n'est pas une activité que je juge passionnante.
Nous allons voir dans ce billet comment utiliser le scanner de réseau Nmap pour nous aider dans cette lourde tache en développant un petit Script Shell nommé nmaptonagios.sh. Pour les plus impatients, vous pouvez directement aller au dernier chapitre de ce billet pour voir comment installer et lancer le script.
Avant de commencer
Le plus simple est de faire cette découverte du réseau directement depuis votre serveur de supervision hébérgeant Nagios. En effet, les éventuels mécanismes de filtrage de votre réseau doivent déjà permettre a ce serveur de faire des ping et des requêtes TCP/UDP vers l'ensemble des machines (ou alors votre serveur Nagios ne doit pas bien fonctionner...).
Il faut commencer par installer NMap sur cette machine.
Installation de Nmap sous Ubuntu / Debian:
aptitude install nmap
Récupérer la liste des machine "UP" de votre réseau
Dans la suite de ce billet, je prendrai l'exemple d'un adminsitrateur réseau qui veut découvrir les machines de son LAN qui utilise la plage d'adresse IP suivante: 192.168.1.0/24.
Pour avoir une liste des adresses ou des noms (si vous avez un serveur DNS à jour) des machines répondant aux PING de votre réseau, il suffit de saisir la commande:
nmap -sP 192.168.1.0/24
Si un nom d'hôte est associé à une adresse il est affiché.
Exemple:
Nmap scan report for 192.168.1.104
Host is up (0.0019s latency).
Nmap scan report for labo-desktop2 (192.168.1.109)
Host is up (0.00056s latency).
Cette première commande va nous servir pour générer la boucle principale de notre script.
Détection des OS
Pour générer dans la configuration de Nagios une description des hôtes contenant l'OS, nous allons utiliser l'option -O de nmap:
nmap -O 192.168.1.109
Selon le système d'exploitation la détection se fait de manière plus au moins simple.
3 lignes sont intéressantes dans le rapport généré par l'option -O:
OS Detail: ***
Running: ***
Service detail: ***
Notre script va donc tester ces variables puis choisir celle qui donne une information la plus précise (sachant que ce test n'est pas fiable à 100%).
Détection des services
On entre dans le vifs du sujet avec la détection des services accessibles sur les machines.
On filtre pour cela les ports TCP ou UDP ouverts (open), puis on vérifie qu'un plugin est disponible dans le répertoire /usr/lib/nagios/plugins (il est possible de changer ce répertoire en modifiant la variable NAGIOS_PLUGINS_PATH au début du script).
Par exemple, si le script détecte que le port TCP/80 (http) est open, alors il va rechercher le plugin /usr/lib/nagios/plugins/check_http et configurer le service correspondant. Si il ne le trouve pas il va se rabattre sur un check_tcp simple sur le port 80.
On utilise la commande nmap suivante:
nmap -sV 192.168.1.109
Installation et utilisation du script nmaptonagios.pl
On commence par récupérer le script:
wget http://svn.nicolargo.com/nagiosautoinstall/trunk/nmaptonagios.sh
chmod a+x ./nmaptonagios.sh
Puis on l’exécute:
sudo ./nmaptonagios.sh 192.168.1.0/24
...
---------------------------------------------------------------
Nagios configuration file: /tmp/nmaptonagios-20101124095216.cfg
---------------------------------------------------------------
A la fin du script, on a un fichier de configuration de Nagios à éditer et à adapter à vos besoins:
vi /tmp/nmaptonagios-20101124095216.cfg
Pour faire prendre en compte ce fichier par Nagios, il suffit de le copier dans le répertoire /usr/local/nagios/etc/objects:
sudo cp /tmp/nmaptonagios-20101124095216.cfg /usr/local/nagios/etc/objects
sudo chown nagios:nagios /usr/local/nagios/etc/objects/nmaptonagios-20101124095216.cfg
Puis de relancer nagios:
sudo service nagios restart
Le script est distribué sous licence GPL v2. Libre à vous de l'adapter, modifier, copier et distribuer !