
Une application Python pour filtrer et transférer les journaux Zeek vers Elastic/OpenSearch+Humio. Cette application peut également produire des journaux JSON purs sur stdout pour un traitement ultérieur !
Cette application Python traduit les journaux Zeek au format TSV ASCII et JSON dans le format de chargement en masse JSON d'ElasticSearch.

Vous voulez voir plusieurs journaux Zeek pour le même ID de connexion (uid) ou ID de fichier (fuid) ? Voici les résultats de files.log, http.log et conn.log pour un seul uid :

Vous pouvez effectuer des recherches de sous-réseau sur le type 'addr' de Zeek :

Vous pouvez créer des graphiques de séries chronologiques, comme ce graphique NTP et HTTP :

Les adresses IP peuvent être géolocalisées avec l'option de ligne de commande -g :

Les agrégations sont simples et rapides :

Cette application fonctionnera « simplement » lorsque les formats de journaux Zeek changeront. La logique lit les noms de champs et les types associés pour configurer correctement les mappings dans ElasticSearch.
Cette application reconnaîtra les journaux gzip ou non compressés. Cette application suppose
qu'ElasticSearch est configuré sur votre localhost au port par défaut.
Si vous n'avez pas ElasticSearch, vous pouvez sortir le JSON vers stdout avec les options de ligne de commande -s -b
pour le traiter avec l'application jq.
Vous pouvez ajouter un sous-champ keyword aux champs texte avec l'option de ligne de commande -k. Ceci est utile
pour les agrégations dans Kibana.
Si Python est déjà sur votre système, il n'y a rien de supplémentaire à copier sur votre machine que Elasticsearch, Kibana et zeek2es.py si vous avez déjà la bibliothèque requests installée.
En supposant que vous remplissez les prérequis, il n'y en a pas. Vous copiez simplement
zeek2es.py sur votre hôte et l'exécutez avec Python. Une fois que les journaux Zeek
ont été importés avec la génération automatique de noms d'index (c'est-à-dire que vous n'avez pas fourni l'option -i),
vous trouverez vos index nommés « zeek_nomdujournalzeek_date », où nomdujournalzeek est un nom de journal comme conn
et date est au format AAAA-MM-JJ. Définissez votre modèle d'index Kibana pour qu'il corresponde à zeek* dans ce cas.
Si vous avez nommé votre index avec l'option -i, vous devrez créer un modèle d'index Kibana qui
correspond à votre schéma de nommage.
Si vous mettez à niveau zeek2es, veuillez consulter la section sur la mise à niveau de zeek2es.
Si vous utilisez Elastic v8.0+, la sécurité est activée par défaut. Cela ajoute l'exigence d'un nom d'utilisateur et d'un mot de passe, plus HTTPS.
Si vous souhaitez pouvoir supprimer des index/flux de données avec des caractères génériques (comme le montrent les exemples de ce readme),
modifiez elasticsearch.yml avec la ligne suivante :```
action.destructive_requires_name: false
Vous devrez également modifier les commandes curl de ce readme pour y inclure `-k -u elastic:<password>`
où le mot de passe de l'utilisateur `elastic` est défini avec une commande comme la suivante :```
./bin/elasticsearch-reset-password -u elastic -i
Vous pouvez utiliser zeek2es.py avec les options de ligne de commande --user et --passwd pour spécifier vos
identifiants à ES. Vous pouvez également fournir ces options via les arguments de ligne de commande supplémentaires pour les scripts
d'assistance.
C'est probablement le moyen le plus simple d'utiliser ce code : via Docker. Tous les fichiers se trouvent dans le répertoire docker.
Tout d'abord, vous voudrez modifier les lignes contenant CHANGEME!!! dans le fichier .env pour les adapter à votre environnement.
Vous devrez également modifier le mot de passe Elastic dans docker/zeek2es/entrypoint.sh pour qu'il corresponde. Il se trouve après l'option --passwd.
Ensuite, vous pouvez changer de répertoire pour entrer dans le répertoire docker et taper les commandes suivantes pour
démarrer un cluster zeek2es et Elasticsearch :```
docker-compose build
dockr-compose up
Vous pouvez maintenant placer des logs dans le répertoire `VOLUME_MOUNT/data/logs` (`VOLUME_MOUNT` que vous avez défini dans le fichier `.env`).
Lorsque des logs sont CRÉÉS dans ce répertoire, zeek2es commencera à les traiter et à les pousser dans Elasticsearch.
Vous pouvez ensuite vous connecter à https://localhost:5601 avec le nom d'utilisateur et le mot de passe définis dans le fichier `.env`.
Par défaut, il y a un certificat auto-signé, mais vous pouvez le modifier en éditant les fichiers docker compose. Une fois dans
Kibana, allez dans Stack Management->Data Views et créez une vue de données pour `logs*` avec l'horodatage `@timestamp`.
Vous pourrez alors aller dans Discover et commencer à rechercher vos logs ! Vos données sont persistantes dans le répertoire `VOLUME_MOUNT/data` que vous avez défini.
Si vous souhaitez supprimer toutes les données, exécutez simplement `rm -rf VOLUME_MOUNT/data`, en remplaçant le répertoire que vous avez défini dans cette commande de suppression.
La prochaine fois que vous démarrerez votre cluster, il sera comme neuf pour accueillir de nouvelles données.
## Mise à niveau de zeek2es <a name="upgradingzeek2es" />
La plupart des mises à niveau devraient être aussi simples que de copier le nouveau [zeek2es.py](https://github.com/corelight/zeek2es/blob/master/zeek2es.py) par-dessus
l'ancien. Dans certains cas, le pipeline d'ingestion ES requis pour l'option de ligne de commande `-g`
peut changer lors d'une mise à niveau. Par conséquent, il est fortement recommandé de supprimer
votre [pipeline d'ingestion](#esingestpipeline) avant d'exécuter une nouvelle version de zeek2es.py.
### Pipeline d'ingestion ES <a name="esingestpipeline" />