Intégration de Portsentry


Introduction

Cet exemple explique comment générer facilement des alertes via Nagios, à partir de "scan de ports" détectés par le logiciel Portsentry de Psionics. Ces instructions supposent que l'hôte qui génère les alertes ( c.a.d celui qui fait tourner Portsentry) n'est pas le même que celui qui fait tourner Nagios. Si cela n'est pas le cas, vous devrez faire quelques modifications dans l'exemple donné. Je suppose aussi que vous avez installé le daemon nsca sur votre serveur Nagios et le client nsca (send_nsca) sur la machine qui fait tourner Portsentry.

Definition du service

Tout d'abord, il faut définir un service dans votre fichier de configuration des objets pour prendre en compte les alertes de "scan de ports". En supposant que l'hôte qui fait tourner PostSentry s'appelle firestorm, la définition du service pourrait être :

define service{
	host_name                       firestorm
	service_description             Port Scans
	is_volatile                     1
	active_checks_enabled		0
	passive_checks_enabled		1
	max_check_attempts              1
	contact_groups                  security-admins
	notification_interval           120
	notification_period             24x7
	notification_options            w,u,c,r
	check_command                   check_none
	}

Il est important de noter que l'option volatile est activée, parce que nous voulons être notifié pour CHAQUE alerte survenant. Notez également que les contrôles actifs sont désactivés pour ce service. La commande check_none dans l'option check_command n'est pas utilisée: elle sert juste à empécher Nagios de se plaindre. Cependant, les contrôles passifs sont activés, puisque toutes les alertes seront envoyées passivement par le client nsca depuis la machine firestorm.

Configuration de Portsentry

Pour que Portsentry vous envoie une alerte lorsqu'il détecte un "scan de port", il faut configurer une commande pour l'option KILL_RUN_CMD du fichier de configuration de Portsentry (portsentry.conf). Ca ressemblera plus ou moins à ceci :

KILL_RUN_CMD="/usr/local/nagios/libexec/eventhandlers/handle_port_scan $TARGET$ $PORT$"

Cette ligne suppose qu'il existe un script appellé handle_port_scan dans le répertoire /usr/local/nagios/libexec/eventhandlers/ sur firestorm. Le répertoire et le script peuvent être changés à loisir.

Ecrire le script

La dernière chose à faire est d'écrire le script handle_port_scan sur firestorm. Il va envoyer une alerte à l'hôte qui effectue la surveillance. Il ressemblera à ceci :

#!/bin/sh

# Arguments:
#	$1 = target
#	$2 = port

# Submit port scan to Nagios
/usr/local/nagios/libexec/eventhandlers/submit_check_result firestorm "Port Scans" 2 "Port scan from $1 on port $2.  Host has been firewalled."

Notez que le script handle_port_scan appelle le script the submit_check_result pour envoyer l'alerte à l'hôte chargé de la surveillance. En supposant que cette hôte s'appelle monitor, le script submit check_result devrait ressembler à ( modifiez le pour prendre en compte le chemin d'accès au daemon send_nsca sur firestorm):

#!/bin/sh

# Arguments
#	$1 = name of host in service definition
#	$2 = name/description of service in service definition
#	$3 = return code
#	$4 = output

/bin/echo -e "$1\t$2\t$3\t$4\n" | /usr/local/nagios/bin/send_nsca monitor -c /usr/local/nagios/etc/send_nsca.cfg

Finition deux couches et vernis :-)

Maintenant que tout est configuré, il ne faut plus que redémarrer Portsentry sur firestorm et redémarrer Nagios sur l'hôte de surveillance. Quand Portsentry sur firestorm detectera un "scan de port", vous recevrez des alertes via Nagios. Le plugin affichera quelque chose comme :

Port scan from 24.24.137.131 on port 21. Host has been firewalled.