
Eine Python-Anwendung zum Filtern und Übertragen von Zeek-Logs an Elastic/OpenSearch+Humio. Diese Anwendung kann auch reine JSON-Logs an stdout ausgeben, um sie weiterzuverarbeiten!
Diese Python-Anwendung übersetzt die ASCII-TSV- und JSON-Protokolle von Zeek in das Bulk-Load-JSON-Format von ElasticSearch.

Möchten Sie mehrere Zeek-Protokolle für dieselbe Verbindungs-ID (uid) oder Datei-ID (fuid) sehen? Hier sind die Treffer aus files.log, http.log und conn.log für eine einzelne uid:

Sie können auf dem 'addr'-Typ von Zeek eine Subnetzsuche durchführen:

Sie können Zeitreihendiagramme erstellen, wie dieses NTP- und HTTP-Diagramm:

IP-Adressen können mit der Befehlszeilenoption -g geolokalisiert werden:

Aggregationen sind einfach und schnell:

Diese Anwendung funktioniert "einfach so", wenn sich die Formate der Zeek-Protokolle ändern. Die Logik liest die Feldnamen und zugehörigen Typen, um die Mappings in ElasticSearch korrekt einzurichten.
Diese Anwendung erkennt gzip-komprimierte oder unkomprimierte Protokolle. Diese Anwendung setzt voraus,
dass ElasticSearch auf Ihrem localhost am Standardport eingerichtet ist.
Wenn Sie ElasticSearch nicht haben, können Sie die JSON-Daten mit den Befehlszeilenoptionen -s -b nach stdout ausgeben,
um sie mit der jq-Anwendung zu verarbeiten.
Sie können mit der Befehlszeilenoption -k ein Keyword-Unterfeld zu Textfeldern hinzufügen. Dies ist nützlich
für Aggregationen in Kibana.
Wenn Python bereits auf Ihrem System ist, müssen Sie nichts zusätzlich auf Ihren Rechner kopieren, außer Elasticsearch, Kibana und zeek2es.py, wenn Sie die Bibliothek requests bereits installiert haben.
Vorausgesetzt, Sie erfüllen die Anforderungen, gibt es keine. Sie kopieren einfach
zeek2es.py auf Ihren Host und führen es mit Python aus. Sobald Zeek-
Protokolle mit automatischer Indexnamensgenerierung importiert wurden (d.h. Sie haben die Option -i nicht angegeben),
finden Sie Ihre Indizes mit dem Namen "zeek_zeeklogname_date", wobei zeeklogname ein Protokollname wie conn
ist und date im Format YYYY-MM-DD vorliegt. Setzen Sie in diesem Fall Ihr Kibana-Indexmuster so, dass es mit zeek* übereinstimmt. Wenn
Sie Ihren Index mit der Option -i benannt haben, müssen Sie ein Kibana-Indexmuster erstellen, das
zu Ihrem Benennungsschema passt.
Wenn Sie zeek2es aktualisieren, lesen Sie bitte den Abschnitt über die Aktualisierung von zeek2es.
Wenn Sie Elastic v8.0+ verwenden, ist die Sicherheit standardmäßig aktiviert. Dadurch sind ein Benutzername und ein Passwort sowie HTTPS erforderlich.
Wenn Sie Indizes/Datenströme mit Platzhaltern löschen können möchten (wie die Beispiele in dieser Readme-Datei zeigen),
bearbeiten Sie elasticsearch.yml mit der folgenden Zeile:```
action.destructive_requires_name: false
Sie müssen auch die curl-Befehle in dieser README-Datei ändern, sodass sie `-k -u elastic:<password>` enthalten,
wobei das Passwort des Benutzers `elastic` mit einem Befehl wie dem folgenden festgelegt wird:```
./bin/elasticsearch-reset-password -u elastic -i
Sie können zeek2es.py mit den Befehlszeilenoptionen --user und --passwd verwenden, um Ihre
Anmeldedaten für ES anzugeben. Sie können diese Optionen auch über die zusätzlichen Befehlszeilenargumente für die
Hilfsskripte bereitstellen.
Wahrscheinlich ist Docker der einfachste Weg, diesen Code zu verwenden. Alle Dateien befinden sich im Verzeichnis docker.
Zuerst sollten Sie die Zeilen mit CHANGEME!!! in der Datei .env bearbeiten, um sie an Ihre Umgebung anzupassen.
Sie müssen außerdem das Elastic-Passwort in docker/zeek2es/entrypoint.sh entsprechend anpassen. Es befindet sich nach der Option --passwd.
Danach können Sie in das Verzeichnis docker wechseln und die folgenden Befehle eingeben, um einen zeek2es- und Elasticsearch-Cluster
hochzufahren:```
docker-compose build
dockr-compose up
Sie können nun Protokolle in das Verzeichnis `VOLUME_MOUNT/data/logs` legen (`VOLUME_MOUNT` haben Sie in der `.env`-Datei festgelegt).
Wenn Protokolle in diesem Verzeichnis erstellt werden, beginnt zeek2es mit der Verarbeitung und überträgt sie in Elasticsearch.
Sie können sich dann bei https://localhost:5601 mit dem Benutzernamen und dem Passwort anmelden, die Sie in der `.env`-Datei festgelegt haben.
Standardmäßig gibt es ein selbstsigniertes Zertifikat, das Sie jedoch ändern können, wenn Sie die Docker-Compose-Dateien bearbeiten. Sobald Sie in Kibana sind, gehen Sie zu Stack Management->Data Views und erstellen Sie eine Datenansicht für `logs*` mit dem Zeitstempel `@timestamp`.
Jetzt können Sie zu Discover gehen und mit der Suche in Ihren Protokollen beginnen! Ihre Daten werden dauerhaft in dem von Ihnen festgelegten Verzeichnis `VOLUME_MOUNT/data` gespeichert.
Wenn Sie alle Daten entfernen möchten, führen Sie einfach `rm -rf VOLUME_MOUNT/data` aus und setzen Sie dabei das von Ihnen festgelegte Verzeichnis in diesen Löschbefehl ein.
Beim nächsten Start Ihres Clusters ist er für weitere Daten wie neu.
## Upgrade von zeek2es <a name="upgradingzeek2es" />
Die meisten Upgrades sollten so einfach sein wie das Kopieren der neueren [zeek2es.py](https://github.com/corelight/zeek2es/blob/master/zeek2es.py) über
die alte Datei. In einigen Fällen kann sich die für die Befehlszeilenoption `-g` erforderliche ES-Ingest-Pipeline
während eines Upgrades ändern. Daher wird dringend empfohlen,
Ihre [Ingest-Pipeline](#esingestpipeline) zu löschen, bevor Sie eine neue Version von zeek2es.py ausführen.
### ES-Ingest-Pipeline <a name="esingestpipeline" />