Page 1 of 1

Länder IP Ban mit ipset

Posted: Tue 17. Jun 2025, 00:13
by Blubby
Tobi wrote: Mon 16. Jun 2025, 21:44 Folgende Lösung funktioniert unabhängig auf Debian und Ubuntu, parallel zu KeyHelp.
Wäre es nicht besser aus Performancegründen per Ipset abzubilden?

Re: Länder IP Ban mit ipset

Posted: Tue 17. Jun 2025, 00:56
by lrab
Blubby wrote: Tue 17. Jun 2025, 00:13 Wäre es nicht besser aus Performancegründen per Ipset abzubilden?
Genau das war auch mein Gedanke als ich das Skript gesehen hab.

Fail2Ban arbeitet ja bekanntermaßen mit iptables, um IP-Adressen zu sperren. Wenn man tausende IPs über fail2ban-client set banip blockiert, kann das schnell zu Performance-Problemen führen. Jede IP wird als eigene Regel in iptables angelegt, was nicht nur die Verarbeitung und/oder den Verbindungsaufbau verlangsamt, sondern auch zu längeren Ladezeiten beim Restart von Fail2Ban führt. Auch die Speicher- und CPU-Auslastung steigt deutlich an, da die Regeln einzeln durchlaufen werden müssen.

Für genau solche Anwendungsfälle ist wie du sagst, ipset deutlich besser geeignet. Es erlaubt das Verwalten vieler IPs in einer einzigen iptables-Regel. Die Prüfung, ob eine IP gesperrt ist läuft per Hash-Set, also direkt unabhängig davon, ob 10 oder 10.000 IPs enthalten sind. Performance und Systemressourcen profitieren davon spürbar.

Re: Länder IP Ban mit ipset

Posted: Tue 17. Jun 2025, 08:18
by Tobi7889
Korrekt, wir haben zB. von IPTables auf NFTables umgestellt und setzen die IP Sperrliste von AbuseIPDB mittlerweile direkt über NFTables um über ein einfaches CronSkript, welches die Listen holten.

Dann binden wir es via IPSets (einmal für IPv4 und einmal für IPv6) in NFTables ein, das sorgt für weit bessere Performance.

Re: Länder IP Ban mit ipset

Posted: Tue 1. Jul 2025, 09:46
by lrab
Tobi wrote: Mon 30. Jun 2025, 21:57 Nun ja, dort geht es streng genommen um eine angeblich performantere und ressourcenschonendere Lösung. Nur halt leider keine Anleitung wie man das realisieren könnte. Aber vielleicht kommt das ja noch. Ist nicht mein Thema.
Eigentlich war's nicht geplant, da ich dachte, es wird jeder (kompetente) Serveradministrator mit etwas Hirnschmalz selbst hinkriegen.
Na dann hier mal eine Anleitung wie es mit ipsets funktioniert.

1. Pakete installieren (falls noch nicht vorhanden)

Code: Select all

apt update
apt install ipset iptables-persistent ipset-persistent curl
2. ipset einmalig anlegen

Code: Select all

ipset create abuseipdb hash:ip family inet hashsize 4096 maxelem 500000
3. iptables-Regel setzen

Code: Select all

iptables -I INPUT -m set --match-set abuseipdb src -j DROP
netfilter-persistent save
4. Update-Skript ablegen

Code: Select all

#!/usr/bin/env bash
set -eu

LIST_URL="https://raw.githubusercontent.com/borestad/blocklist-abuseipdb/refs/heads/main/abuseipdb-s100-30d.ipv4"
SET="abuseipdb"

TMP="${SET}_tmp"
ipset create "$TMP" hash:ip family inet hashsize 4096 maxelem 500000 -exist
curl -s "$LIST_URL" | grep -v '^#' | cut -d' ' -f1 | while read -r ip; do
    [[ -n "$ip" ]] && ipset ad
    d "$TMP" "$ip" -exist
done
ipset swap "$SET" "$TMP"
ipset destroy "$TMP"
Per chmod Skript ausführbar machen nicht vergessen!

5. Cronjob einrichten

Code: Select all

crontab -e

Code: Select all

30 4 * * * update-abuseipdb.sh >/dev/null 2>&1

Re: Länder IP Ban mit ipset

Posted: Tue 1. Jul 2025, 10:30
by Tobi
lrab wrote: Tue 1. Jul 2025, 09:46 Eigentlich war's nicht geplant, da ich dachte, es wird jeder (kompetente) Serveradministrator mit etwas Hirnschmalz selbst hinkriegen.
Danke!
Von solchen Anleitungen lebt unser Forum.

Ich schätze pro kompetenten Admin gibt es hier sicher 10 Noobs welche von der Erfahrung der Pros profitieren.
Nur so kann man lernen.

