Catégories
Nagios Open-source Planet-libre Reseau

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 https://raw.github.com/nicolargo/nagiosautoinstall/master/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 !

Catégories
Open-source Reseau

Nmap: le scanneur de réseau

NMAP matrixNmap est un scanneur de port réseau disponible sur Linux, Mac, FreeBSD, Windows… Le but de ce logiciel est de détecter les ports réseau ouvert sur des machines. Il permet donc de détecter si une machine est sur un réseau, d’identifier les services qui tournent dessus et même d’en déduire dans certain cas le type d’operating system. Voici une petit tutoriel avec quelques commandes de bases.

Remarque: Le scanning de port est considéré comme une intrusion. Il est donc interdit de scanner un réseau qui ne nous appartient pas.

Détection des machines sur un réseau

Si vous souhaitez identifier toutes les machines présentes sur votre réseau (cela peut être utile surtout si votre réseau est sans fils – wifi).

# nmap -sP <cible>
ou <cible>peut être:

  • une machine: ex. 192.168.0.1
  • un réseau: ex. 192.168.0.0/24 ( scan de toutes les adresses comprises entre 192.168.0.0 et 192.168.0.255)
  • une plage d’adresse: ex: 192.168.100-200 ( scan de toutes les adresses comprises entre 192.168.0.100 et 192.168.0.200)

Le résultat d’une telle commande sera du type:

# nmap -sP 192.168.0.0/24
Starting Nmap 4.20 ( http://insecure.org ) at 2007-08-27 11:45 CEST
Host routeur (192.168.0.254) appears to be up.
Host pc (192.168.0.1) appears to be up.
Host mac (192.168.0.2) appears to be up.

Détection des ports réseau ouverts sur une machine

Une fois les machines disponibles identifiées, il est possible d’aller plus loin et de scanner tous les ports réseau ouvert. Pour cela il faut utiliser la commande suivante:

# nmap <cible>

Par exemple, le résultat de cette commande sur un serveur web ne devrait faire apparaitre que le port TCP/80 (HTTP).

# nmap www
Starting Nmap 4.20 ( http://insecure.org ) at 2007-08-27 12:01 CEST
Interesting ports on 192.168.0.1:
Not shown: 1354 closed ports, 340 filtered ports
PORT STATE SERVICE
80/tcp open http
Nmap finished: 1 IP address (1 host up) scanned in 20.677 seconds

Cette commande est un peu longue car elle scanne tous les ports réseau. Si vous souhaitez scanner un port en particulier, vous pouvez utilisez l’option -p

. Par exemple la commande suivante va scanner tous les ports SSH (TCP/22) ouvert sur le réseau 192.168.0.0/24.

# nmap -p 22 192.168.0.0/24
Starting Nmap 4.20 ( http://insecure.org ) at 2007-08-27 12:06 CEST
Interesting ports on al-ras.alcasat.net (192.168.0.1):
PORT STATE SERVICE
22/tcp open ssh
Interesting ports on al-ns1.alcasat.net (192.168.0.2):
PORT STATE SERVICE
22/tcp open ssh
Nmap finished: 256 IP addresses (3 hosts up) scanned in 5.356 seconds

Autres exemples de scan:

Scan de tous les ports TCP ouverts sur la machine cible:

# nmap -sS <cible>

Scan de tous les ports UDP ouverts sur la machine cible:

# nmap -sU <cible>

Identifier l’OS d’une machine

Nmap permet également d’identifier l’OS d’une machine scannée. Il utilise pour cela des algorithmes qui se basent sur l’identification des caractéristiques des paquets réseau et des ports ouverts. Même si cette méthode n’est pas parfaite elle marche dans environ 90% des cas.

On utilise l’option -O sur la cible à identifier:

# nmap -O –osscan-guess <cible>

Exemple de sortie:

# nmap -O –osscan-guess 127.0.0.1
Starting Nmap 4.20 ( http://insecure.org ) at 2007-08-27 12:15 CEST
Interesting ports on localhost (127.0.0.1):
Not shown: 1692 closed ports
PORT STATE SERVICE
22/tcp open ssh
139/tcp open netbios-ssn
445/tcp open microsoft-ds
631/tcp open ipp
9090/tcp open zeus-admin
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.18 – 2.6.19 (x86)
Uptime: 4.025 days (since Thu Aug 23 11:39:26 2007)
Network Distance: 0 hops
OS detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 1.408 seconds

Cet article n’est qu’un premier tutoriel qui montre comment utiliser les fonctions de bases de Nmap. Si vous avez d’autres exemples d’utilisations, vous pouvez postez un commentaire.