
Una aplicación de Python para filtrar y transferir registros de Zeek a Elastic/OpenSearch+Humio. ¡Esta aplicación también puede generar registros JSON puros a stdout para su posterior procesamiento!
Esta aplicación de Python traduce los registros ASCII TSV y JSON de Zeek al formato JSON de carga masiva de ElasticSearch.

¿Quieres ver múltiples registros de Zeek para el mismo ID de conexión (uid) o ID de archivo (fuid)? Aquí están los resultados de files.log, http.log y conn.log para un único uid:

Puedes realizar búsquedas de subred en el tipo 'addr' de Zeek:

Puedes crear gráficos de series temporales, como este gráfico de NTP y HTTP:

Las direcciones IP se pueden geolocalizar con la opción de línea de comandos -g:

Las agregaciones son sencillas y rápidas:

Esta aplicación "simplemente funcionará" cuando cambien los formatos de los registros de Zeek. La lógica lee los nombres de los campos y los tipos asociados para configurar correctamente los mapeos en ElasticSearch.
Esta aplicación reconocerá registros comprimidos con gzip o sin comprimir. Esta aplicación asume
que tienes ElasticSearch configurado en tu localhost en el puerto predeterminado.
Si no tienes ElasticSearch, puedes enviar el JSON a stdout con las opciones de línea de comandos -s -b
para procesarlo con la aplicación jq.
Puedes añadir un subcampo de palabra clave a los campos de texto con la opción de línea de comandos -k. Esto es útil
para las agregaciones en Kibana.
Si Python ya está en tu sistema, no necesitas copiar nada adicional a tu máquina aparte de Elasticsearch, Kibana y zeek2es.py si ya tienes instalada la biblioteca requests.
Asumiendo que cumples los requisitos, no hay ninguno. Solo
copias zeek2es.py a tu host y lo ejecutas con Python. Una vez que los registros de Zeek
se hayan importado con la generación automática de nombres de índice (es decir, si no proporcionaste la opción -i),
encontrarás tus índices con el nombre "zeek_zeeklogname_date", donde zeeklogname es un nombre de registro como conn
y la date está en formato YYYY-MM-DD. Configura tu patrón de índice de Kibana para que coincida con zeek* en este caso. Si
nombriste tu índice con la opción -i, tendrás que crear un patrón de índice de Kibana que
coincida con tu esquema de nombres.
Si vas a actualizar zeek2es, consulta la sección sobre actualizar zeek2es.
Si usas Elastic v8.0+, tiene la seguridad habilitada por defecto. Esto añade el requisito de un nombre de usuario y una contraseña, además de HTTPS.
Si quieres poder eliminar índices/flujos de datos con comodines (como muestran los ejemplos de este readme),
edita elasticsearch.yml con la siguiente línea:```
action.destructive_requires_name: false
También necesitarás cambiar los comandos curl de este readme para que contengan `-k -u elastic:<password>` donde la contraseña del usuario `elastic` se establece con un comando como el siguiente:```
./bin/elasticsearch-reset-password -u elastic -i
Puedes usar zeek2es.py con las opciones de línea de comandos --user y --passwd para especificar tus
credenciales para ES. También puedes proporcionar estas opciones mediante los argumentos de línea de comandos adicionales para los scripts auxiliares.
Probablemente la forma más fácil de usar este código es mediante Docker. Todos los archivos están en el directorio docker.
Primero, querrás editar las líneas con CHANGEME!!! en el archivo .env para adaptarlas a tu entorno.
También necesitarás editar la contraseña de Elastic en docker/zeek2es/entrypoint.sh para que coincida. Se puede encontrar después de la opción --passwd.
A continuación, puedes cambiar al directorio docker y escribir los siguientes comandos para levantar
un clúster de zeek2es y Elasticsearch:```
docker-compose build
dockr-compose up
Ahora puedes colocar los registros en el directorio `VOLUME_MOUNT/data/logs` (el `VOLUME_MOUNT` que estableciste en el archivo `.env`).
Cuando se CREAN registros en este directorio, zeek2es comenzará a procesarlos y enviarlos a Elasticsearch.
Luego puedes iniciar sesión en https://localhost:5601 con el nombre de usuario y la contraseña que configuraste en el archivo `.env`.
Por defecto hay un certificado autofirmado, pero puedes cambiarlo si editas los archivos de docker compose. Una vez dentro de
Kibana irás a Stack Management->Data Views y crearás una vista de datos para `logs*` con la marca de tiempo `@timestamp`.
Ahora podrás ir a Discover y comenzar a buscar tus registros. Tus datos persisten en el directorio `VOLUME_MOUNT/data` que configuraste.
Si deseas eliminar todos los datos, simplemente ejecuta `rm -rf VOLUME_MOUNT/data`, sustituyendo el directorio que configuraste en ese comando de eliminación.
La próxima vez que inicies tu clúster, estará como nuevo para almacenar más datos.
## Actualizando zeek2es <a name="upgradingzeek2es" />
La mayoría de las actualizaciones deberían ser tan simples como copiar la versión más reciente de [zeek2es.py](https://github.com/corelight/zeek2es/blob/master/zeek2es.py) sobre
la anterior. En algunos casos, el pipeline de ingesta de ES requerido para la opción de línea de comandos `-g`
podría cambiar durante una actualización. Por lo tanto, se recomienda encarecidamente que elimines
tu [pipeline de ingesta](#esingestpipeline) antes de ejecutar una nueva versión de zeek2es.py.
### Pipeline de ingesta de ES <a name="esingestpipeline" />
Si necesitas [eliminar el pipeline de ingesta de ES "zeekgeoip"](https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-pipeline-api.html)
utilizado para geolocalizar direcciones IP con la opción de línea de comandos `-g`, puedes hacerlo gráficamente
a través del Stack Management->Ingest Pipelines de Kibana o con este comando:```
curl -X DELETE "localhost:9200/_ingest/pipeline/zeekgeoip?pretty"
Se recomienda encarecidamente este comando siempre que actualices tu copia de zeek2es.py.