4. Configurazione dell'interfaccia web

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.

4.1 Configurazione dei CGI

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.

/var/www/etc/nagios/cgi.cfg
# 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/

4.2 Configurazione di Apache

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:

/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>

4.3 Lanciare Nagios

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:

/etc/rc.conf.local
httpd_flags="-DSSL"

e aggiungendo le seguenti righe nel file /etc/rc.local:

/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.