FileBeat, IIS LOG e X-Forwarded-For


FileBeat è il ben noto log shipper di Elasticsearch per caricare log dalle più disparate fonti. Uno dei moduli di FileBeat serve a caricare i file di log di IIS. Bisogna ricordare però che i file di log di IIS possono avere un numero variabile di campi, liberamente selezionabili, oltre a poter aggiungere dei campi custom. Per poter far digerire correttamente i vostri file di log bisogna modificare il file:

%ProgramFiles%\filebeat\module\iis\access\ingest\default.json

Questo file contiene la sezione grok:

"grok": {                

"field": "message",                

"patterns": [                    

"%{TIMESTAMP_ISO8601:iis.access.time} %{IPORHOST:destination.address} %{WORD:http.request.method} %{NOTSPACE:url.path} %{NOTSPACE:url.query} %{NUMBER:destination.port:long} %{NOTSPACE:user.name} %{IPORHOST:source.address} %{NOTSPACE:user_agent.original} %{NOTSPACE:http.request.referrer} %{NUMBER:http.response.status_code:long} %{NUMBER:iis.access.sub_status:long} %{NUMBER:iis.access.win32_status:long} %{NUMBER:temp.duration:long}"                       

],

"ignore_missing": true            

}

Il campo patterns è un array di stringhe, ogni riga indica un paeern diverso di possibile interpretazione delle collonne del file di log verso le colonne interne di Elsticsearch. Nel caso evidenziato una riga del file di log inizia con la data e l’ora dell’evento, prosegue con l’IP del server di destinazione e così via. Per cui uno di questi pattern deve coincidere con il pattern del vostro file di log.

X-Forwarded-For

Il campo X-Forwarded-For è il campo (oppure True-Client-IP ) viene utilizzato dai vari reverse-proxy o load balancer per trasmettere l’ip originale dal quale viene la richiesta, infatti in questa situazione il campo c-ip di IIS contiene l’IP del reverse proxy. Per inserire il valore del X-Forwarded-For nel file di log bisogna:

Aprire IIS Manager
Espandere il nodo server
Espandere il nodo siti
Cliccare sul proprio sito web
Doppio click su Registrazione
Cliccare su Seleziona campi...
Cliaccare Aggiungi campo... in fondo nella dialog
Mettere X-Forwarded-For sia in Nome campo che in  Origine.
lascaire Intestazione richiesta come Tipo di origine
Cliccare OK nella dialog Aggiungi campo personalizzato
Cliccare OK nella dialog Campi di registrazione
Cliccare Applica sulla destra.

In questo modo IIS preleverà il campo dalle instestazioni delle richieste e lo scriverà nel file di log.

Ritornando al nostro pattern dell’array patterns, bisogna creare un pattern con il campo %{IPORHOST:iis.access.remote_ip}} piazzato nella posizione in cui si trova il campo X-Forwarded-For.

Modifiche su Elasticsearch

Una volta modificato il file %ProgramFiles%\filebeat\module\iis\access\ingest\default.json, bisogna aggiornare la pipeline di ingest sul server. Siccome la pipeline si chiama in modo diverso a seconda della versione di FileBeat, la cosa migliore è eseguire la richiesta (con la consolle di Kibana o con curl)

GET _ingest/pipeline

Vi verrà restituita la lista completa delle pipeline, una di queste sarà del tipo “filebeat-7.4.2-iis-error-default” dove il numero di versione può variare, a questo punto con la richiesta

PUT _ingest/pipeline/filebeat-7.4.2-iis-error-default {contenuto del file default .json}

A questo punto anche Elasticsearch sarà pronto a recepire gli eventi nel formato da voi prescelto.

P.S.

Per testare se il pattern cattura il vostro file di log, c’è il sito http://grokconstructor.appspot.com che permette di testare il tutto prima di installare il tutto.