Die Skripte sind Open Source und liegen auf GitHub: Q-Feeds/NFtables-IPtables-integration-script. Holen Sie sie immer von dort, dann haben Sie sicher die aktuelle Version. Sie benötigen Root-Zugriff, ausgehendes HTTPS zu api.qfeeds.com und ein Q-Feeds API-Token. Siehe Ihre Threat Feeds abrufen. Der Installer bittet Sie zuerst, unsere Allgemeinen Geschäftsbedingungen und die EULA zu akzeptieren.
Voraussetzungen
- OS: Linux mit nftables oder mit iptables und ipset
- Distributionen: Debian, Ubuntu, CentOS, RHEL, AlmaLinux, Rocky Linux, Fedora, openSUSE Leap, SLES, Arch Linux, Alpine
- Rechte: Root für Installation, Updates und Firewall-Änderungen
- Feed: Malware-IP-Liste (
feed_type=malware_ip) - Pakete: installiert das Skript für Sie, Sie müssen nichts vorbereiten. Bei nftables sind das
nftables,curl,jqundutil-linux. Bei iptables sind esiptables,ipset,curl,jqundutil-linux.
Optionaler Test vorab:
curl -v -u api_token:YOUR_TOKEN "https://api.qfeeds.com/api?feed_type=malware_ip&limit=1000"
Skripte holen
git clone https://github.com/Q-Feeds/NFtables-IPtables-integration-script.git
cd NFtables-IPtables-integration-script
chmod +x qfeeds-installer.sh qfeeds-uninstaller.sh
Kein git auf dem Server? Laden Sie stattdessen das ZIP-Archiv von der Repository-Seite herunter und entpacken Sie es.
Installation
sudo ./qfeeds-installer.sh
Der Installer erkennt Ihre Firewall, stellt einige Fragen, richtet das Update-Skript samt Cron-Job ein und führt sofort eine erste vollständige Synchronisierung durch, damit die Blockliste direkt greift. Die Fragen der Reihe nach:
- AGB und EULA: geben Sie
yesein, um fortzufahren. - API-Token: Ihr Q-Feeds Token. Bleibt das Feld leer, bricht der Installer ab.
- Feed type: Standard
malware_ip. Ändern Sie das nur, wenn Sie von uns einen anderen Feed-Typ erhalten haben. - Anzahl der IPs: Enter drücken für kein Limit, das empfehlen wir.
- Eingehend blockieren (Standard ja): Verkehr von gelisteten IPs zu Ihrem Server wird verworfen.
- Ausgehend blockieren (Standard nein): Verkehr von Ihrem Server zu gelisteten IPs wird verworfen.
- Whitelist (optional): IPv4- und IPv6-Adressen oder CIDR-Bereiche, die niemals blockiert werden dürfen, durch Komma getrennt. Tragen Sie hier Ihre eigenen Management-IPs ein, dann sperren Sie sich nicht selbst aus.
- Cron-Zeitplan: Standard
*/10 * * * *, also alle zehn Minuten. Häufig laufen zu lassen ist unproblematisch, denn das Update-Skript ruft die API nur auf, wenn Ihre Lizenz ein neues Update erlaubt.
Warnungen zur CIDR-Notation beim Abrufen des Feeds sind harmlos und können ignoriert werden. Starten Sie den Installer erneut auf einem Host, auf dem bereits ein Q-Feeds Cron-Eintrag existiert, fragt er vorher nach und lässt Ihre Crontab standardmäßig unverändert. Für unbeaufsichtigte Installationen setzen Sie QFEEDS_SKIP_CRON=1, dann wird dieser Schritt ohne Rückfrage übersprungen.
Funktionsweise
- Firewall-Erkennung: ist der Befehl
nftvorhanden, nutzt der Installer nftables, andernfalls greift er auf iptables mit ipset zurück. Das Ergebnis steht alsBACKENDin der Konfigurationsdatei; Update-Skript und Uninstaller richten sich danach. - Eigene Regeln: nftables erhält die eigenen Tabellen
ip qfeedsundip6 qfeeds. Bei iptables liegen die Blockierregeln in separaten ChainsQFEEDS_INPUTundQFEEDS_OUTPUT, mit je einer markierten Jump-Regel inINPUTundOUTPUT. Ihre bestehenden Firewall-Regeln bleiben unberührt. - Zwei Set-Typen: einzelne Adressen landen in einem Hash-Set, die wenigen CIDR-Bereiche in einem separaten Netz-Set. Deshalb dauert das Laden von 400.000 Adressen und mehr Sekunden statt Minuten.
- Whitelist zuerst: Whitelist-Regeln werden vor der Blockliste geprüft, eine freigegebene Adresse kommt also immer durch.
- Voll- und Diff-Sync: der erste Lauf lädt den gesamten Feed, spätere Läufe holen nur die Ergänzungen und Entfernungen seit Ihrem letzten Abruf. Ein Voll-Sync wird erst angewendet, wenn gültige Daten vorliegen, ein fehlgeschlagener Download lässt Sie also nie ungeschützt.
- Selbstheilend: ist das Set leer oder deutlich kleiner als erwartet, etwa nach einem Neustart ohne gespeicherte Regeln, baut das Skript es komplett neu auf, statt ein leeres Set zu ergänzen. Zusätzlich erfolgt standardmäßig alle 24 Stunden ein Voll-Sync.
- Nach Ihrer Lizenz: vor jedem Lauf prüft das Skript, wann Ihre Lizenz das nächste Update zulässt. Ist es noch nicht soweit, beendet es sich ohne API-Aufruf.
Überprüfen
nftables
sudo nft list table ip qfeeds
sudo nft list set ip qfeeds qfeeds_blacklist_v4 | grep -oP '\d+\.\d+\.\d+\.\d+' | wc -l
sudo nft list set ip qfeeds qfeeds_blacklist_v4_nets | head -20
sudo nft list table ip6 qfeeds
iptables mit ipset
sudo ipset list -t | grep -A4 qfeeds
sudo ipset list qfeeds_blacklist_v4 | tail -n +9 | wc -l
sudo iptables -L INPUT -n --line-numbers | grep qfeeds
sudo iptables -L QFEEDS_INPUT -n
sudo ip6tables -L QFEEDS_INPUT -n
Für beide
sudo tail -20 /var/log/qfeeds_blocklist.log
sudo grep -i error /var/log/qfeeds_blocklist.log
sudo crontab -l | grep qfeeds
sudo /usr/local/bin/update_qfeeds_blocklist.sh
sudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh
Der letzte Befehl erzwingt einen Voll-Sync und ignoriert den Lizenzzeitplan. Das ist der schnellste Weg, um zu prüfen, ob alles von Anfang bis Ende funktioniert.
Konfiguration
Alle Einstellungen stehen in /etc/qfeeds/qfeeds_config.conf. Sie können diese Datei direkt bearbeiten, statt den Installer erneut zu starten; die Änderung greift beim nächsten Lauf.
| Einstellung | Beschreibung | Standard |
|---|---|---|
BACKEND | Firewall, nftables oder iptables | automatisch erkannt |
API_TOKEN | Ihr Q-Feeds API-Token | erforderlich |
FEED_TYPE | Abgerufener Feed | malware_ip |
LIMIT | Maximale Anzahl IPs, leer bedeutet kein Limit | leer |
BLOCK_INCOMING | Verkehr von gelisteten IPs blockieren | yes |
BLOCK_OUTGOING | Verkehr zu gelisteten IPs blockieren | no |
WHITELIST_V4 | IPv4-Adressen oder CIDR-Bereiche, durch Komma getrennt | leer |
WHITELIST_V6 | IPv6-Adressen oder CIDR-Bereiche, durch Komma getrennt | leer |
LOG_FILE | Pfad zur Logdatei | /var/log/qfeeds_blocklist.log |
FULL_SYNC_MAX_AGE | Sekunden, bis erneut ein Voll-Sync erzwungen wird | 86400 |
Datei- und Verzeichnisorte
- Konfiguration:
/etc/qfeeds/qfeeds_config.conf - Sync-Status:
/etc/qfeeds/.last_syncund/etc/qfeeds/.last_count - Update-Skript:
/usr/local/bin/update_qfeeds_blocklist.sh - Log:
/var/log/qfeeds_blocklist.log - Lock-Datei:
/var/lock/qfeeds_blocklist.lock - Cron: Root-Crontab
- Speichern der Regeln:
netfilter-persistent, falls vorhanden, sonst/etc/nftables.confbei nftables oder/etc/ipset.confmit/etc/iptables.rulesund/etc/ip6tables.rulesbei iptables
Deinstallation
sudo ./qfeeds-uninstaller.sh
Der Uninstaller liest, welche Firewall konfiguriert ist, und räumt entsprechend auf. Bei nftables löscht er die Tabellen ip qfeeds und ip6 qfeeds mit allen Chains, Regeln und Sets. Bei iptables entfernt er die markierten Jump-Regeln, leert und löscht die Chains QFEEDS_INPUT und QFEEDS_OUTPUT und löscht alle qfeeds_-Sets. In beiden Fällen verschwinden außerdem das Konfigurationsverzeichnis, das Update-Skript, der Cron-Job, das Log und die Lock-Datei. Fehlt die Konfigurationsdatei, räumt er zur Sicherheit beide Varianten auf.
Systempakete bleiben installiert. Entfernen Sie sie selbst, wenn Sie sie nicht mehr benötigen:
- Ubuntu/Debian:
sudo apt-get -y remove ipset netfilter-persistent - CentOS/RHEL/Alma/Rocky:
sudo yum -y remove ipset - Fedora:
sudo dnf -y remove ipset - openSUSE/SLES:
sudo zypper remove ipset - Arch:
sudo pacman -R ipset
Vorsicht bei iptables, nftables, curl und jq: andere Teile Ihres Systems brauchen diese Pakete mit hoher Wahrscheinlichkeit.
Fehlerbehebung
- Sets sind nach der Installation leer: prüfen Sie
sudo tail -50 /var/log/qfeeds_blocklist.log, kontrollieren Sie Ihr API-Token und starten Sie dannsudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh. - "Not time yet. Next update scheduled at ...": das ist normal. Der Cron-Job ist gelaufen, aber Ihre Lizenz erlaubt noch kein neues Update. Der nächste Lauf prüft erneut.
- Regeln nach einem Neustart verschwunden: das Skript speichert die Regeln automatisch und erkennt beim nächsten Lauf das leere Set, das es dann neu aufbaut. Prüfen Sie zur Sicherheit, ob
netfilter-persistentinstalliert oder der Dienstnftablesaktiviert ist. - "Batch nft -f failed. Falling back to per-command execution": harmlos. Das passiert vor allem in LXC-Containern mit begrenztem Netlink-Puffer. Auch dann sind 400.000 Adressen und mehr in etwa zehn Sekunden geladen. Gleiches gilt für "Message too long".
- "ipset restore failed": prüfen Sie mit
command -v ipset, ob ipset vorhanden ist, und mitlsmod | grep ip_set, ob das Kernelmodul geladen ist. - Keine Regeln in INPUT sichtbar: bei iptables liegen die Blockierregeln in
QFEEDS_INPUT. InINPUTsteht nur die Jump-Regel, markiert mit dem Kommentarqfeeds. Prüfen Sie beides mitsudo iptables -L INPUT -n | grep qfeedsundsudo iptables -L QFEEDS_INPUT -n. - Installation bricht mit "Unable to locate package" ab: Ihre Distribution wurde nicht erkannt. Installieren Sie
curl,jqundutil-linuxmanuell, dazunftablesoderiptablesmitipset, und starten Sie den Installer erneut. - Support: support@qfeeds.com oder die Support-Seite. Einen Fehler in den Skripten gefunden? Melden Sie ihn als Issue im GitHub-Repository.
Vollständiges PDF-Handbuch herunterladen Skripte auf GitHub ansehen