NUEVO

Técnico

Elasticsearch y Fluentd

Geoff BurkeGB
Geoff Burke
IT Infrastructure & Data Protection Expert

La pila EFK

Ya hemos revisado la pila ELK, pero como prometimos al inicio de la serie, también queríamos presentarte una alternativa a Logstash. Fluentd es más ligero y algunos administradores lo prefieren.

Al igual que en nuestros blogs anteriores, puedes configurar un entorno de trabajo clonando nuestro repositorio de Git y seguir las instrucciones.

¿Por qué EFK para la seguridad?

La pila EFK ofrece varias ventajas para la monitorización de seguridad. Como mencionamos antes, Elasticsearch proporciona capacidades de búsqueda rápida a través de conjuntos de datos masivos, lo que lo hace ideal para analizar registros de seguridad de múltiples fuentes. Fluentd, al igual que Logstash en nuestros ejemplos anteriores, actúa como una capa de registro unificada que puede analizar, transformar y enrutar datos de registro de diversas fuentes a Elasticsearch. Kibana sirve como el frontend de visualización, mientras que Elastic Security añade capacidades SIEM dedicadas, incluyendo caza de amenazas, gestión de casos y reglas de detección automatizadas.

En las próximas secciones, discutiremos las principales diferencias entre Fluentd y Logstash.

Arquitectura y rendimiento

Logstash está construido en Java/JRuby y tiende a ser más intensivo en recursos, con un mayor uso de memoria pero un excelente rendimiento de procesamiento. Utiliza una arquitectura basada en tuberías con etapas de entrada → filtro → salida que es particularmente adecuada para transformaciones complejas.

Fluentd está escrito en Ruby con partes críticas de rendimiento en C, lo que lo hace más ligero en el uso de memoria y más eficiente para el streaming de registros de alto volumen. Utiliza un sistema de enrutamiento basado en etiquetas que puede ser más flexible para escenarios complejos de enrutamiento de registros.

Capacidades de análisis de Syslog

Logstash sobresale en el análisis de syslog con:

  • Ricos plugins de entrada de syslog integrados que manejan varios formatos RFC (RFC3164, RFC5424)
  • Patrones grok potentes para análisis personalizado
  • Fuerte soporte de regex para extracción compleja de mensajes
  • Excelente manejo de datos estructurados dentro de los mensajes de syslog

Fluentd ofrece:

  • Buen soporte de syslog a través de plugins como fluent-plugin-syslog
  • Análisis más ligero que es eficiente para escenarios de alto rendimiento
  • Mejor adaptado para escenarios donde necesitas preservar la estructura original del mensaje
  • Configuración más simple para la ingestión básica de syslog

Configuración y facilidad de uso

Logstash utiliza un lenguaje específico de dominio que es intuitivo para el pensamiento basado en tuberías, pero puede volverse complejo para reglas de procesamiento intrincadas. La configuración es muy expresiva para la transformación de datos.

Fluentd utiliza un formato de configuración más directo que muchos encuentran más fácil de entender y mantener, especialmente para escenarios con mucho enrutamiento.

Ecosistema y plugins

Logstash tiene un ecosistema maduro con extensos plugins de filtro diseñados específicamente para el procesamiento y enriquecimiento de registros. Se integra sin problemas con la pila Elastic más amplia.

Fluentd tiene un gran ecosistema de plugins y es más neutral en cuanto a proveedores, lo que facilita la integración con varios backends más allá de Elasticsearch.

Uso de memoria y recursos

Para el procesamiento de syslog específicamente, Fluentd típicamente utiliza menos memoria y tiene una huella más pequeña, lo que puede ser crucial en entornos con recursos limitados o al procesar volúmenes muy altos de datos de syslog.

Logstash requiere más recursos pero proporciona más potencia de procesamiento para transformaciones y filtrado complejos.

Confiabilidad y durabilidad de datos

Ambos manejan syslog de manera confiable, pero Fluentd tiene mecanismos de almacenamiento en búfer y reintentos integrados que algunos consideran más robustos para garantizar la entrega de datos. Logstash requiere configuración adicional para garantías de confiabilidad similares.