Allerdings gibt es hier auch noch stille Mitleser welche man lieber nicht wecken sollte...
Oder doch? Zeige dich! :lol:

Re: Länder IP Ban mit ipset

Posted: Tue 1. Jul 2025, 19:41
by rolando40
Tobi wrote: Tue 1. Jul 2025, 10:30 gibt es hier sicher 10 Noobs
11 :D
Tobi wrote: Tue 1. Jul 2025, 10:30 Von solchen Anleitungen lebt unser Forum.
Natürlich!
Tobi wrote: Tue 1. Jul 2025, 10:30 Oder doch? Zeige dich!
Kuckuck :lol:

Meine Ländersperre ist in der Forumssoft eingepflegt, weil ich Massen Bots Besucher aus Singapur hatte und mein Forum lahm legte.
Nun sehen sie eine leere Seite und haben kein Interesse mehr :P
Image

Re: Länder IP Ban mit ipset

Posted: Tue 1. Jul 2025, 20:01
by Jolinar
@lrab:
Ich glaub, da hat sich ein Fehler eingeschlichen:

Code: Select all

curl -s "$LIST_URL" | grep -v '^#' | cut -d' ' -f1 | while read -r ip; do
    [[ -n "$ip" ]] && ipset ad
    d "$TMP" "$ip" -exist
done
Ich vermute mal, du meintest es so:

Code: Select all

curl -s "$LIST_URL" | grep -v '^#' | cut -d' ' -f1 | while read -r ip; do
    [[ -n "$ip" ]] && ipset add "$TMP" "$ip" -exist
done

Nachtrag:
Wenn du einmal am Verbessern deines Scripts bist, könntest du ja noch eine Prüfung einbauen, ob auf dem System iptables oder nftables zum Einsatz kommt. So wäre das Script auch dann noch valide, wenn iptables irgendwann aus den Systemen verschwindet.
Vielleicht sowas in der Art (Codesnippet mit KI erstellt, nicht getestet^^):

Code: Select all

# --- Prüfung und Regelsetzung ---

IPTABLES_VERSION_OUTPUT=$(iptables -V 2>&1)

if echo "$IPTABLES_VERSION_OUTPUT" | grep -q "(nf_tables)"; then
    echo "Info: iptables (nf_tables backend) erkannt. Setze Regel mit iptables-nft."
    # Die Regel für iptables-nft ist die gleiche wie für iptables-legacy
    iptables -I INPUT -m set --match-set abuseipdb src -j DROP
elif echo "$IPTABLES_VERSION_OUTPUT" | grep -q "(legacy)"; then
    echo "Info: iptables (legacy backend) erkannt. Setze Regel mit iptables-legacy."
    iptables -I INPUT -m set --match-set abuseipdb src -j DROP
elif command -v nft &>/dev/null && nft list ruleset &>/dev/null; then
    echo "Info: nftables direkt erkannt. Setze Regel mit nft."
    # Hier wäre der nftables-spezifische Befehl, falls du ihn verwenden möchtest
    # Beispiel (ersetze 'filter' und 'input' durch deine tatsächlichen Tabellen/Ketten, falls abweichend):
    # nft add rule ip filter input ip saddr @abuseipdb drop
    # Für dieses spezielle Szenario (ipset mit DROP) würde der iptables-Befehl über die Kompatibilitätsschicht immer noch funktionieren.
    # Daher ist es meist nicht nötig, hier auf nft umzuschwenken, wenn die iptables-Regel auch mit nftables-Backend funktioniert.
    iptables -I INPUT -m set --match-set abuseipdb src -j DROP # Weiterhin iptables-Befehl nutzen
else
    echo "Warnung: Weder iptables-legacy noch nftables eindeutig erkannt. Versuche trotzdem iptables-Befehl."
    echo "Bitte überprüfen Sie Ihre Firewall-Konfiguration manuell."
    iptables -I INPUT -m set --match-set abuseipdb src -j DROP # Versuchen Sie es trotzdem
fi

Re: Länder IP Ban mit ipset

Posted: Wed 2. Jul 2025, 08:27
by lrab
Jolinar wrote: Tue 1. Jul 2025, 20:01 @lrab:
Ich glaub, da hat sich ein Fehler eingeschlichen:
Aii peinlicher Fehler mit dem Zeilenumbruch. phpBB hat mich scheinbar wieder mit den Tags überfordert. :lol:
Jolinar wrote: Tue 1. Jul 2025, 20:01 Nachtrag:
Wenn du einmal am Verbessern deines Scripts bist, könntest du ja noch eine Prüfung einbauen, ob auf dem System iptables oder nftables zum Einsatz kommt. So wäre das Script auch dann noch valide, wenn iptables irgendwann aus den Systemen verschwindet.
Vielleicht sowas in der Art (Codesnippet mit KI erstellt, nicht getestet^^):
Sehr gute Idee übrigens mit der Prüfung auf iptables oder nftables. Ich hatte tatsächlich schon überlegt, beim Einfügen auch direkt die Validität zu prüfen, wobei ich (hoffentlich) davon ausgehe, dass das Repository eine plausible/korrekte Quelle ist.

