
Ich versuche, ICMP-Pings von einem Server zu blockieren, wenn die Paketanzahl größer als 2 pro Sekunde ist (Paketanzahl zum Testen reduziert). Ich habe diese beiden Regeln separat ausprobiert, aber sie scheinen nicht zu helfen:
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 1 --hitcount 2 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT --match limit --limit 2/s --limit-burst 2
was ist falsch an diesen Regeln?
Ich pinge von einem anderen Server aus mit dem folgenden Befehl, aber der Ping erhält weiterhin Antworten -
ping -n -i 0.2 192.168.2.86
auch wenn ich die iptables -nvL-Ausgabe überprüfe, erhöht sich die Paketanzahl für die Regel nicht …
Die verwendete Maschine ist CentOS 6.8
Einige Fortschritte: Ich habe am Ende der Tabelle eine Standard-Drop-Regel hinzugefügt:
iptables -A INPUT -p icmp -m icmp -j DROP
und dann das Hinzufügen dieser Regel Pings gelöscht, die das Limit überschritten haben
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 2/second -j ACCEPT -m comment --comment "icmprule1"
immer noch nicht in der Lage, den Server vollständig zu blockieren.
Antwort1
Hier geht's: Hinzufügen einer sekundären ICMPSCAN-Kette (und Platzieren der Sprungregel an der ersten Position der INPUT-Kette):
iptables -N ICMPSCAN
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j DROP
Hinweis: Beide Set-/Update-Regeln könnten stattdessen in INPUT ohne die sekundäre Regel gesetzt werden, aber ich ziehe es vor, solche Regeln in getrennten Ketten zu platzieren.
Hinweis 2: Nach --set könnte eine zusätzliche Regel hinzugefügt werden, um das Ereignis zu protokollieren …
dynamisches Blacklisting:
Um jetzt eine permanente dynamische Blacklist basierend auf dem jüngsten Hitcount-Trigger hinzuzufügen, können wir die Vorteile der ipset-Funktion nutzen. ipset ist für CentOS 6.x verfügbar und iptables ist ipset-fähig, aber Sie müssen es möglicherweise zuerst installieren.
Hier die iptables/ipset-Regeln, die Ihren Anforderungen entsprechen:
iptables -F ICMPSCAN
iptables -N ICMPSCAN
ipset -N banned_hosts iphash
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j SET --add-set banned_hosts src
iptables -A ICMPSCAN -m set --set banned_hosts src -j DROP
Sie können den aktuellen Inhalt der Sperrliste mithilfe der IPSET-Liste auflisten, zum Beispiel:
# ipset list banned_hosts
Name: banned_hosts
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8284
References: 2
Members:
192.168.122.1
und verwalten Sie die Setliste, um beispielsweise eine IP-Adresse zu entfernen, wie:
# ipset del banned_hosts 192.168.122.1
Siehe auch diese Seite:http://www.linuxjournal.com/content/advanced-firewall-configurations-ipset