In questo post abbiamo visto come configurare e gestire i check passivi su Nagios. Ora vedremo come utilizzare tale configurazione per ricevere i security alert relativi agli host monitorati.
Ovviamente il primo ingrediente è l‘NMS (Nagios), integrato ad NRDP Server. Sulle macchine monitorate è installato NRDP Client, il quale dovrà interagire con un log analyzer in tempo reale (swatch).
Scenario
La topologia utilizzata nell’ambito di questa guida è abbastanza minimale e prevede un server su cui è installato Nagios ed un altro server (da monitorare) che funge da antispam. Si vuole fare in modo che i security alert generati da quest’ultimo vengano inoltrati all’NMS, il quale dovrà successivamente aggiornare lo stato dei check passivi di riferimento, inviando opportune notifiche ai sysadmin.
Configurazione di Nagios
La configurazione dell’NMS è del tutto simile a quella vista qui, ma la riporto per completezza:
define service{ use local-service host_name server-antispam service_description Antispam Access Denied check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 } define service{ use local-service host_name server-antispam service_description Antispam Domain Not Found check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 } define service{ use local-service host_name server-antispam service_description Antispam Cannot Find Your Reverse Hostname check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 } define service{ use local-service host_name server-antispam service_description Antispam SPF Reject check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 } define service{ use local-service host_name server-antispam service_description Antispam Relay Access Denied check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 } define service{ use local-service host_name server-antispam service_description Antispam Amavis Blocked check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 } define service{ use local-service host_name server-antispam service_description Antispam Spam check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 } define service{ use local-service host_name server-antispam service_description Antispam Spammy check_command check_passive passive_checks_enabled 1 active_checks_enabled 0 max_check_attempts 1 is_volatile 1 check_freshness 1 freshness_threshold 600 flap_detection_enabled 0 }
Il comando check_passive, invece, è così definito:
# 'check_passive' command definition define command{ command_name check_passive command_line $USER1$/check_dummy 0 "No Security Alert" }
La logica di funzionamento è banale: se un security alert non viene ricevuto entro 600 secondi significa che non vi sono eventi rilevanti e, di conseguenza, lo stato del check passivo tornerà ad essere OK. Inoltre, poichè l’alert deve generare immediatamente una notifica (HARD STATE), è necessario settare il campo max_check_attempts a 1 (anzichè 4 che è il valore di default).
Come ultimo step ricarichiamo la configurazione di Nagios:
[root@NMS ~]# service nagios reload
Configurazione del server antispam
Una volta configurato l’NMS possiamo dedicarci alla configurazione del server da monitorare. In questo caso il lavoro sporco verrà svolto da swatch, il cui compito è quello di analizzare in tempo reale (tail -f) il contenuto del file di log relativo al servizio di antispam (/var/log/maillog), alla ricerca di determinati error code. Ad ogni error code corrisponderà un security alert specifico, e, una volta identificato, verrà richiamato NRDP Client per l’invio dell’evento a Nagios.
Ma bando alle ciance ed ecco la configurazione di swatch:
#SMTP Domain not found watchfor /Domain not found/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam Domain Not Found' --output\='$_'" #SMTP Sender address rejected watchfor /Access denied/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam Access Denied' --output\='$_'" #SMTP Cannot find your reverse hostname watchfor /cannot find your reverse hostname/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam Cannot Find Your Reverse Hostname' --output\='$_'" #SMTP SPF reject watchfor /openspf/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam SPF Reject' --output\='$_'" #SMTP Relay access denied/ watchfor /Relay access denied/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam Relay Access Denied' --output\='$_'" #SMTP Amavis blocked watchfor /Blocked/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam Amavis Blocked' --output\='$_'" #SMTP Spam watchfor /SPAM/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam Spam' --output\='$_'" watchfor /SPAMMY/ echo exec "/usr/bin/php /usr/lib/nagios/plugins/send_nrdp.php --url\=http://IPNMS/nrdp --token\=vostrotoken --host\=server-antispam --state\=1 --service\='Antispam Spammy' --output\='$_'"
Nella fattispecie, NRDP Client viene richiamato mediante la direttiva exec, facendo attenzione al carattere = (utilizzato per specificare i dati da inviare a Nagios), poichè trattasi di un carattere speciale per swatch (che quindi dovrà essere munito di escape \).
A questo punto lanciamo il comando:
[root@server-antispam ~]# swatch -c /etc/swatch.conf -t /var/log/maillog --daemon
ed inseriamolo all’interno del file /etc/rc.local (per automatizzare l’esecuzione del suddetto applicativo dopo ogni riavvio).
Test
Per testare il corretto funzionamento della configurazione appena riportata, possiamo, ad esempio, generare un error code 450 (cannot find your reverse hostname).
Lanciamo dunque il comando:
[root@client ~]# telnet server-antispam.vostrodominio.com 25
ed inviamo al server antispam le seguenti direttive:
helo server-antispam.vostrodominio.com 250 server-antispam mail from:<n.latella@ciao.it> 250 2.1.0 Ok rcpt to:<n.latella@ciao.ot> 450 4.7.1 Client host rejected: cannot find your reverse hostname, [5.170.*.*]
A questo punto il servizio Antispam Cannot Find Your Reverse Hostname dovrebbe generare un WARNING, segnalando quanto avvenuto mediante email.
Nei prossimi post vedremo come configurare Nagios per la ricezione delle trap SNMP.
Alla prossima.