--- title: "Cómo instalar Wazuh SIEM en Ubuntu 24.04 y añadir agentes" description: "Instala Wazuh all-in-one (indexer, manager y dashboard) en Ubuntu 24.04, registra un agente Linux y crea una regla propia comprobada con wazuh-logtest." category: "Seguridad de Red Avanzada" language: es source: https://cubepath.com/es/docs/seguridad-de-red-avanzada/instalacion-y-configuracion-de-wazuh-siem updated: 2026-09-25 --- # Cómo instalar Wazuh SIEM en Ubuntu 24.04 y añadir agentes Wazuh es una plataforma libre de seguridad (SIEM y XDR) que recoge y analiza logs de tus servidores, vigila la integridad de ficheros, detecta paquetes con vulnerabilidades conocidas y evalúa la configuración frente a benchmarks como CIS. Tiene tres componentes centrales: el **indexer**, basado en OpenSearch, que almacena los eventos; el **manager** (o server), que analiza lo que envían los agentes y genera alertas; y el **dashboard**, la interfaz web. En este tutorial instalarás los tres en un único servidor Ubuntu 24.04 con el asistente oficial, registrarás un agente en otro servidor Linux y crearás una regla propia. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor para Wazuh con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 4 vCPU, 8 GB de RAM y 50 GB de disco. Para decenas de agentes o retenciones largas necesitarás más disco. - Un segundo servidor Linux (Ubuntu 24.04 en los ejemplos) que quieras monitorizar. - Un usuario no root con privilegios `sudo` en ambos. - UFW activo en el servidor de Wazuh, o el cortafuegos que uses, con acceso SSH permitido. En esta guía, `your_server_ip` es la IP del servidor de Wazuh y `your_admin_ip` la IP pública desde la que accederás al dashboard. ## Paso 1: Abrir los puertos necesarios Los agentes se comunican con el manager por el puerto 1514/tcp y se registran por el 1515/tcp. El dashboard escucha en el 443/tcp; limítalo a tu IP de administración: ```bash sudo ufw allow 1514/tcp sudo ufw allow 1515/tcp sudo ufw allow from your_admin_ip to any port 443 proto tcp ``` Comprueba las reglas: ```bash sudo ufw status ``` ```output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 1514/tcp ALLOW Anywhere 1515/tcp ALLOW Anywhere 443/tcp ALLOW 198.51.100.20 ``` Si todos tus agentes están en direcciones conocidas, restringe también 1514 y 1515 a esas IP o redes. ## Paso 2: Descargar el asistente de instalación Wazuh proporciona un script, `wazuh-install.sh`, que instala y configura los tres componentes, genera los certificados TLS y crea contraseñas aleatorias. La URL incluye la versión menor; consulta la versión actual en la documentación de Wazuh y sustituye `4.14` si ha cambiado: ```bash curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh ``` Échale un vistazo antes de ejecutarlo con privilegios de root: ```bash less wazuh-install.sh ``` ## Paso 3: Instalar Wazuh en modo all-in-one La opción `-a` instala indexer, manager y dashboard en este mismo servidor: ```bash sudo bash wazuh-install.sh -a ``` La instalación tarda varios minutos. Al terminar, el script muestra las credenciales del dashboard: ```output INFO: --- Summary --- INFO: You can access the web interface https://:443 User: admin Password: 3xAmPl3.P4ssw0rd*K2 INFO: Installation finished. ``` Guarda esa contraseña en tu gestor de contraseñas. El resto de credenciales internas están en `wazuh-install-files.tar`, en el directorio donde ejecutaste el script. Puedes consultarlas así: ```bash sudo tar -O -xf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt ``` Mueve ese fichero a un lugar protegido o bórralo cuando hayas guardado las contraseñas. Comprueba que los tres servicios están activos: ```bash systemctl is-active wazuh-indexer wazuh-manager wazuh-dashboard ``` ```output active active active ``` > Nota: si el script se detiene porque el servidor no cumple los requisitos mínimos, puedes forzar la instalación con la opción `-i`, pero en producción es mejor ampliar el servidor: el indexer necesita memoria para funcionar con fluidez. ## Paso 4: Evitar actualizaciones accidentales El asistente deja configurado el repositorio de Wazuh. Si un `apt upgrade` actualizara solo uno de los componentes, podrían quedar versiones incompatibles entre sí. La documentación oficial recomienda desactivar el repositorio y actualizar Wazuh de forma planificada: ```bash sudo sed -i 's/^deb /#deb /' /etc/apt/sources.list.d/wazuh.list sudo apt update ``` Cuando quieras actualizar, vuelve a descomentar la línea y sigue la guía de actualización de Wazuh para la versión de destino. ## Paso 5: Acceder al dashboard Abre `https://your_server_ip` en el navegador. El certificado es autofirmado, así que tendrás que aceptar la advertencia. Inicia sesión con el usuario `admin` y la contraseña del paso 3. En el menú verás los módulos principales: **Threat Hunting** (alertas), **File Integrity Monitoring**, **Vulnerability Detection**, **Configuration Assessment** y las vistas de cumplimiento normativo (PCI DSS, GDPR, HIPAA, NIST 800-53). Todavía estarán vacías porque no hay agentes conectados. ## Paso 6: Instalar un agente en otro servidor Conéctate por SSH al servidor que quieres monitorizar. Añade la clave y el repositorio de Wazuh: ```bash sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --dearmor -o /etc/apt/keyrings/wazuh.gpg echo "deb [signed-by=/etc/apt/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee /etc/apt/sources.list.d/wazuh.list sudo apt update ``` Instala el agente indicando la IP del manager y un nombre para el agente. Las variables de entorno se aplican durante la instalación y dejan escrita la configuración en `/var/ossec/etc/ossec.conf`: ```bash sudo WAZUH_MANAGER="your_server_ip" WAZUH_AGENT_NAME="web01" apt install -y wazuh-agent ``` El agente no debe tener una versión superior a la del manager. Desactiva también aquí el repositorio para que `apt upgrade` no lo actualice por su cuenta: ```bash sudo sed -i 's/^deb /#deb /' /etc/apt/sources.list.d/wazuh.list sudo apt update ``` Habilita y arranca el servicio: ```bash sudo systemctl daemon-reload sudo systemctl enable --now wazuh-agent ``` Comprueba en el log del agente que se ha registrado y conectado: ```bash sudo grep -E 'Valid key|Connected to the server' /var/ossec/logs/ossec.log ``` ```output 2026/09/25 11:02:14 wazuh-agentd: INFO: Valid key received 2026/09/25 11:02:18 wazuh-agentd: INFO: (4102): Connected to the server ([your_server_ip]:1514/tcp). ``` De vuelta en el servidor de Wazuh, lista los agentes: ```bash sudo /var/ossec/bin/agent_control -l ``` ```output Wazuh agent_control. List of available agents: ID: 000, Name: wazuh (server), IP: 127.0.0.1, Active/Local ID: 001, Name: web01, IP: any, Active ``` A los pocos minutos el agente aparecerá también en el dashboard, en **Agents management > Summary**. Con la configuración por defecto ya envía los logs del sistema (`/var/log/auth.log`, `/var/log/syslog`, dpkg), vigila la integridad de directorios como `/etc`, `/bin` y `/usr/bin`, ejecuta la evaluación de configuración CIS e informa de los paquetes instalados para la detección de vulnerabilidades. ## Paso 7: Monitorizar un log adicional Para que el agente lea un log de aplicación, añade un bloque `` a su configuración. En el servidor del agente: ```bash sudo nano /var/ossec/etc/ossec.conf ``` Añade este bloque dentro de ``, junto a los demás ``. En este ejemplo se monitoriza el log de acceso de Nginx: ```xml apache /var/log/nginx/access.log ``` El formato `apache` sirve para el formato combinado que usan tanto Apache como Nginx. Reinicia el agente y comprueba que no hay errores: ```bash sudo systemctl restart wazuh-agent sudo grep -i 'nginx/access.log' /var/ossec/logs/ossec.log ``` ```output 2026/09/25 11:10:41 wazuh-logcollector: INFO: (1950): Analyzing file: '/var/log/nginx/access.log'. ``` ## Paso 8: Crear una regla propia Las reglas propias se guardan en el manager, en `/var/ossec/etc/rules/local_rules.xml`, y deben usar identificadores a partir de 100000. Como ejemplo, esta regla eleva a nivel 10 cualquier fallo de autenticación SSH contra el usuario `root`, algo que en un servidor con el login de root desactivado indica un ataque. En el servidor de Wazuh: ```bash sudo nano /var/ossec/etc/rules/local_rules.xml ``` Añade al final del fichero: ```xml authentication_failed sshd root sshd: intento de login fallido como root desde $(srcip). authentication_failed, ``` Antes de reiniciar, prueba la regla con `wazuh-logtest`, que procesa una línea de log igual que lo haría el manager: ```bash sudo /var/ossec/bin/wazuh-logtest ``` Pega una línea de ejemplo y pulsa Intro: ```text Sep 25 11:20:01 web01 sshd[2211]: Failed password for root from 203.0.113.45 port 51122 ssh2 ``` La fase 3 debe mostrar tu regla: ```output **Phase 3: Completed filtering (rules). id: '100100' level: '10' description: 'sshd: intento de login fallido como root desde 203.0.113.45.' groups: '['local', 'sshd', 'authentication_failed']' firedtimes: '1' mail: 'False' **Alert to be generated. ``` Sal con `Ctrl+C` y reinicia el manager para cargar la regla: ```bash sudo systemctl restart wazuh-manager ``` Si el manager no arranca, el error de sintaxis aparecerá en `/var/ossec/logs/ossec.log`. A partir de ahora, estas alertas aparecerán en **Threat Hunting** del dashboard con nivel 10. ## Paso 9: Consultar alertas desde la línea de comandos Además del dashboard, el manager escribe todas las alertas en `/var/ossec/logs/alerts/alerts.json`, un evento JSON por línea. Es útil para comprobaciones rápidas o para enviarlas a otra herramienta. Instala `jq` y muestra las últimas alertas de nivel 7 o superior: ```bash sudo apt install -y jq sudo tail -n 500 /var/ossec/logs/alerts/alerts.json | jq -r 'select(.rule.level >= 7) | [.timestamp, .agent.name, .rule.id, .rule.description] | @tsv' ``` ```output 2026-09-25T11:21:07.412+0000 web01 100100 sshd: intento de login fallido como root desde 203.0.113.45. ``` ## Solución de problemas - **El agente no se registra (`Unable to connect to enrollment service`)**: comprueba desde el agente que llega al puerto 1515 del manager con `nc -zv your_server_ip 1515` y revisa las reglas de UFW del paso 1. - **El agente aparece como `Disconnected`**: suele ser el puerto 1514 bloqueado o una IP de manager incorrecta en el bloque `` de `/var/ossec/etc/ossec.conf` del agente. - **El dashboard muestra `Wazuh dashboard server is not ready yet`**: el indexer aún está arrancando o se ha quedado sin memoria. Revisa `sudo journalctl -u wazuh-indexer` y `free -h`. - **El disco se llena**: el indexer guarda un índice por día. Configura una política de retención (Index State Management) en el dashboard para borrar índices antiguos de `wazuh-alerts-*`. ## Conclusión Has desplegado Wazuh en un único servidor con indexer, manager y dashboard, has conectado un agente Linux, has añadido un log de aplicación y has creado y probado una regla propia. Como siguientes pasos, puedes activar respuestas activas para bloquear IPs automáticamente, configurar notificaciones por correo o integraciones con Slack, y revisar los resultados de **Vulnerability Detection** y **Configuration Assessment** de cada agente para priorizar parches.