¿Cuál debo elegir?

Si ya estás invertido en el ecosistema Elastic y requieres capacidades avanzadas de transformación de datos, Logstash es una opción sólida. Para aquellos que priorizan la eficiencia de recursos y una configuración más simple—especialmente para la ingestión de syslog—Fluentd puede ser la mejor opción.

Práctica con EFK

Configurando Elastic Security

Elastic Security es la base de las capacidades SIEM de Elastic. En la siguiente sección, utilizaremos nuestro entorno de trabajo EFK Docker Stack para explorarlo en la práctica.

1. Clona el repositorio de Git: https://github.com/object1st/efk-stack.git

Nota: El repositorio está organizado como se muestra a continuación. Más adelante en el proceso de configuración, necesitarás agregar las contraseñas que crees a los archivos de configuración fluentd.conf y kibana.yml.

2. Asegúrate de que has instalado docker y docker compose en tu VM de prueba Ubuntu.Consulta nuestro blog anterior para obtener instrucciones sobre este proceso.

3. Cambia al directorio.

cd efk-stack  

4. Ejecuta este comando para levantar el entorno:

docker compose up -d

5. Verifica que todos los contenedores estén en funcionamiento:

docker ps

6. Asegúrate de que los servicios estén funcionando sin errores en los contenedores:

docker logs elasticseach
docker logs kibana
docker logs fluentd

Nota: Para Kibana y Fluentd, verás un error ya que aún no hemos configurado la seguridad.

Configurando contraseñas e integración de seguridad

Paso 1: Configurar contraseñas para Elasticsearch

1. Para comenzar, necesitarás crear contraseñas para los usuarios integrados en Elasticsearch. Ejecuta el siguiente comando:

docker exec -it elasticsearch bin/elasticsearch-setup-passwords interactive  

2. Esto te pedirá que configures contraseñas para varios usuarios. Solo necesitas recordar las contraseñas de los siguientes dos usuarios:

  • elastic
  • kibana_system

3. Para los otros usuarios, puedes ingresar cualquier contraseña—no serán necesarias para este tutorial.

Paso 2: Agregar contraseñas a los archivos de configuración

1. Una vez que hayas creado las contraseñas, agrégalas a tu archivo de configuración de Kibana:

Archivo: kibana.yaml

2. Actualiza o agrega las siguientes líneas con las contraseñas que configuraste:

3. Asegúrate de reemplazarlo con la contraseña real que creaste.

Paso 3: Reiniciar los contenedores de Kibana

Después de actualizar el archivo kibana.yaml con la contraseña correcta, reinicia el contenedor de Kibana para aplicar los cambios:

docker compose restart kibana

Paso 4: Actualizar la configuración de Fluentd

A continuación, actualiza tu archivo fluentd.conf para incluir la contraseña de Elasticsearch que creaste anteriormente. Esto asegura que Fluentd pueda autenticarse correctamente al enviar registros a Elasticsearch.

Nota: Asegúrate de que la contraseña esté almacenada de forma segura y no expuesta en el control de versiones.

Paso 5: Reiniciar Fluentd

Una vez que hayas actualizado la configuración, reinicia el contenedor de Fluentd:

docker compose restart fluentd  

Paso 6: Verificar el estado del contenedor

Para confirmar que tanto Kibana como Fluentd están funcionando correctamente, verifica sus registros:

Registros de Fluentd:

docker logs fluentd

Registros de Kibana:

docker logs kibana

Busca cualquier error o advertencia que pueda indicar problemas con la autenticación o conectividad.

Paso 7: Acceder a Kibana

http://yourvmORip:5601

1. Serás recibido por la siguiente pantalla de inicio de sesión:

2. Inicia sesión utilizando la contraseña que creaste para el usuario Elastic.

Ingestando un mensaje de prueba de Syslog en Fluentd

Para probar tu configuración, enviarás un mensaje de syslog de muestra a Fluentd, que lo analizará y lo enviará a Elasticsearch. Kibana te permitirá visualizar los datos y crear alertas utilizando Elastic Security.

Paso 1: Crear una plantilla de índice

