Diese Seite dokumentiert die eigentliche dnsbl-ipset-Engine (FireHOL dnsbl-ipset.sh), die in Echtzeit IP-Adressen gegen verschiedene DNS-Blocklisten prüft und in ein ipset schreibt.
== Ziel
- Verdächtige Verbindungen aus dem Firewall-Log (ulogd) in Echtzeit gegen DNSBLs prüfen
- Treffer automatisiert in ein
ipsetschreiben - iptables-Regeln verwenden dieses
ipset, um IPs temporär zu blocken
== Komponenten
- Script:
/etc/firehol/dnsbl-ipset.sh - ipset:
dnsbl(Typ:hash:ip, Timeout z.B. 1209600 Sekunden ≈ 14 Tage) - Logquelle:
/var/log/ulog/syslogemu.log(ulogd iptables Log) - Auswertescript (separate Seite):
dnsbl.sh– siehe Wiki: https://wiki.bubuit.net/dnsblsh
== Funktionsweise
dnsbl-ipset.shliest kontinuierlich das ulogd-Log (/var/log/ulog/syslogemu.log) pertail -F.- Aus jeder geloggten Verbindung wird die Quell-IP extrahiert.
- Für jede IP werden asynchrone DNS-Anfragen an die konfigurierten DNSBLs gestellt (z.B.
zen.spamhaus.org,dnsbl.sorbs.net, etc.). - Aus den Antworten wird ein Score berechnet (z.B. 0 = neutral, >0 = negativ, <0 = Whitelist).
- IPs mit ausreichendem Score werden in das ipset
dnsbleingetragen (mit Timeout und Kommentar). - iptables wertet das
dnsbl-Set in eigenen Regeln aus und blockt diese IPs.
== Wichtig: Dauerbetrieb im Hintergrund
dnsbl-ipset.sh ist ein dauerhaft laufender Dienst, kein einmaliger Cronjob.
- Es muss kontinuierlich im Hintergrund laufen, damit:
- neue Verbindungen sofort geprüft werden
- das ipset
dnsblständig aktuell gehalten wird
- Wenn der Prozess nicht läuft, bleibt
ipset list dnsblleer – auch wennmatches.lognoch alte Einträge enthält.
== systemd-Service
Statt das Script wöchentlich via Cron zu starten, sollte es als systemd-Service laufen.
Beispiel-Unit-Datei /etc/systemd/system/dnsbl-ipset.service (vereinfachter Entwurf):
[Unit]
Description=DNSBL realtime firewall updater
After=network-online.target ulogd.service
Wants=network-online.target
[Service]
Type=simple
ExecStart=/etc/firehol/dnsbl-ipset.sh
Restart=always
RestartSec=5
StandardOutput=append:/var/log/dnsbl-ipset.log
StandardError=append:/var/log/dnsbl-ipset.log
[Install]
WantedBy=multi-user.target
Aktivierung:
systemctl daemon-reload
systemctl enable --now dnsbl-ipset.service
== Entfernen des alten Cron-Setups
Früher wurde dnsbl-ipset.sh über einen wöchentlichen Cronjob gestartet:
- Datei:
/etc/cron.weekly/dnsbl-update - Problem: der Prozess läuft nicht dauerhaft und startet nach Reboot oder Fehlern nicht automatisch neu.
Stattdessen:
mv /etc/cron.weekly/dnsbl-update /etc/cron.weekly/dnsbl-update.disabled
Damit ist eindeutig: dnsbl-ipset läuft dauerhaft über systemd, nicht zeitgesteuert per Cron.
== ipset-Status verstehen
Befehl zur Kontrolle:
ipset list dnsbl- Wichtig:
Number of entries: 0bedeutet nicht zwingend einen Fehler, sondern nur, dass aktuell keine IP aktiv blockiert wird (keine neuen Treffer oder alle Timeouts abgelaufen).- Das
timeoutim Set-Header (z.B.timeout 1209600) entspricht der Lebensdauer einer geblockten IP im Set. matches.log(siehe Auswertungsseite) kann viele Zeilen enthalten, obwohl das ipset leer ist –matches.logist historisch, ipset ist der aktuelle Live-Zustand.
== Verwandte Seiten
- Auswertescript (wöchentliche Reports aus
matches.log):dnsbl.sh→ https://wiki.bubuit.net/dnsblsh - Alte Dokumentation/Notizen: ursprüngliche Seite
dnsbl-ipset(wurde mit dieser Seite aktualisiert)