Werde mich die Tage hinsetzen und mal ein aktualisiertes Skript schreiben. Danke für euren Input!

Re: Länder IP Ban mit ipset

Posted: Wed 2. Jul 2025, 08:54
by Ralph
Für country blocking verwende ich ein script was einmalig beim Systemstart ausgeführt wird.
Script & Länder können und sollten erweitert und optimiert werden, ich verwende eine externe FW und habe die KH FW deaktiviert, mein script ist auch etwas umfangreicher, aber unten mal ein kurzes Beispiel dazu (ungetestet).
Die KH Tasks werden bei aktivierter KH Firewall die country chains löschen wenn diese nicht als persistent integriert wurden und werden dann unwirksam!

z.b.

Code: Select all

#!/bin/bash
cd /tmp

ipset -N -exist china hash:net
 timeout 10 curl -s https://www.ipdeny.com/ipblocks/data/countries/cn.zone | grep -oP '^[0-9\./]+' > cn.zone
 for i in $(cat cn.zone ); do ipset -A china $i; done

ipset -N -exist bangladesh hash:net
 timeout 10 curl -s https://www.ipdeny.com/ipblocks/data/countries/bd.zone | grep -oP '^[0-9\./]+' > bd.zone
 for i in $(cat bd.zone ); do ipset -A bangladesh $i; done

ipset -N -exist brazil hash:net
 timeout 10 curl -s https://www.ipdeny.com/ipblocks/data/countries/br.zone | grep -oP '^[0-9\./]+' > br.zone
 for i in $(cat br.zone ); do ipset -A brazil $i; done

iptables -I INPUT -p all -m set --match-set china src -j DROP
iptables -I OUTPUT -p all -m set --match-set china src -j DROP
iptables -I FORWARD -p all -m set --match-set china src -j DROP

iptables -I INPUT -p all -m set --match-set bangladesh src -j DROP
iptables -I OUTPUT -p all -m set --match-set bangladesh src -j DROP
iptables -I FORWARD -p all -m set --match-set bangladesh src -j DROP

iptables -I INPUT -p all -m set --match-set brazil src -j DROP
iptables -I OUTPUT -p all -m set --match-set brazil src -j DROP
iptables -I FORWARD -p all -m set --match-set brazil src -j DROP

rm -rf /tmp/*.zone
kann dann noch für IPv6 erweitert werden z.b.

Code: Select all

ipset -N -exist china6 hash:net family inet6
timeout 10 curl -s https://raw.githubusercontent.com/ipverse/rir-ip/master/country/cn/ipv6-aggregated.txt > cn1.zone
 awk '/^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}(:\/[0-9]{1,2})?([[:space:]]|$)/{print $1}' /tmp/cn1.zone > /tmp/cn.zone
 for i in $(cat cn.zone ); do ipset -A china6 $i; done

ip6tables -I INPUT -p all -m set --match-set china6 src -j DROP
ip6tables -I OUTPUT -p all -m set --match-set china6 src -j DROP
ip6tables -I FORWARD -p all -m set --match-set china6 src -j DROP
check:

Code: Select all

ipset list china  | wc -l
ipset list china
ipset list china6  | wc -l
ipset list china6
iptables -L -n --line-numbers
ip6tables -L -n --line-numbers

Re: Länder IP Ban mit ipset

Posted: Wed 2. Jul 2025, 20:36
by Ralph
Das Problem wird so schnell niemand in den Griff bekommen, nicht mit Geoblocking und auch nicht mit IP Blacklists ... weil die Botnets bereits zu riesig geworden sind und neue attackierende IP Adressen jeden Tag massenhaft hinzukommen :roll:
Wäre vieleicht besser und weniger Aufwand nur Whitelists zu füttern ...
Als Standard einfach alles dicht machen und per Anfrage und "sorgfältiger" Prüfung erst Zugriff erlauben ... quasi :lol:

Die AbuseIPDB Reporting Statistics (eher nur die Spitze vom Eisbärsch) aber schon eine nette Steigerung erkennbar!
https://www.abuseipdb.com/statistics

Re: Länder IP Ban mit ipset

Posted: Sun 6. Jul 2025, 05:40
by Fezzi
Mal ne saubloede Frage, ich bin da ja nicht so firm.... :oops: :roll:

kann man die besagte Abuse Liste nicht einfach in eine bestehende Firewall Regel von KeyHelp einlesen lassen?

https://raw.githubusercontent.com/bores ... 0-30d.ipv4
Screenshot from 2025-07-06 10-39-01.png