Wazuh nació como un fork de OSSEC y conserva su estructura (/var/ossec), su formato de reglas y decodificadores y buena parte de su ruleset, pero añade una API REST, detección de vulnerabilidades, inventario de sistema y un panel web propio. En este tutorial migrarás un despliegue de OSSEC a Wazuh 4.x montando un manager nuevo en paralelo en Ubuntu 24.04, trasladando tus reglas y decodificadores personalizados y sustituyendo los agentes uno a uno. Mantener el manager de OSSEC encendido durante la transición te deja siempre un camino de vuelta.
Requisitos previos
Para seguir esta guía necesitas:
- El servidor OSSEC actual (manager) y acceso
sudoa él y a los hosts con agente. - Un servidor nuevo con Ubuntu 24.04 LTS para el manager de Wazuh, por ejemplo un VPS de CubePath, con al menos 2 vCPU y 4 GB de RAM (8 GB si también vas a instalar el indexador y el panel en la misma máquina).
- Un usuario no root con privilegios
sudoen todos los equipos. - Conectividad desde los agentes al nuevo manager en los puertos TCP 1514 (eventos) y 1515 (registro de agentes).
En la guía se usan estos marcadores, que debes sustituir por tus valores: ossec_server_ip (manager antiguo), wazuh_manager_ip (manager nuevo) y your_user.
Notaesta guía migra el manager y los agentes. El indexador y el panel web de Wazuh (Wazuh Dashboard) se instalan aparte con el asistente oficial descrito en la guía de inicio rápido de Wazuh; no son necesarios para que el manager reciba eventos y genere alertas.
Qué cambia al pasar de OSSEC a Wazuh
Antes de empezar conviene saber qué se mantiene y qué no:
| Elemento | OSSEC | Wazuh 4.x |
|---|---|---|
| Directorio base | /var/ossec | /var/ossec |
| Control de servicios | ossec-control | wazuh-control y systemd (wazuh-manager, wazuh-agent) |
| Probar reglas | ossec-logtest | wazuh-logtest |
| Reglas personalizadas | /var/ossec/rules/local_rules.xml | /var/ossec/etc/rules/local_rules.xml |
| Decodificadores propios | /var/ossec/etc/local_decoder.xml | /var/ossec/etc/decoders/local_decoder.xml |
| Ruleset por defecto | /var/ossec/rules/ | /var/ossec/ruleset/rules/ |
| Protocolo de agentes | UDP 1514 por defecto | TCP 1514 por defecto, registro en TCP 1515 |
| Rango para reglas propias | 100000 en adelante por convención | 100000 a 120000 reservado para el usuario |
El formato XML de reglas y decodificadores es compatible, así que tus reglas propias normalmente funcionan sin cambios. El archivo ossec.conf completo, en cambio, no debe copiarse tal cual: Wazuh añade y renombra secciones, y es más seguro trasladar solo los bloques que hayas personalizado.
Paso 1: Inventariar la instalación de OSSEC
En el manager de OSSEC, anota la versión instalada. OSSEC la guarda en /etc/ossec-init.conf:
cat /etc/ossec-init.conf
DIRECTORY="/var/ossec"
NAME="OSSEC HIDS"
VERSION="v3.7.0"
DATE="..."
TYPE="server"
Lista los agentes registrados y su estado. Esta lista será tu checklist durante la migración:
sudo /var/ossec/bin/agent_control -l
OSSEC HIDS agent_control. List of available agents:
ID: 000, Name: ossec-server (server), IP: 127.0.0.1, Active/Local
ID: 001, Name: web01, IP: 10.0.0.11, Active
ID: 002, Name: db01, IP: 10.0.0.12, Active
Localiza lo que has personalizado respecto a una instalación limpia: reglas, decodificadores y los bloques de ossec.conf que has tocado (archivos monitorizados, directorios de integridad, respuesta activa, correo):
sudo cat /var/ossec/rules/local_rules.xml
sudo cat /var/ossec/etc/local_decoder.xml
sudo grep -nE '<localfile>|<directories|<active-response>|<email_to>' /var/ossec/etc/ossec.conf
Guarda esta salida; la usarás en el paso 4.
Paso 2: Hacer una copia de seguridad de OSSEC
Empaqueta la configuración, las reglas, las claves de los agentes y el histórico de alertas. El histórico no se puede importar en Wazuh, pero conviene conservarlo por si necesitas consultarlo o por requisitos de auditoría:
sudo tar -czf /root/ossec-backup-$(date +%F).tar.gz \
/var/ossec/etc /var/ossec/rules /var/ossec/logs/alerts
Comprueba que el archivo existe y no está vacío:
sudo ls -lh /root/ossec-backup-*.tar.gz
-rw-r--r-- 1 root root 184M Sep 25 10:12 /root/ossec-backup-2026-09-25.tar.gz
Copia este archivo fuera del servidor antes de continuar.
Paso 3: Instalar el manager de Wazuh
En el servidor nuevo, importa la clave GPG de Wazuh en /etc/apt/keyrings:
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
Añade el repositorio oficial de la rama 4.x:
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
Instala el manager y arráncalo:
sudo apt update
sudo apt install wazuh-manager
sudo systemctl daemon-reload
sudo systemctl enable --now wazuh-manager
Comprueba que el servicio está activo:
sudo systemctl status wazuh-manager --no-pager
● wazuh-manager.service - Wazuh manager
Loaded: loaded (/usr/lib/systemd/system/wazuh-manager.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-09-25 10:20:41 UTC; 8s ago
Abre en UFW los puertos de agentes y de registro (y SSH si aún no lo estaba):
sudo ufw allow OpenSSH
sudo ufw allow 1514/tcp
sudo ufw allow 1515/tcp
sudo ufw enable
Si prefieres limitar el acceso a tu red, usa reglas del tipo sudo ufw allow from 10.0.0.0/24 to any port 1514 proto tcp.
Paso 4: Trasladar reglas y decodificadores personalizados
Copia tus archivos desde el manager de OSSEC a tu directorio personal en el servidor Wazuh. Ejecuta esto en el manager de OSSEC:
sudo cp /var/ossec/rules/local_rules.xml /var/ossec/etc/local_decoder.xml /tmp/
sudo chown "$USER" /tmp/local_rules.xml /tmp/local_decoder.xml
scp /tmp/local_rules.xml /tmp/local_decoder.xml your_user@wazuh_manager_ip:~/
En el servidor Wazuh, instálalos en sus rutas nuevas con el propietario y los permisos que espera el manager:
sudo install -o wazuh -g wazuh -m 0660 ~/local_rules.xml /var/ossec/etc/rules/local_rules.xml
sudo install -o wazuh -g wazuh -m 0660 ~/local_decoder.xml /var/ossec/etc/decoders/local_decoder.xml
Tus reglas suelen depender de reglas base mediante <if_sid>. Comprueba que los identificadores a los que haces referencia existen en el ruleset de Wazuh. Por ejemplo, para la regla 5716 (fallo de autenticación SSH):
grep -rl 'id="5716"' /var/ossec/ruleset/rules/
/var/ossec/ruleset/rules/0095-sshd_rules.xml
Si un identificador no aparece, busca la regla equivalente en /var/ossec/ruleset/rules/ y actualiza tu <if_sid>. Revisa también que todas tus reglas usen identificadores entre 100000 y 120000.
Traslada ahora los bloques personalizados de ossec.conf que anotaste en el paso 1 (por ejemplo <localfile> o <directories> dentro de <syscheck>), añadiéndolos a la sección correspondiente del archivo de Wazuh en lugar de sustituirlo:
sudo nano /var/ossec/etc/ossec.conf
Valida la configuración y las reglas antes de reiniciar:
sudo /var/ossec/bin/wazuh-analysisd -t
Si no hay errores, el comando termina sin mostrar nada. Reinicia el manager:
sudo systemctl restart wazuh-manager
Prueba una regla con wazuh-logtest, que sustituye a ossec-logtest. Arráncalo y pega una línea de log que debería disparar una de tus reglas o una del ruleset:
sudo /var/ossec/bin/wazuh-logtest
Sep 25 10:30:45 web01 sshd[1234]: Failed password for invalid user admin from 203.0.113.50 port 51122 ssh2
**Phase 3: Completed filtering (rules).
id: '5710'
level: '5'
description: 'sshd: Attempt to login using a non-existent user'
groups: '['syslog', 'sshd', 'authentication_failed', 'invalid_login']'
**Alert to be generated.
Sal con Ctrl+C.
Paso 5: Sustituir los agentes de OSSEC por agentes de Wazuh
El agente de Wazuh se instala en /var/ossec, la misma ruta que el de OSSEC, así que en cada host hay que retirar primero el agente antiguo. Migra un host de prueba, verifica que llegan sus eventos y después repite con el resto.
Detén el agente de OSSEC y guarda una copia de su directorio:
sudo /var/ossec/bin/ossec-control stop
sudo tar -czf /root/ossec-agent-backup-$(date +%F).tar.gz /var/ossec
Si lo instalaste desde un paquete, elimínalo con el gestor de paquetes (por ejemplo sudo apt purge ossec-hids-agent). Si lo compilaste desde el código fuente, mueve el directorio y desactiva el servicio que haya dejado el instalador:
sudo mv /var/ossec /var/ossec.old
systemctl list-unit-files | grep -i ossec
Si el último comando muestra alguna unidad, desactívala con sudo systemctl disable <unidad>.
Añade el repositorio de Wazuh igual que en el paso 3 (clave y archivo wazuh.list) e instala el agente. La variable WAZUH_MANAGER escribe la dirección del manager en la configuración durante la instalación y WAZUH_AGENT_NAME fija el nombre con el que aparecerá:
sudo apt update
sudo WAZUH_MANAGER="wazuh_manager_ip" WAZUH_AGENT_NAME="web01" apt install wazuh-agent
sudo systemctl daemon-reload
sudo systemctl enable --now wazuh-agent
El agente se registra automáticamente contra el manager en el puerto 1515 al arrancar; ya no hace falta manage_agents ni copiar claves a mano.
En hosts con Rocky Linux 9, el repositorio se define así en /etc/yum.repos.d/wazuh.repo:
sudo rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH
sudo nano /etc/yum.repos.d/wazuh.repo
[wazuh]
gpgcheck=1
gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH
enabled=1
name=EL-$releasever - Wazuh
baseurl=https://packages.wazuh.com/4.x/yum/
protocol=https
Después instala con sudo WAZUH_MANAGER="wazuh_manager_ip" dnf install wazuh-agent y arranca el servicio del mismo modo.
Para evitar que una actualización rutinaria del sistema instale una versión del agente más nueva que la del manager, bloquea el paquete y actualízalo de forma controlada:
sudo apt-mark hold wazuh-agent
Si migras decenas de hosts, automatiza exactamente estos pasos con tu herramienta de gestión de configuración (Ansible, por ejemplo) en lugar de un bucle SSH improvisado.
Paso 6: Verificar la migración
En el manager de Wazuh, comprueba que el agente aparece como activo:
sudo /var/ossec/bin/agent_control -l
Wazuh agent_control. List of available agents:
ID: 000, Name: wazuh-server (server), IP: 127.0.0.1, Active/Local
ID: 001, Name: web01, IP: any, Active
Genera un evento real en el agente, por ejemplo un intento fallido de SSH con un usuario inexistente, y comprueba que la alerta llega al manager:
sudo tail -f /var/ossec/logs/alerts/alerts.log
** Alert 1758796245.12345: - syslog,sshd,authentication_failed,invalid_login,
2026 Sep 25 10:45:12 (web01) any->/var/log/auth.log
Rule: 5710 (level 5) -> 'sshd: Attempt to login using a non-existent user'
Cuando todos los agentes de tu lista del paso 1 aparezcan como Active en Wazuh y el de OSSEC ya no reciba eventos, puedes apagar el manager antiguo. Conserva la copia de seguridad del paso 2 el tiempo que exija tu política de retención.
Solución de problemas
El agente no se registra o aparece como Never connected. Comprueba desde el agente que llega a los puertos del manager y revisa su log:
nc -zv wazuh_manager_ip 1514
nc -zv wazuh_manager_ip 1515
sudo tail -n 50 /var/ossec/logs/ossec.log
Un error de conexión suele ser el firewall; un mensaje de nombre duplicado indica que ya existe un agente registrado con ese nombre, que puedes eliminar en el manager con sudo /var/ossec/bin/manage_agents -r <ID>.
El manager no arranca tras copiar las reglas. Ejecuta sudo /var/ossec/bin/wazuh-analysisd -t: el error indica el archivo y la regla problemática, normalmente un identificador duplicado con el ruleset o un <if_sid> que ya no existe. También puedes revisar sudo tail -n 50 /var/ossec/logs/ossec.log.
Una regla propia no salta en wazuh-logtest. Mira en la fase 2 qué decodificador se aplica. Si tu regla dependía de un decodificador propio de OSSEC, asegúrate de que está en /var/ossec/etc/decoders/local_decoder.xml y de que su nombre no choca con uno del ruleset de Wazuh.
Conclusión
Has instalado un manager de Wazuh en paralelo al de OSSEC, trasladado tus reglas y decodificadores, validado que siguen funcionando con wazuh-logtest y sustituido los agentes sin perder la monitorización. A partir de aquí puedes instalar el indexador y el panel web de Wazuh para consultar las alertas desde el navegador, activar la detección de vulnerabilidades y revisar las comprobaciones de configuración (SCA) que Wazuh ejecuta en cada agente.
