
Un'applicazione Python per filtrare e trasferire i log di Zeek verso Elastic/OpenSearch+Humio. Questa app può anche emettere log JSON puri su stdout per ulteriori elaborazioni!
Questa applicazione Python traduce i log di Zeek in formato ASCII TSV e JSON nel formato di caricamento bulk JSON di ElasticSearch.

Vuoi vedere più log di Zeek per lo stesso ID di connessione (uid) o ID di file (fuid)? Ecco le corrispondenze da files.log, http.log e conn.log per un singolo uid:

Puoi effettuare ricerche per sottorete sul tipo 'addr' di Zeek:

Puoi creare grafici di serie temporali, come questo grafico NTP e HTTP:

Gli indirizzi IP possono essere geolocalizzati con l'opzione da riga di comando -g:

Le aggregazioni sono semplici e veloci:

Questa applicazione funzionerà "da sola" quando i formati dei log di Zeek cambiano. La logica legge i nomi dei campi e i tipi associati per impostare correttamente le mappature in ElasticSearch.
Questa applicazione riconosce i log gzip o non compressi. Questa applicazione presuppone
che ElasticSearch sia configurato sul tuo localhost sulla porta predefinita.
Se non hai ElasticSearch puoi inviare il JSON a stdout con le opzioni da riga di comando -s -b
per elaborarlo con l'applicazione jq.
Puoi aggiungere un sottocampo keyword ai campi di testo con l'opzione da riga di comando -k. Questo è utile
per le aggregazioni in Kibana.
Se Python è già presente sul tuo sistema, non c'è nient'altro da copiare sulla tua macchina oltre a Elasticsearch, Kibana e zeek2es.py se hai già installata la libreria requests.
Supponendo che tu soddisfi i requisiti, non è necessaria alcuna installazione. Devi solo
copiare zeek2es.py sul tuo host ed eseguirlo con Python. Una volta che i log
di Zeek sono stati importati con la generazione automatica del nome dell'indice (cioè, se non hai fornito l'opzione -i)
troverai i tuoi indici denominati "zeek_zeeklogname_date", dove zeeklogname è un nome di log come conn
e date è nel formato YYYY-MM-DD. In questo caso, imposta il pattern dell'indice Kibana in modo che corrisponda a zeek*. Se
hai nominato il tuo indice con l'opzione -i, dovrai creare un pattern di indice Kibana che
corrisponda al tuo schema di denominazione.
Se stai aggiornando zeek2es, consulta la sezione sull'aggiornamento di zeek2es.
Se stai usando Elastic v8.0+, la sicurezza è abilitata per impostazione predefinita. Questo aggiunge il requisito di un nome utente e di una password, oltre a HTTPS.
Se vuoi poter eliminare indici/data stream con caratteri jolly (come mostrano gli esempi in questo readme),
modifica elasticsearch.yml con la seguente riga:```
action.destructive_requires_name: false
Dovrai anche modificare i comandi curl in questo readme per includere `-k -u elastic:<password>`
dove la password dell'utente `elastic` è impostata con un comando come il seguente:```
./bin/elasticsearch-reset-password -u elastic -i
Puoi usare zeek2es.py con le opzioni della riga di comando --user e --passwd per specificare le tue
credenziali per ES. Puoi anche fornire queste opzioni tramite gli argomenti aggiuntivi della riga di comando per gli
script di supporto.
Probabilmente il modo più semplice per usare questo codice è attraverso Docker. Tutti i file si trovano nella directory docker.
Per prima cosa, vorrai modificare le righe con CHANGEME!!! nel file .env per adattarlo al tuo ambiente.
Dovrai anche modificare la password Elastic in docker/zeek2es/entrypoint.sh per farla corrispondere. Si trova dopo l'opzione --passwd.
Successivamente, puoi spostarti nella directory docker e digitare i seguenti comandi per avviare
un cluster zeek2es ed Elasticsearch:```
docker-compose build
dockr-compose up
Ora puoi inserire i log nella directory `VOLUME_MOUNT/data/logs` (`VOLUME_MOUNT` che imposti nel file `.env`).
Quando i log vengono CREATI in questa directory, zeek2es inizierà a elaborarli e a inviarli in Elasticsearch.
Puoi quindi accedere a https://localhost:5601 con il nome utente e la password configurati nel file `.env`.
Per impostazione predefinita è presente un certificato autofirmato, ma puoi cambiarlo se modifichi i file docker compose. Una volta dentro
Kibana andrai su Stack Management->Data Views e creerai una data view per `logs*` con il timestamp `@timestamp`.
Ora potrai andare su Discover e iniziare a cercare i tuoi log! I tuoi dati sono persistenti nella directory `VOLUME_MOUNT/data` che hai impostato.
Se desideri rimuovere tutti i dati, esegui semplicemente `rm -rf VOLUME_MOUNT/data`, sostituendo la directory che hai impostato in quel comando di rimozione.
La prossima volta che avvierai il cluster sarà completamente nuovo per ulteriori dati.
## Aggiornare zeek2es <a name="upgradingzeek2es" />
La maggior parte degli aggiornamenti dovrebbe essere semplice come copiare il [zeek2es.py](https://github.com/corelight/zeek2es/blob/master/zeek2es.py) più recente sopra
quello vecchio. In alcuni casi, la pipeline di ingest ES richiesta per l'opzione da riga di comando `-g`
potrebbe cambiare durante un aggiornamento. Pertanto, si consiglia vivamente di eliminare
la propria [pipeline di ingest](#esingestpipeline) prima di eseguire una nuova versione di zeek2es.py.
### Pipeline di Ingest ES <a name="esingestpipeline" />
Se devi [eliminare la pipeline di ingest ES "zeekgeoip"](https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-pipeline-api.html)
usata per geolocalizzare gli indirizzi IP con l'opzione da riga di comando `-g`, puoi farlo graficamente
tramite Stack Management->Ingest Pipelines di Kibana oppure questo comando lo farà per te:```
curl -X DELETE "localhost:9200/_ingest/pipeline/zeekgeoip?pretty"
Questo comando è fortemente consigliato ogni volta che aggiorni la tua copia di zeek2es.py.