Chapitre 39. Services volatiles

Introduction

Nagios a la capacité de faire la distinction entre les services normaux et les services volatiles. L'option is_volatil de chaque définition de service vous permet de spécifier si oui ou non un service spécifique est volatile. Pour la plupart des gens, la majorité des services supervisés sera de type non-volatile (par ex. normal). Toutefois, des services volatiles peuvent se révéler très utiles lorsqu'ils sont bien utilisés…

A quoi servent-ils ?

Les services volatiles sont utiles pour superviser…

  • des choses qui se remettent automatiquement en état OK chaque fois qu'ils sont contrôlés

  • des événements comme les alertes de sécurité qui réclament de l'attention à chaque problème (et pas seulement la première fois)

Qu'est-ce que les services volatiles ont de si particulier ?

Les services volatiles diffèrent des services normaux de trois façons importantes. Chaque fois qu'ils sont contrôlés quand ils sont dans un état hard non-OK, et que le contrôle retourne un état non-OK (par ex. aucun changement d'état n'a eu lieu)…

  • l'état non-OK du service est journalisé

  • les contacts reçoivent notification du problème (si c'est ce qui doit être fait).

    Les intervalles de notifications sont ignorés pour les services volatiles.

  • le gestionnaire d'événements du service est lancé (s'il a été défini)

Ces événements ne se produisent normalement que lorsque des services sont dans un état non-OK et qu'un changement d'état hard vient de se produire. En d'autres termes, ils ne se produisent que la première fois que le service passe dans un état non-OK. Si des contrôles ultérieurs du service conduisent au même état non-OK, il n'y a aucun changement d'état hard et aucun des événements mentionnés ne se reproduit.

Si vous ête seulement intéressé par la journalisation (logging), vous devriez plutôt utiliser les options de stalking.

La puissance de deux

Si vous combinez les fonctionnalités des services volatiles avec les contrôles passifs de service, vous pouvez faire des choses très utiles. Par exemple, gérer des interruptions SNMP, des alertes de sécurité, etc.

Que diriez-vous d'un exemple ?… Disons que vous exécutiez le produit PortSentry pour scanner les ports de votre machine et les intrus potentiels. Si vous voulez que Nagios soit averti des scans de ports, vous pouvez mettre en place ce qui suit…

Configuration de Nagios

  • Créez un service appelé Port Scans et associez-le avec l'hôte sur lequel tourne PortSentry.

  • Mettez l'option max_check_attempts de la définition du service à 1. Ceci dira à Nagios de passer immédiatement le service en état hard quand un état non-OK est retourné.

  • Mettez l'option active_checks_enabled à 0 dans la définition du service. Cela évite que Nagios ne contrôle activement le service.

  • Mettez l'option passive_checks_enabled à 1 dans la définition du service. Cela active les contrôles passifs pour le service.

  • Mettez l'option is_volatile à 1 dans la définition du service.

Configuration de PortSentry

Modifiez votre fichier de configuration de PortSentry (portsentry.conf), et définissez une commande pour le paramètre KILL_RUN_CMD comme suit :

KILL_RUN_CMD="/usr/local/Nagios/libexec/eventhandlers/submit_check_result host_name 'Port Scans' 2 'Port scan from host $TARGET$ on port $PORT$.  Host has been firewalled.'"
            

Assurez-vous de remplacer host_name avec le nom court de l'hôte avec lequel le service est associé.

Script de scan de port

Créez un script Shell dans le répertoire /usr/local/nagios/libexec/eventhandlers que vous appelez submit_check_result. Le contenu de ce script shell devrait ressembler à ceci…

#!/bin/sh

# Write a command to the Nagios command file to cause
# it to process a service check result

echocmd="/bin/echo"

CommandFile="/usr/local/nagios/var/rw/nagios.cmd"

# get the current date/time in seconds since UNIX epoch
datetime=`date +%s`

# create the command line to add to the command file
cmdline="[$datetime] PROCESS_SERVICE_CHECK_RESULT;$1;$2;$3;$4"

# append the command to the end of the command file
`$echocmd $cmdline >> $CommandFile`
            

Que va t'il se passer quand PortSentry détectera un scan de ports sur la machine dans le futur ?

  • PortSentry bloque l'hôte au niveau pare-feu (C'est une fonction du logiciel PortSentry=

  • PortSentry exécute le script shell submit_check_result pour envoyer le résultat de ce contrôle passif à Nagios

  • Nagios lit le fichier de commande externe et voit le contrôle passif de service soumis par PortSentry

  • Nagios passe le service Port Scans en état CRITICAL, et envoie des notifications aux contacts

Plutôt sympa, non ?