Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

La registrazione degli accessi di Apache

La struttura dei file di log di Apache per la registrazione di ogni attività compiuta dai visitatori sul vostro sito Web. Interpretare i log per funzioni di monitoraggio, sicurezza e statistiche.
La struttura dei file di log di Apache per la registrazione di ogni attività compiuta dai visitatori sul vostro sito Web. Interpretare i log per funzioni di monitoraggio, sicurezza e statistiche.
Link copiato negli appunti

Introduzione

Con il termine log si intende generalmente un file di puro testo (log file) in cui vengono registrate le operazioni eseguite da un programma. I motivi per i quali si ricorre a tali registrazioni sono principalmente:

  • monitoraggio: è fondamentale un feedback che permetta di tenere sotto controllo l'attività e le prestazioni di un'applicazione;
  • sicurezza: in caso di compromissione di un servizio può risultare importante risalire alle ultime operazioni che hanno preceduto il "fattaccio";
  • debug: al verificarsi di errori nell'applicazione i log aiutano ad individuare la fonte delle anomalie;
  • statistiche: forse l'aspetto più noto nel caso di un server web, data l'importanza di conoscere informazioni quali il numero di visitatori in un certo intervallo di tempo, le pagine più consultate, il tipo di browser utilizzato e via discorrendo.

Ebbene sì, nell'amministrare un server Apache, il tanto vituperato Grande Fratello o Echelon siamo noi che spiamo ogni mossa dei nostri visitatori.....naturalmente a fin di bene.

I tipi di log

Apache prevede due tipi di log, Access Log, log degli accessi, ed Error Log, log degli errori. Il primo registra tutte le richieste HTTP che giungono al server, il secondo memorizza informazioni diagnostiche ed errori incontrati nel processare le richieste. I log degli accessi sono suscettibili di notevole personalizzazione, mentre per gli errori possiamo definire solo il "livello" ovvero l'importanza che essi debbono assumere per essere registrati. Di seguito analizzeremo la memorizzazione degli accessi riservando un prossimo articolo alla descrizione del log degli errori.

Access Log

Se scorriamo il file di configurazione di Apache, httpd.conf, troveremo due direttive che si occupano di controllare la memorizzazione degli accessi: CustomLog e LogFormat. La prima, più importante, stabilisce la posizione del file di registrazione e cosa debba essere memorizzato. La seconda permette di assegnare un nome ad un prefissato formato di registrazione, per rendere più agevole il riferimento ad esso. Una possibile configurazione potrebbe essere la seguente:

LogFormat "%h %l %u %t "%r" %>s %b" common

CustomLog logs/access_log common

Vediamo nel dettaglio le direttive per poterle interpretare. Log Format viene seguita da una stringa delimitata da doppi apici, "%h %l %u %t "%r" %>s %b", si noti come venga effettuato l'escape mediante back slash in "%r" per evitare che i doppi apici siano interpretati come fine stringa. Al suo interno i caratteri preceduti dal simbolo di percentuale specificano al server un particolare tipo d'informazione che si vuole memorizzare. Ad esempio %h sta per remote host ed indica l'indirizzo IP o il nome dell'host che ha effettuato la richiesta, il %b finale identifica, invece, il "peso" dell'oggetto fornito al client, come potrebbe essere una pagina o un'immagine in essa contenuta. Naturalmente la documentazione ufficiale riporta l'elenco completo dei possibili parametri utilizzabili nella stringa di configurazione. La direttiva termina con la parola "common" che rappresenta il nome assegnato alla stringa di configurazione in modo tale che si possa fare riferimento ad essa mediante tale nick.

Custom Log specifica il path in cui sarà inizialmente creato e successivamente riempito il file degli accessi, il cui nome è, convenzionalmente, access_log nei sistemi unix e access.log nei sistemi windows. Notiamo che il percorso non inizia con una slash: sarà interpretato come relativo alla ServerRoot, directory principale del nostro web server dove normalmente hanno sede le configurazioni. Ad esempio /etc/httpd in un sistema linux e c:/Programmi/Apache Group/Apache2 in windows. In caso contrario dovremo specificarlo in modo completo, ad esempio /var/log/apache/access_log.

Infine ritroviamo le parola "common" che specifica ad Apache di utilizzare il formato per le registrazioni sopra definito.

Con notazione meno elegante, la configurazione sopra riportata poteva essere ottenuta anche così:

CustomLog logs/access_log "%h %l %u %t "%r" %>s %b"

CLF Common Log Format

Il formato di registrazione appena definito è noto come Common Log Format e nasce da uno sforzo di standardizzazione per far sì che diversi web server producano lo stesso tipo di file. Con l'affermarsi di tali server furono ben presto sviluppati numerosi software di analisi dei log con lo scopo di rendere più facile la vita agli amministratori. La babele di formati rese l'adozione e l'utilizzo di tali programmi piuttosto difficoltoso finché la specifica CLF li rese in grado processare file prodotti da diversi server.

Un file CLF è costituito da una riga per ciascuna richiesta HTTP, all'interno della singola riga compaiono diverse informazioni separate da spazi: host, ident, authuser, date, request, status, bytes. Queste non sono altro che i parametri indicati nella stringa di LogFormat del paragrafo precedente.

Apriamo con un editor di testo il file degli accessi ed analizziamone una riga per imparare a leggerla.