Antes de enviar datos, necesitas definir una plantilla de índice que coincida con la estructura de los registros que Fluentd enviará.

  1. Navega a la carpeta Examples en tu repositorio clonado.
  2. Abre el archivo llamado create_index_template.txt.
  3. Reemplaza la contraseña de marcador de posición con tu contraseña real de Elastic.
  4. Copia todo el contenido del archivo.
  5. Pégalo en tu terminal y presiona “Enter” para ejecutar el comando.
  6. Si es exitoso, deberías ver una respuesta como:

Esto confirma que la plantilla de índice ha sido creada y está lista para recibir datos.

Paso 2: Enviar un Mensaje de Syslog de Prueba Veeam

Ejecute el siguiente comando en su terminal para simular una alerta de ransomware Veeam:

echo '<14>1 2025-03-20T14:06:09.662307+02:00 VBRSRV01 Veeam_MP - - [origin enterpriseId="31023"] [categoryId=0 instanceId=41600 DetectionTimeUTC="03/20/2025 13:05:41" OibID="0e54d3bf-add8-48eb-9122-fad3ac1e8fb3" ActivityType="EncryptedData" UserName="TECH\user1" ObjectName="VM01" VbrHostName="vbrsrv01.tech.local" Description="Potential malware activity detected"]' | nc -u -q0 localhost 5514

Este mensaje será recogido por Fluentd, analizado y enviado a Elasticsearch.

Paso 3: Crear un Patrón de Índice en Kibana

1. En Kibana, vaya a Gestión de Pila → Patrones de Índice.

2. Haga clic en “Crear patrón de índice.”

3. En el campo de nombre del patrón de índice, ingrese:

veeam-logs-*

4. Seleccione el campo de marca de tiempo apropiado del menú desplegable.

5. Haga clic en “Crear patrón de índice.”

Ahora debería ver datos del mensaje de prueba que acaba de enviar.

Construcción de Reglas de Detección en Elastic Security

Con datos fluyendo hacia Elasticsearch, ahora puede crear reglas de detección para identificar actividades sospechosas.

Paso 1: Crear una Clave API para Reglas de Detección

Ejecute el siguiente comando para generar una clave API para Elastic Security:

curl -u elastic:Yourelasticpassword -X POST "localhost:9200/_security/api_key" \ 

-H "Content-Type: application/json" \ 

-d'{ 

  "name": "kibana-detection-rules", 

  "role_descriptors": { 

    "kibana_security": { 

      "cluster": ["manage_security", "monitor"], 

      "indices": [ 

        { 

          "names": ["*"], 

          "privileges": ["read", "write", "create_index", "view_index_metadata"] 

        } 

      ] 

    } 

  } 

}' 

Paso 2: Inicializar el Motor de Detección

Ejecute este comando para inicializar el motor de detección en Kibana:

curl -u elastic:YOURELASTICPASSWORD -X POST "localhost:5601/api/detection_engine/index" -H 'Content-Type: application/json' -H 'kbn-xsrf: true'

Paso 3: Crear una Regla de Detección Personalizada

1. En Kibana, vaya a Seguridad → Reglas.

2. Haga clic en “Crear nueva regla.”

3. Elija “Consulta personalizada.”

4. Bajo Patrones de índice, elimine los valores predeterminados y agregue:

veeam-logs-*

5. En el campo de consulta personalizada, ingrese:

activity_type: "EncryptedData"

6. Complete los detalles de la regla:

  • Nombre: Veeam Alerta de Ransomware
  • Descripción: Detecta actividad potencial de ransomware a partir de alertas Veeam
  • Severidad: Alta
  • Puntuación de Riesgo: 75

7. Haga clic en “Continuar” y configure el horario:

  • Para pruebas iniciales, considere establecer un intervalo de programación corto—como cada 20 segundos—para verificar rápidamente que las alertas se están activando como se espera. Puede ajustar este intervalo más tarde según sus necesidades operativas.

8. Omitir acciones de regla por ahora (opcional). No agregaremos ninguna acción de regla, pero puede experimentar si desea probar diferentes enfoques.

