07 noviembre, 2024

Proyecto SIEM Open Source: Wazuh - Parte IIB - Manager

Continuando con mi proyecto de SIEM Open Source (Wazuh) voy a detallar los pasos de instalación básicos del stack. De la nada a empezar a tener identificación de eventos. Empecemos por el Wazuh Manager (Server)


 

Resumen práctico de la instalación del Wazuh

Disclaimer: Esto describe la instalación que realice por mano propia con las versiones descriptas y los recursos que me disponibilizaron, puede existir mejoras o variaciones para otros casos.

Parto de que los servidores ya poseen el sistema operativo instalador y actualizado

 

Instalando Wazuh Server

También conocido como Manager

IP asignada de ejemplo: 192.168.20.149


Reglas de Firewall

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 514 comment Recepcion_SYSLOG
sudo ufw allow 1514 comment Wazuh_Agent_Communication
sudo ufw allow 1515/tcp comment Wazuh_Enrollment_Agent
sudo ufw allow 1516/tcp comment Wazuh_Cluster_Daemon
sudo ufw allow proto tcp from 192.168.20.148 to any port 55000 comment Wazuh_Dashboard
sudo ufw enable
sudo ufw status verbose

 

Configuración zona horaria (TimeZone)

Listo todas las zonas horarias 

timedatectl list-timezones
Configuro la adecuada según la zona

sudo timedatectl set-timezone your_time_zone
El your_time_zone es la zona según el listado del paso anterior
 
Verifico que haya quedado la zona seleccionada

timedatectl

 

Instalación


Bajo instalador

curl -sO https://packages.wazuh.com/4.8/wazuh-install.sh

Copio el archivo wazuh-install-files.tar al server generado anteriormente (en el Indexer)

 

Ejecuto instalador

bash wazuh-install.sh --wazuh-server wazuh-1

Se debe repetir en cada nodo del server

 

Configuramos la validación de usuarios

Editar /var/ossec/etc/ossec.conf
en la sección <auth>
    <use_password>no</use_password> 

reemplazar por:  <use_password>yes</use_password>



Crear el archivo

touch /var/ossec/etc/authd.pass

echo "<CUSTOM_PASSWORD>" > /var/ossec/etc/authd.pass

Acordate de borrar la línea del history para que no quede la clave con  history -d N , donde N es el número de línea


Cambio permisos de los archivos

chmod 640 /var/ossec/etc/authd.pass

chown root:wazuh /var/ossec/etc/authd.pass

 

Flujo de los logs en Wazuh Server 

Los dos archivos principales donde guarda los eventos son
  • /var/ossec/logs/alerts/alerts.json
  • /var/ossec/logs/alerts/alerts.log

Log data collection and analysis in Wazuh

Automáticamente estos logs son rotados, separados por dia y mes, pasados a la carpeta   
/var/ossec/logs/archives
 

Rotación de logs

A fin de no quedarnos sin espacio, es necesario generar un dos tareas programadas para que se elimine los logs crudos antiguos recolectados.
 
# crontab -e
0 1 * * * find /var/ossec/logs/alerts/ -type f -mtime +31 -delete
0 1 * * * find /var/ossec/logs/archives/ -type f -mtime +31 -delete
10 1 * * * find /var/ossec/logs/alerts/ -type d -empty -delete
10 1 * * * find /var/ossec/logs/archive/ -type d -empty -delete 
Parámetros
  • -type f = Busca solo archivos (no directorios, con -d busco directorios)

  • -mtime = Busca archivos cuya última modificación fue hace más de 31 días.

  • -delete = Elimina directamente los archivos encontrados que cumplen con las condiciones anteriores

En el ejemplo se configuro para que se elimine todos los logs antiguos mayor a 31 días, que lo verifica todos los días a la 1 a.m. y a las 1:10 am verifico para borrar las carpetas vacias.

 

Reconfiguro Wazuh Manager para reenvío de eventos (Fluentd)


