Ricerca nel sito web

lnav: guarda e analizza i registri Apache da un terminale Linux


Meno di due settimane fa, l’attacco ransomware Wannacry ha compromesso migliaia di computer, causando perdite considerevoli sia a grandi aziende che a privati. Ciò, insieme ad altre vulnerabilità diffuse riscontrate negli ultimi anni (come il bug Shellshock), evidenziano l’importanza di rimanere aggiornati sui propri sistemi mission-critical.

Sebbene le vulnerabilità spesso colpiscano uno specifico sistema operativo o componente software, esaminare il traffico in entrata e in uscita dalla rete può essere di grande aiuto per proteggere le risorse di cui sei responsabile.

Lettura consigliata: 4 buoni strumenti di monitoraggio e gestione dei log open source per Linux

Come sicuramente già saprai, i registri di sistema sono il primo posto in cui dovremmo cercare queste informazioni. Per facilitare questo compito, in questo articolo spiegheremo come installare e utilizzare lnav, un visualizzatore avanzato di file di registro. Con lnav potrai guardare diversi tipi di log contemporaneamente, navigare nel file utilizzando i tasti di scelta rapida e generare un istogramma riepilogativo degli accessi e degli errori. Quindi continua a leggere!

Installazione e avvio di lnav in Linux

Per installare lnav, utilizza il sistema di gestione dei pacchetti della tua distribuzione.

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

Una volta completata l'installazione, lanciare lnav seguito dal percorso assoluto della directory in cui si trovano i log da esaminare. Poiché in genere sarà /var/log, facciamo:

lnav /var/log/httpd

per esaminare i log del server web Apache in un CentOS 7:

Esaminiamo brevemente l’output mostrato nell’immagine precedente:

  • L'angolo in alto a destra mostra i file attualmente controllati (access_log-20170519 e access_log). Mentre scorri verso il basso o verso l'alto, noterai che i nomi dei file potrebbero cambiare mentre passi da uno all'altro.
  • Le risposte 40x HTTP (ad esempio, Non trovato o Vietato) vengono visualizzate in grassetto, mentre le risposte 20x vengono visualizzate nel testo normale.
  • Gli indirizzi IP vengono visualizzati in grassetto verde.

Sembra sicuramente carino, vero? Ma scaviamo ora un po’ più a fondo e vedremo che lnav fornisce molto più di un output piuttosto colorato.

Se sei curioso di sapere perché i log degli errori non vengono visualizzati, troverai la risposta più avanti in questo articolo. Quindi continua a leggere!

Modifica dell'output con opzioni e tasti di scelta rapida

Prima di procedere oltre, elenchiamo alcuni tasti di scelta rapida che ci permetteranno di spostarci più facilmente attraverso l'output di lnav e le viste disponibili:

  • e o E per passare al messaggio di errore successivo/precedente.
  • w o W per passare al messaggio di avviso successivo/precedente.
  • b o Backspace per passare alla pagina precedente.
  • Spazio per passare alla pagina successiva.
  • g o G per spostarsi in alto/in basso nella vista corrente.

Quando i log vengono ruotati, i vecchi file potrebbero essere compressi (o meno) a seconda delle impostazioni specificate nei file di configurazione di logrotate. Per includere file compressi nell'output, avvia lnav come segue:

lnav -r /var/log/httpd

Se vuoi dare un'occhiata più da vicino al modo in cui funziona lnav, puoi avviare il programma con l'opzione -d seguita da un nome file in cui verranno scritte le informazioni di debug, in questo modo:

lnav /var/log/httpd -d lnav.txt

In questo esempio, le informazioni di debug generate all'avvio di lnav verranno scritte in un file denominato lnav.txt all'interno della directory di lavoro corrente.

Le prime righe di quel file sono mostrate nell'immagine seguente:

Il testo evidenziato indica che lnav ha caricato il file dei formati predefiniti e, più specificamente, il formato access_log per analizzare il registro di accesso di Apache. Inoltre, lnav consente di analizzare ciascuna riga di output in modo che l'output diventi più facile da visualizzare e comprendere.

Lettura consigliata: Analizzatore di log del server Web GoAccess (Apache e Nginx in tempo reale)

Per utilizzare questa funzione, avvia il programma e scegli la riga che desideri analizzare. La riga selezionata è sempre quella in alto nella finestra. Quindi premi p e dovresti vedere il seguente risultato:

Per tornare alla modalità normale, premere nuovamente p.

Ora, se vuoi vedere un riepilogo dei registri per data e ora, premi i. Ad esempio, il testo evidenziato indica che lunedì 10 aprile, tra le 22 e le 23, ci sono state 37 richieste HTTP di cui 14 risultanti in errore.

Una volta identificato un potenziale problema in base all'istogramma come mostrato sopra, puoi premere i per uscire dalla vista ed esaminarlo più in dettaglio utilizzando il parser come spiegato in precedenza. Oppure puoi anche utilizzare le funzionalità SQL integrate digitando un punto e virgola e scrivendo una query standard. Ad esempio, fai:

;.schema

per visualizzare le tabelle disponibili nello schema del database. Dopo aver individuato la tabella giusta (access_log nel nostro caso), premiamo q e poi utilizziamo la seguente query per restituire tutte le informazioni disponibili sulle richieste provenienti da 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Tieni presente che avremmo potuto anche filtrare i risultati per log_time. Il punto è, aggiungi un po’ di SQL e il limite di ciò che puoi fare con lnav sarà il cielo.

Formati di registro predefiniti di Apache

Molti formati di registro vengono caricati per impostazione predefinita con lnav e vengono quindi analizzati senza il nostro intervento. È possibile visualizzare l'elenco nella sezione Formati registro nella documentazione ufficiale.

I formati predefiniti sono specificati in ~/.lnav/formats/default/default-formats.json.sample e altri possono essere aggiunti ~/.lnav/formats utilizzando < codice>.json estensione.

Tuttavia, la modifica di questi file richiede una certa familiarità con JSON (Javascript Object Notation) e con la libreria PCRE (Perl-Compatible Regular Expressions).

Allora perché lnav non ha visualizzato i file di registro degli errori di Apache? Il motivo è che questi log non corrispondono ad alcuna espressione regolare nei file di formato esistenti e quindi vengono trattati come normali file di testo (ovvero file senza un determinato formato di log).

Lettura consigliata: Come monitorare il carico del server Web Apache e le statistiche della pagina

Come accennato in precedenza, puoi creare i tuoi formati una volta che hai almeno una certa familiarità con JSON e PCRE. Questo può tornare utile, ad esempio, se hai definito log Apache personalizzati.

Riepilogo

Sebbene abbiamo utilizzato il registro di accesso di Apache per dimostrare come utilizzare lnav, tieni presente che esistono molti altri tipi di registri che possono essere visualizzati e analizzati utilizzando questo strumento. Se lo strumento non riconosce un log specifico, puoi creare formati aggiuntivi e installarli seguendo le indicazioni fornite qui.

Hai domande o commenti su questo articolo? Come sempre, non esitate a farcelo sapere utilizzando il modulo sottostante. Restiamo in attesa della vostra risposta!