La integración es de código abierto y está en GitHub: Q-Feeds/Q-Feeds-Wazuh-Integration. Descárguela siempre de allí para tener con seguridad la versión actual. Necesita acceso root en el manager de Wazuh, HTTPS saliente a api.qfeeds.com o taxii.qfeeds.com y un token API de Q-Feeds o credenciales TAXII. Consulte Obtener sus threat feeds.
Requisitos
- Manager de Wazuh: 4.x o posterior, instalado en
/var/ossec - Permisos: root en el manager
- Paquetes:
curl. Python viene con Wazuh, en/var/ossec/framework/python/bin/python3, así que no hace falta instalarlo - Credenciales: un token API de Q-Feeds para el modo estándar, o usuario y contraseña TAXII para el modo TAXII
- Red: acceso saliente a
api.qfeeds.comotaxii.qfeeds.compor el puerto 443
Obtener los scripts
git clone https://github.com/Q-Feeds/Q-Feeds-Wazuh-Integration.git /tmp/qfeeds-wazuh
cd /tmp/qfeeds-wazuh
¿No hay git en el manager? Descargue el archivo comprimido:
curl -sL https://github.com/Q-Feeds/Q-Feeds-Wazuh-Integration/archive/refs/heads/main.tar.gz | tar xz -C /tmp
cd /tmp/Q-Feeds-Wazuh-Integration-main
Instalar
sudo bash install.sh
El instalador hace unas cuantas preguntas, escribe la configuración, instala el actualizador, los decodificadores, las reglas y una tarea cron, y después descarga los feeds por primera vez. Lo que pregunta, en orden:
- Modo de integración: API estándar o TAXII 2.1.
- Credenciales: su token API, o su usuario y contraseña TAXII.
- Feeds o colecciones: qué se activa. En modo TAXII el instalador descubre la raíz de la API y lista las colecciones disponibles.
- Omitir indicadores caducados (solo TAXII): ignorar los indicadores cuya fecha
valid_untilya pasó. - IPv6 (modo estándar): incluir direcciones IPv6 en el feed de IP.
- Active Response: bloquear en el firewall local las IP detectadas, con el tiempo de espera que elija.
- Lista blanca de IP: direcciones que nunca deben generar una alerta. Ponga aquí sus propias direcciones de gestión.
- Programación de cron: cada 20 minutos en modo estándar, una vez al día a una hora aleatoria en modo TAXII. Las colecciones TAXII pueden ser grandes, por eso las ejecuciones diarias se reparten entre clientes.
- Primera descarga (solo TAXII): puede saltarla y dejar que la primera ejecución de cron haga el trabajo en segundo plano.
Qué se instala
| Componente | Ubicación |
|---|---|
| Configuración | /etc/qfeeds/qfeeds_wazuh.conf |
| Actualizador | /usr/local/bin/qfeeds-wazuh-updater.py |
| Decodificadores | /var/ossec/etc/decoders/qfeeds_decoders.xml |
| Reglas | /var/ossec/etc/rules/qfeeds_rules.xml |
| Listas CDB | /var/ossec/etc/lists/qfeeds-* |
| Registro | /var/log/qfeeds_wazuh.log |
| Programación | crontab de root |
El instalador también añade las referencias a las listas CDB, y si lo desea la configuración de Active Response, a /var/ossec/etc/ossec.conf. Esos bloques van entre comentarios de marca para que el desinstalador pueda quitarlos limpiamente, y se conserva una copia del archivo original.
Cómo funciona
- Ciclo de actualización: el actualizador pregunta primero a la API si su licencia tiene datos nuevos. Si no los hay, termina sin descargar nada, y por eso una programación cada veinte minutos no supone carga.
- Listas CDB: los indicadores se escriben en el formato
key:valuede Wazuh. En modo estándar el valor queda vacío; en modo TAXII contiene el contexto de la descripción STIX, por ejemplothreat=Trojan;category=Bot C&C. - Reglas: las coincidencias de IP dan 100200 y 100201, las de dominio de 100210 a 100213, las URL maliciosas 100220 y los hashes de 100230 a 100232, todas en nivel 10 dentro del grupo de reglas
qfeeds. - Decodificadores: el paquete añade un decodificador de Unbound DNS, en formato RFC5424 y RFC3164, y decodificadores de Sysmon que separan el campo combinado
Hashesen valores MD5, SHA-1 y SHA-256 independientes. - CIDR: Wazuh compara rangos de IP en notación con puntos, así que solo admite /8, /16, /24 y /32. El resto de longitudes de prefijo se omiten.
- URL maliciosas: cada entrada se guarda dos veces, con y sin el esquema, porque los logs de proxy suelen incluir
https://y otras fuentes no. - Reinicio: el manager solo se reinicia cuando las listas han cambiado de verdad. Wazuh 4.x compila las listas CDB durante ese reinicio.
Comprobar
sudo QFEEDS_FORCE_UPDATE=1 /var/ossec/framework/python/bin/python3 /usr/local/bin/qfeeds-wazuh-updater.py
tail -f /var/log/qfeeds_wazuh.log
wc -l /var/ossec/etc/lists/qfeeds-malware-ip
grep -i qfeeds /var/ossec/logs/ossec.log
El primer comando fuerza una actualización e ignora la programación de la licencia, que es la forma más rápida de comprobar toda la cadena. Para probar una regla, ejecute /var/ossec/bin/wazuh-logtest y pegue una línea de log con una dirección de la lista.
En el panel, vaya a Threat Hunting y filtre por rule.groups: qfeeds, o por una regla concreta como rule.id: 100200.
Configuración
Todos los ajustes están en /etc/qfeeds/qfeeds_wazuh.conf. Opciones como el token API, IPv6 y las listas blancas se editan ahí mismo y se aplican en la siguiente ejecución. Para activar o desactivar feeds, o añadir Active Response después, es más sencillo volver a ejecutar el instalador, porque el archivo de reglas y ossec.conf tienen que cambiar con ello.
Detección de dominios con Unbound
¿Usa OPNsense con el agente de Wazuh y quiere que también se revisen las consultas DNS? Active Log Queries en Services, Unbound DNS, Advanced, deje el nivel de detalle del log en su valor por defecto y añada el log del resolver a la configuración del agente en /var/ossec/etc/ossec.conf de OPNsense:
<localfile>
<log_format>syslog</log_format>
<location>/var/log/resolver/latest.log</location>
</localfile>
Reinicie el agente con service wazuh-agent restart. Tenga en cuenta que registrar consultas cuesta rendimiento al resolver, que una actualización del plugin puede sobrescribir este bloque y que los dominios que la DNSBL de OPNsense ya bloquea nunca llegan al log del resolver.
Desinstalar
sudo bash uninstall.sh
Esto elimina la tarea cron, las listas CDB y sus archivos compilados, los decodificadores, las reglas, la configuración incluidas las credenciales TAXII, el actualizador y los bloques añadidos a ossec.conf. Las copias de seguridad de ossec.conf se conservan. La entrada <localfile> de Unbound en un agente de OPNsense se deja intacta, quítela usted si ya no la necesita.
Resolución de problemas
- No hay alertas: compruebe con
wc -l /var/ossec/etc/lists/qfeeds-malware-ipque las listas tienen datos, congrep qfeeds /var/ossec/etc/ossec.confque están las referencias, y reinicie el manager. - El actualizador no descarga nada: lea
tail -50 /var/log/qfeeds_wazuh.logy pruebe su token concurl -s "https://api.qfeeds.com/licenses?api_token=YOUR_TOKEN". - Listas sin compilar: Wazuh 4.x lo hace al reiniciar. En versiones anteriores ejecute
sudo /var/ossec/bin/ossec-makelists. - Active Response no bloquea: revise la configuración con
grep -A5 "Q-FEEDS-AR" /var/ossec/etc/ossec.confy el registro/var/ossec/logs/active-responses.log. - Sin alertas de hashes: comparar hashes requiere el modo TAXII y Sysmon en sus equipos Windows, con el registro de hashes activado en la configuración de Sysmon.
- Soporte: support@qfeeds.com o la página de soporte. ¿Ha encontrado un fallo en los scripts? Abra una issue en el repositorio de GitHub.