Instalo Fluentd para reenviar los eventos al servidor de Graylog

curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh

Fluentd es para la recolección, procesamiento y envío de datos de logs. Actúa como un "agente de registro" unificado que puede recopilar diferentes tipos de datos de múltiples fuentes y dirigirlos a varios destinos (como bases de datos, sistemas de almacenamiento, o servicios en la nube) de manera eficiente y escalable.

Su principal objetivo es simplificar el procesamiento de grandes volúmenes de datos de logs y hacerlo de manera flexible, integrando con diversas fuentes y destinos mediante el uso de plugins. Fluentd es ampliamente utilizado en infraestructuras modernas como parte de sistemas de monitoreo, análisis de logs y gestión de big data.
    
 

Editar el archivo /etc/fluent-bit/fluent-bit.conf

[colocar el texto que se encuentra debajo]

[SERVICE]
    flush        5
    daemon       Off
    log_level    info
    parsers_file parsers.conf
    plugins_file plugins.conf
    http_server  Off
    http_listen  0.0.0.0
    http_port    2020
    storage.metrics on
    storage.path /var/log/flb-storage/
    storage.sync normal
    storage.checksum off
    storage.backlog.mem_limit 5M
    Log_File /var/log/td-agent-bit.log
[INPUT]
    name  tail
    path  /var/ossec/logs/alerts/alerts.json
    tag wazuh
    parser  json
    Buffer_Max_Size 5MB
    Buffer_Chunk_Size 400k
    storage.type      filesystem
    Mem_Buf_Limit     512MB
[OUTPUT]
    Name  tcp
    Host  192.168.20.27 #your graylog host*
    Port  5555  #your graylog port*
    net.keepalive off
    Match wazuh
    Format  json_lines
    json_date_key true

El texto en fucsia NO colocarlo, es para explicar de que se trata esas líneas

  
Activo el servicio y lo inicio

systemctl enable fluent-bit
systemctl start fluent-bit

Ahora nos queda la siguiente interacción de componentes


 

Filebeat


En caso que no se quiera utilizar el Wazuh Dashboard para ver los eventos desactivo el servicio de Filebeat ya que no lo vamos a utilizar (vino incluido en la instalación asistida que es la que usamos)

systemctl stop filebeat
systemctl disable filebeat

Este servicio el Wazuh (en forma predeterminar) lo usa para reenviar los eventos al Indexer, es el responsable por la ingesta de eventos en la base de Opensearch desde el alerts.json

En este caso lo reemplazamos por Fluentd que es mas versátil, ya que necesitamos enviarlos primero a Graylog para enriquecerlo y masajearlo. Lo desactivo ya que nos originaria eventos duplicados en el Opensearch.

Pero si queremos utilizar el Wazuh Dashboard es necesario su activación, ya que los eventos almacenados en el Indice de Graylos no pueden ser visualizados por tener una estructura de campos distinta.



Relación con Filebeat, Opensearch y alerts.json


Verificación de escalamiento (scaling)

Para determinar si un servidor Wazuh requiere más recursos, es necesario supervisar estos archivos:

  • /var/ossec/var/run/wazuh-analysisd.state: la variable events_dropped indica si los eventos se están eliminando debido a la falta de recursos.

  • /var/ossec/var/run/wazuh-remoted.state: la variable discarded_count indica si los mensajes de los agentes fueron descartados.

Estas dos variables deberían ser cero si el entorno funciona correctamente. Si no es el caso, se pueden agregar nodos adicionales al clúster.

 

Terminamos la configuración del Wazuh Manager (server)

 

Referencias

  • https://www.fluentd.org/
  • https://en.wikipedia.org/wiki/Fluentd
  • https://documentation.wazuh.com/4.8/installation-guide/wazuh-server/installation-assistant.html
  • https://socfortress.medium.com/part-3-wazuh-manager-install-log-analysis-e819f28b0f9e

0 comments:

Publicar un comentario