Die Integration ist Open Source und liegt auf GitHub: Q-Feeds/Q-Feeds-Wazuh-Integration. Holen Sie sie immer von dort, dann haben Sie sicher die aktuelle Version. Sie benötigen Root-Zugriff auf dem Wazuh-Manager, ausgehendes HTTPS zu api.qfeeds.com oder taxii.qfeeds.com und ein Q-Feeds API-Token oder TAXII-Zugangsdaten. Siehe Ihre Threat Feeds abrufen.
Voraussetzungen
- Wazuh-Manager: 4.x oder neuer, installiert unter
/var/ossec - Rechte: root auf dem Manager
- Pakete:
curl. Python bringt Wazuh unter/var/ossec/framework/python/bin/python3mit, das müssen Sie nicht installieren - Zugangsdaten: ein Q-Feeds API-Token für den Standardmodus oder TAXII-Benutzername und Passwort für den TAXII-Modus
- Netzwerk: ausgehender Zugriff auf
api.qfeeds.comodertaxii.qfeeds.comüber Port 443
Skripte holen
git clone https://github.com/Q-Feeds/Q-Feeds-Wazuh-Integration.git /tmp/qfeeds-wazuh
cd /tmp/qfeeds-wazuh
Kein git auf dem Manager? Dann laden Sie das Archiv:
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
Installieren
sudo bash install.sh
Der Installer stellt einige Fragen, schreibt die Konfiguration, richtet Updater, Decoder, Regeln und einen Cronjob ein und lädt die Feeds dann zum ersten Mal. Was er fragt, der Reihe nach:
- Integrationsmodus: Standard-API oder TAXII 2.1.
- Zugangsdaten: Ihr API-Token oder Ihr TAXII-Benutzername mit Passwort.
- Feeds oder Collections: welche Feeds aktiv sein sollen. Im TAXII-Modus ermittelt der Installer den API-Root und listet die verfügbaren Collections auf.
- Abgelaufene Indikatoren überspringen (nur TAXII): Indikatoren ignorieren, deren
valid_untilin der Vergangenheit liegt. - IPv6 (Standardmodus): IPv6-Adressen in den IP-Feed aufnehmen.
- Active Response: getroffene IP-Adressen auf der lokalen Firewall sperren, mit einer Dauer Ihrer Wahl.
- IP-Whitelist: Adressen, die nie einen Alarm auslösen dürfen. Tragen Sie hier Ihre eigenen Management-Adressen ein.
- Cron-Zeitplan: alle 20 Minuten im Standardmodus, einmal täglich zu einer zufälligen Stunde im TAXII-Modus. TAXII-Collections können groß sein, daher werden die täglichen Läufe über die Kunden verteilt.
- Erster Download (nur TAXII): Sie können ihn überspringen und den ersten Cron-Lauf die Arbeit im Hintergrund erledigen lassen.
Was installiert wird
| Komponente | Ort |
|---|---|
| Konfiguration | /etc/qfeeds/qfeeds_wazuh.conf |
| Updater | /usr/local/bin/qfeeds-wazuh-updater.py |
| Decoder | /var/ossec/etc/decoders/qfeeds_decoders.xml |
| Regeln | /var/ossec/etc/rules/qfeeds_rules.xml |
| CDB-Listen | /var/ossec/etc/lists/qfeeds-* |
| Log | /var/log/qfeeds_wazuh.log |
| Zeitplan | Crontab von root |
Der Installer trägt außerdem die Verweise auf die CDB-Listen und auf Wunsch die Active-Response-Konfiguration in /var/ossec/etc/ossec.conf ein. Diese Blöcke stehen zwischen Markierungen, damit der Uninstaller sie sauber entfernen kann, und eine Sicherung der ursprünglichen Datei bleibt erhalten.
So funktioniert es
- Aktualisierungszyklus: der Updater fragt zuerst bei der API nach, ob Ihre Lizenz neue Daten hat. Wenn nicht, beendet er sich ohne Download, deshalb ist ein Zeitplan alle zwanzig Minuten keine Last.
- CDB-Listen: Indikatoren werden im
key:value-Format von Wazuh geschrieben. Im Standardmodus bleibt der Wert leer, im TAXII-Modus steht dort der Kontext aus der STIX-Beschreibung, etwathreat=Trojan;category=Bot C&C. - Regeln: IP-Treffer melden 100200 und 100201, Domain-Treffer 100210 bis 100213, bösartige URLs 100220 und Hashes 100230 bis 100232, alle auf Stufe 10 in der Regelgruppe
qfeeds. - Decoder: das Paket bringt einen Unbound-DNS-Decoder für RFC5424 und RFC3164 mit sowie Sysmon-Decoder, die das kombinierte Feld
Hashesin einzelne MD5-, SHA-1- und SHA-256-Werte zerlegen. - CIDR: Wazuh vergleicht IP-Bereiche in Punktnotation, unterstützt werden daher nur /8, /16, /24 und /32. Andere Präfixlängen werden übersprungen.
- Bösartige URLs: jeder Eintrag wird zweimal gespeichert, mit und ohne Protokoll, weil Proxy-Logs meist
https://mitschicken und andere Quellen nicht. - Neustart: der Manager wird nur neu gestartet, wenn sich die Listen wirklich geändert haben. Wazuh 4.x kompiliert die CDB-Listen bei diesem Neustart.
Überprüfen
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
Der erste Befehl erzwingt eine Aktualisierung und ignoriert den Lizenzplan, das ist der schnellste Weg, die ganze Kette zu prüfen. Zum Testen einer Regel starten Sie /var/ossec/bin/wazuh-logtest und fügen eine Logzeile mit einer Adresse aus der Liste ein.
Im Dashboard gehen Sie auf Threat Hunting und filtern auf rule.groups: qfeeds oder auf eine einzelne Regel wie rule.id: 100200.
Konfiguration
Alle Einstellungen stehen in /etc/qfeeds/qfeeds_wazuh.conf. Optionen wie API-Token, IPv6 und die Whitelists ändern Sie dort direkt, sie greifen beim nächsten Lauf. Wollen Sie Feeds ein- oder ausschalten oder Active Response nachrüsten, ist es einfacher, den Installer erneut auszuführen, weil sich Regeldatei und ossec.conf mitändern müssen.
Domain-Erkennung über Unbound
Betreiben Sie OPNsense mit dem Wazuh-Agent und wollen auch DNS-Abfragen prüfen lassen? Aktivieren Sie Log Queries unter Services, Unbound DNS, Advanced, belassen Sie die Log-Verbosity auf dem Standardwert und ergänzen Sie das Resolver-Log in der Agent-Konfiguration in /var/ossec/etc/ossec.conf auf OPNsense:
<localfile>
<log_format>syslog</log_format>
<location>/var/log/resolver/latest.log</location>
</localfile>
Starten Sie den Agent mit service wazuh-agent restart neu. Beachten Sie: Query-Logging kostet Resolver-Leistung, ein Plugin-Update kann diesen Block überschreiben, und Domains, die die OPNsense-DNSBL bereits blockt, tauchen im Resolver-Log nie auf.
Deinstallieren
sudo bash uninstall.sh
Das entfernt den Cronjob, die CDB-Listen samt kompilierten Dateien, die Decoder, die Regeln, die Konfiguration inklusive etwaiger TAXII-Zugangsdaten, den Updater und die in ossec.conf ergänzten Blöcke. Sicherungen von ossec.conf bleiben erhalten. Der <localfile>-Eintrag für Unbound auf einem OPNsense-Agent bleibt unangetastet, den entfernen Sie selbst, wenn Sie ihn nicht mehr brauchen.
Fehlerbehebung
- Keine Alarme: prüfen Sie mit
wc -l /var/ossec/etc/lists/qfeeds-malware-ip, ob die Listen Daten enthalten, mitgrep qfeeds /var/ossec/etc/ossec.conf, ob die Verweise vorhanden sind, und starten Sie den Manager neu. - Der Updater lädt nichts: lesen Sie
tail -50 /var/log/qfeeds_wazuh.logund testen Sie Ihr Token mitcurl -s "https://api.qfeeds.com/licenses?api_token=YOUR_TOKEN". - Listen nicht kompiliert: Wazuh 4.x erledigt das beim Neustart. Auf älteren Versionen führen Sie
sudo /var/ossec/bin/ossec-makelistsaus. - Active Response sperrt nicht: prüfen Sie die Konfiguration mit
grep -A5 "Q-FEEDS-AR" /var/ossec/etc/ossec.confund das Log unter/var/ossec/logs/active-responses.log. - Keine Hash-Alarme: der Hash-Abgleich braucht den TAXII-Modus plus Sysmon auf Ihren Windows-Endpunkten, mit aktiviertem Hash-Logging in der Sysmon-Konfiguration.
- Support: support@qfeeds.com oder die Support-Seite. Fehler in den Skripten gefunden? Öffnen Sie ein Issue im GitHub-Repository.