Nagios non ha una sua specifica applicazione client per accedere alle informazioni di monitoraggio; fa affidamento, invece, sul server web Apache per fornire un'interfaccia web molto semplice ma potente, accessibile da qualunque browser e che consente agli utenti di visualizzare le informazioni di stato correnti, leggere i log storici, creare report e, a seconda della configurazione, impartire comandi al demone di monitoraggio.
L'interfaccia web di Nagios si basa su una serie di programmi CGI scritti in C. I CGI leggono la loro configurazione da due file: il file di configurazione principale e il file cgi.cfg, che si trova, di default, nella directory /var/www/etc/nagios/.
Di seguito è riportato un esempio di file di configurazione; si presti particolare attenzione alle direttive authorized_for_*, perché consentono di assegnare speciali privilegi agli utenti e sono, quindi, critiche per la sicurezza. Nella prossima sezione, ripasseremo come creare utenti in Apache.
# Percorso del file di configurazione principale (relativo alla chroot) main_config_file=/etc/nagios/nagios.cfg # Percorso della directory dove risiedono i file HTML (relativo alla chroot) physical_html_path=/nagios # Parte di percorso dell'URL usata per accedere all'interfaccia web url_html_path=/nagios # Disabilita l'aiuto in linea show_context_help=0 # Abilita l'autenticazione per i CGI use_authentication=1 # Scommenta la seguente direttiva per impostare un utente di default per le # sessioni non autenticate (fortemente sconsigliato) #default_user_name=guest # Le direttive 'authorized_for_*' definiscono una lista, separata da virgole, # di utenti che possono: # - visualizzare informazioni di sistema nell'extended information CGI: authorized_for_system_information=nagiosadmin,operator # - visualizzare informazioni sulla configurazione nel configuration CGI: authorized_for_configuration_information=nagiosadmin,operator # - impartire comandi di sistema tramite il command CGI: authorized_for_system_commands=nagiosadmin # - visualizzare informazioni di stato e configurazione per tutti i servizi authorized_for_all_services=nagiosadmin,operator # - visualizzare informazioni di stato e configurazione per tutti gli host authorized_for_all_hosts=nagiosadmin,operator # - impartire comandi per tutti i servizi tramite il command CGI: authorized_for_all_service_commands=nagiosadmin # - impartire comandi per tutti gli host tramite il command CGI: authorized_for_all_host_commands=nagiosadmin # Opzioni per i CGI Status Map e Status World statusmap_background_image=smbackground.gd2 default_statusmap_layout=5 default_statuswrl_layout=4 statuswrl_include=myworld.wrl # Comando da usare per pingare un host dall'interfaccia WAP ping_syntax=/sbin/ping -n -c 5 $HOSTADDRESS$ # Intervallo di tempo (in secondi) prima di ricaricare la pagina web refresh_rate=90 # Lista dei file audio da eseguire nel browser in caso di problemi. Questi file # risiedono in /var/www/nagios/media/ host_unreachable_sound=hostdown.wav host_down_sound=hostdown.wav service_critical_sound=critical.wav service_warning_sound=warning.wav service_unknown_sound=warning.wav #normal_sound=noproblem.wav # Opzioni HTML e target delle URL action_url_target=_blank notes_url_target=_blank escape_html_tags=1 # Impedisci agli utenti di cambiare il nome dell'autore quando mandano commenti, # acknowledgements e downtime schedulati dall'interfaccia web lock_author_names=1 # Opzioni per l'integrazione con Splunk enable_splunk_integration=0 #splunk_url=http://127.0.0.1:8000/
L'interfaccia web contiene informazioni particolarmente sensibili sulla rete e i servizi e può perfino consentire l'esecuzione di comandi che impattano direttamente il demone di monitoraggio. Di conseguenza, è decisamente consigliabile configurare l'autenticazione per l'accesso ai CGI.
I file di autenticazione vengono gestiti tramite il comando htpasswd(1). Si noti che alla prima esecuzione occorre specificare l'opzione "-c" per creare il file delle password:
# htpasswd -c /var/www/users/nagios.passwd nagiosadmin New password: password Re-type new password: password Adding password for user nagiosadmin # htpasswd /var/www/users/nagios.passwd danix@work New password: password Re-type new password: password Adding password for user danix@work #
Un utente il cui username corrisponda allo short name della definizione di un contatto viene detto contatto autenticato e gli viene automaticamente garantito l'accesso alle informazioni e ai comandi riguardanti gli host e i servizi per i quali è un contatto (vd. la documentazione per ulteriori dettagli sull'autenticazione nei CGI).
Bene, ora che Apache richiede agli utenti di autenticarsi, dovremmo configurare anche l'SSL per evitare di mandare le password in chiaro. Questi sono i comandi openssl(1) per creare un certificato self-signed (una discussione più dettagliata sulla gestione dei certificati è reperibile qui):
# openssl genrsa -des3 -out server.3des-key 1024 Generating RSA private key, 1024 bit long modulus ..............++++++ .++++++ e is 65537 (0x10001) Enter pass phrase for server.3des-key: passphrase Verifying - Enter pass phrase for server.3des-key: passphrase # openssl rsa -in server.3des-key -out server.key Enter pass phrase for server.3des-key: passphrase writing RSA key # openssl req -new -key server.key -x509 -out server.crt -days 365 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []: IT State or Province Name (full name) []: State Locality Name (eg, city) []: Locality Organization Name (eg, company) []: kernel-panic.it Organizational Unit Name (eg, section) []: Information Technology Common Name (eg, fully qualified host name) []: nagios.kernel-panic.it Email Address []: nagios@kernel-panic.it # chmod 600 server.key # rm server.3des-key # mv server.crt /etc/ssl/ # mv server.key /etc/ssl/private/
L'ultimo passo è configurare Apache in modo che richieda effettivamente autenticazione e cifratura per accedere all'interfaccia di Nagios. È sufficiente aggiungere le righe seguenti al file di configurazione /var/www/conf/httpd.conf:
ScriptAlias /cgi-bin/nagios "/var/www/cgi-bin/nagios"
<Directory "/var/www/cgi-bin/nagios">
SSLRequireSSL
Options ExecCGI
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /users/nagios.passwd
Require valid-user
Order deny,allow
Deny from all
# Client autorizzati
Allow from 127.0.0.1 172.16.0.13
</Directory>
Alias /nagios "/var/www/nagios"
<Directory "/var/www/nagios">
SSLRequireSSL
Options None
AllowOverride None
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /users/nagios.passwd
Require valid-user
Order deny,allow
Deny from all
# Client autorizzati
Allow from 127.0.0.1 172.16.0.13
</Directory>
Bene, direi che per ora abbiamo configurato abbastanza! Possiamo quindi chiedere a Nagios un parere sul nostro lavoro, invocandolo con l'opzione "-v":
# /usr/local/sbin/nagios -v /var/www/etc/nagios/nagios.cfg Nagios 3.0.6 Copyright (c) 1999-2008 Ethan Galstad (http://www.nagios.org) Last Modified: 12-01-2008 License: GPL Reading configuration data... Running pre-flight check on configuration data... [...] Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check #
Se nonè emerso nessun errore, allora è finalmente giunto il momento tanto atteso: siamo pronti a lanciare Nagios! Ma non prima di aver creato la directory per il file di lock (Nota: se non hai mai riavviato dopo l'installazione dei package di Nagios, la directory /var/run/nagios/ dovrebbe già esistere).
# apachectl startssl /usr/sbin/apachectl startssl: httpd started # install -d -o _nagios /var/run/nagios # /usr/local/sbin/nagios -d /var/www/etc/nagios/nagios.cfg
È possibile verificare che tutto funzioni correttamente collegandosi all'interfaccia web (https://your.server.here/nagios/) o dando un occhio ai log (/var/www/var/log/nagios/nagios.log).
Per concludere, dobbiamo configurare il sistema per l'avvio di Apache e Nagios al boot, impostando la variabile httpd_flags nel file /etc/rc.conf.local:
httpd_flags="-DSSL"
e aggiungendo le seguenti righe nel file /etc/rc.local:
if [ -x /usr/local/sbin/nagios ]; then
install -d -o _nagios /var/run/nagios
echo -n ' nagios'
/usr/local/sbin/nagios -d /var/www/etc/nagios/nagios.cfg
fi
Nel prossimo capitolo vedremo come estendere Nagios con alcuni dei suoi addon più popolari.