9. Haga clic en “Crear y activar regla.”

Paso 4: Activar la Alerta Nuevamente

Envíe otro mensaje de prueba para activar la regla:

echo '<14>1 2025-03-20T14:06:09.662307+02:00 VBRSRV01 Veeam_MP - - [origin enterpriseId="31023"] [categoryId=0 instanceId=41600 DetectionTimeUTC="03/20/2025 13:05:41" OibID="0e54d3bf-add8-48eb-9122-fad3ac1e8fb3" ActivityType="EncryptedData" UserName="TECH\user1" ObjectName="VM01" VbrHostName="vbrsrv01.tech.local" Description="Potential malware activity detected"]' | nc -u -q0 localhost 5514

Ahora debería ver la alerta aparecer en la sección Seguridad → Alertas. Puede hacer clic en la alerta para ver detalles y reconocerla.

Creación de Tableros de Seguridad

Para construir un tablero de seguridad, vaya a Analítica → Tablero y agregue estas visualizaciones:

  • Intentos de Autenticación Fallidos a lo Largo del Tiempo: Un gráfico de líneas que muestra cuándo ocurren los fallos de inicio de sesión, ayudándole a detectar patrones de ataque y períodos de alta actividad.
  • Principales IPs de Origen por Intentos Fallidos: Una tabla que lista direcciones IP con los inicios de sesión fallidos más numerosos, facilitando la identificación de reincidentes.
  • Distribución Geográfica de Ataques: Un mapa que muestra de dónde provienen los ataques, brindándole una vista global de los orígenes de las amenazas.
  • Relación de Éxitos vs Fracasos en Autenticación: Un gráfico circular que compara inicios de sesión exitosos y fallidos para resaltar actividades inusuales.
  • Línea de Tiempo de Puntuación de Riesgo: Un histograma que muestra cómo cambian las puntuaciones de riesgo a lo largo del tiempo, ayudándole a detectar picos en los niveles de amenaza.

Características Avanzadas de Seguridad

Elastic Security ofrece herramientas para mejorar la detección y análisis de amenazas:

  • Línea de Tiempo: Permite a los analistas revisar eventos de seguridad en detalle y entender cómo se desarrollan los ataques.
  • Ajuste de Reglas de Detección: Ayuda a reducir alertas falsas mientras mantiene la detección precisa. Ajuste regularmente las reglas según el comportamiento normal del sistema. Utilice aprendizaje automático para detectar actividades inusuales.
  • Gestión de Casos: Rastrea investigaciones y mantiene registros de auditoría. Las reglas de detección pueden crear automáticamente casos con detalles relevantes para acelerar la respuesta.

Consideraciones de Producción

Para implementaciones seguras y confiables:

  • Fortalecimiento de Seguridad: Utilice cifrado TLS, haga cumplir la autenticación y autorización, y aplique actualizaciones regulares. Despliegue Elasticsearch en un clúster para alta disponibilidad y configure copias de seguridad.
  • Planificación de Recursos: Elasticsearch necesita suficiente memoria y almacenamiento rápido. Establezca políticas de retención de registros que equilibren seguridad y costo. Utilice la gestión del ciclo de vida del índice para manejar datos antiguos automáticamente.
  • Seguridad de Red: Utilice cortafuegos para limitar el acceso a los componentes EFK. Segmente su red para mantener el sistema de seguridad separado de otra infraestructura.

Conclusión

La pila EFK con Elastic Security le brinda una base sólida para monitorear y detectar amenazas. Con esta configuración, puede recopilar, procesar y analizar registros de seguridad, detectar amenazas automáticamente y visualizar datos a través de tableros.

A medida que su sistema crece, expanda sus fuentes de registros, cree reglas de detección personalizadas y conéctese a fuentes externas de inteligencia sobre amenazas. Un monitoreo de seguridad efectivo necesita actualizaciones regulares, ajustes y analistas capacitados. La pila EFK proporciona las herramientas—el éxito depende de cómo las utilice.

Mantente al día

Al enviar este formulario, confirmo que he leído y acepto la Política de Privacidad.

Puede darse de baja en cualquier momento.