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)
timedatectl list-timezonesConfiguro la adecuada según la zona
sudo timedatectl set-timezone your_time_zone
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
- /var/ossec/logs/alerts/alerts.json
- /var/ossec/logs/alerts/alerts.log
Rotación de logs
# 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
-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
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.
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