127.0.0.1 - - [06/Aug/2005:15:12:41 +0200] "GET /fornitori_list.php HTTP/1.1" 200 2630
  • 127.0.0.1 (%h): come già accennato rappresenta il numero IP del client o il nome host se è stata attivata la conversione (HostnameLookups On);
  • - (%l): in questo caso il trattino indica l'assenza dell'informazione che sarebbe stata l'identità del client;
  • - (%u): ancora un trattino ad indicare la mancanza del nome utente, informazione presente se fosse stata richiesta un'autenticazione HTTP ad esempio proteggendo le pagine con un .htaccess;
  • [06/Aug/2005:15:12:41 +0200] (%t): data e ora più fuso orario;
  • "GET /fornitori_list.php HTTP/1.1" ("%r"): le informazioni racchiuse tra doppi apici sono varie; primo il metodo di richiesta, in questo caso GET, poi la pagina richiesta, infine il protocollo HTTP usato;
  • 200 (%>s): il codice di stato HTTP a 3 cifre restituito dal web server al client, 200 è il più comune ed indica che la richiesta ricevuta è stata correttamente soddisfatta.
  • 2630 (%b): i bytes corrispondenti all'oggetto richiesto.

Teniamo sempre presente che la richiesta di una pagina web, generalmente, produrrà la scrittura di più linee nel file di log. Se ad esempio la pagina contiene un'immagine questa costituirà un'ulteriore richiesta al server web.

Combined Log Format

All'interno del nostro httpd.conf troviamo generalmente già definito un altro formato molto diffuso, il cosiddetto Combined Log Format. Esso aggiunge due nuove informazioni rispetto al Common Log Format: il "referer" %{Referer}i, che, semplificando, possiamo considerare il sito da cui arriva il client; lo "user agent" {User-Agent}i, ovvero le informazioni fornite dal browser del visitatore. Potremmo dunque utilizzare una configurazione di questo tipo:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

CustomLog logs/access_log combined

Le righe del file di log avranno un aspetto simile a questo:

127.0.0.1 - - [06/Aug/2005:15:12:41 +0200] "GET /fornitori_list.php HTTP/1.1" 200 2630 "http://www.sito.it/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

Le informazioni aggiuntive rispetto al CLF sono:

  • "http://www.sito.it/" ("%{Referer}i"): con cui il client ci dice di essere arrivato da www.sito.it;
  • "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" ("%{User-Agent}i"): con cui il client si identifica come una macchina con s.o. windows ed Internet Explorer 6;

Alcune osservazioni

Se il nostro server ospita più host virtuali, senza ulteriori configurazioni, tutte le richieste verranno loggate in un medesimo file rendendo arduo, a posteriori, distinguere quale tra essi abbia risposto.

Si potrebbe inserire il parametro %v nella definizione del Log Format che obbliga Apache a memorizzare anche il nome del virtual host. La soluzione più semplice e diffusa consiste nell'utilizzare la direttiva CustomLog all'interno del contenitore <VirtualHost> definendo un file degli accessi distinto per ogni host virtuale. Tale configurazione consente di definire anche un log degli errori separato, dato che per questo tipo di file la personalizzazione e quindi la possibile distinzione per host virtuale, risulta limitata.

<VirtualHost 192.168.0.1>
 ServerName      www.miosito.com
 DocumentRoot    /var/www/miosito
 CustomLog	/mypath_to_log/access_log common
 ..................
</VirtualHost>

Se preferiamo memorizzare separatamente alcune informazioni possiamo definire vari files di log ripetendo la direttiva CustomLog come nell'esempio seguente:

LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog logs/access_log common
CustomLog logs/ref_log referer
CustomLog logs/agent_log agent

Otterremo tre distinti files: uno contenente le informazioni comuni, uno per i referer ed uno per le informazioni fornite dai browser.

Come "bicchiere della staffa" voglio segnalarvi che Apache permette di inviare i messaggi d'accesso e d'errore ad un altro programma che si occuperà di gestirli secondo la propria logica. Questo fornisce enormi possibilità all'amministratore che voglia avventurarsi in qualche operazione non standard. Per ottenere tutto ciò basta sostituire il nome del file con una pipe seguita dal nome del programma:

CustomLog "|/usr/bin/mio_programma"

Conclusioni

Giunti a questo punto dovreste possedere le nozioni fondamentali per gestire la memorizzazione degli accessi con Apache. Un successivo articolo, di prossima pubblicazione, verrà dedicato al log degli errori.

La maggior parte degli esempi riportati sono tratti direttamente dal file di configurazione httpd.conf di Apache 2.0.54, come sempre abbondantemente commentato e fonte d'ispirazione. L'amministrazione dei log files richiede altre importanti attività che, per ragioni di spazio, non è stato possibile affrontare. Accenno alla necessità d'adottare un software di analisi statistica per una migliore leggibilità delle informazioni raccolte. Ancora, un sito mediamente trafficato, ci costringerà in breve a gestire file di dimensioni considerevoli. Per evitare problemi dovremo generare periodicamente nuovi file e spostare o eliminare i precedenti mettendo in atto la cosiddetta rotazione, log rotation.

Appare chiaro quante siano le possibili questioni da sviscerare in tema di log e, come sempre, HTML.IT cercherà di farlo da queste pagine.

Ti consigliamo anche