Eine unserer Dienstleistungen ist ein Extranet für die ausschließliche Nutzung unserer 200 Mitarbeiter in ganz Großbritannien. Wir sehen eine große Anzahl von Anmeldeversuchen aus China, Russland, der Ukraine und Nigeria. Ich habe große Listen von IP-Bereichen, die ich blockieren möchte. Es gibt Tausende von Einträgen.
(Für die Zwecke dieser Diskussion bin ich nicht daran interessiert, eine Debatte über die Rechte und das Unrecht der Blockierung ganzer Länder zu eröffnen. Das ist die Anforderung, die ich habe - und die ich erfüllen muss.)
Ich habe ein Powershell-Skript geschrieben, das die Liste alle 24 Stunden aktualisiert und die Windows-Firewall mit Blockregeln auffüllt. Aber ich bin nervös, es zu aktivieren.
Meine Frage ist, wie effizient Windows Firewall Tausende von Blockregeln auf diese Weise handhabt. Wenn mein Skript beispielsweise 10.000 Blockregeln (oder sogar 100.000) enthielt, funktioniert es dann effektiv oder kommt es zum Stillstand?
Während ich meinen Webserver so geschützt wie möglich halten möchte, muss ich sicherstellen, dass der Webserver Anfragen schnell bearbeitet.
AKTUALISIEREN
Ich habe beschlossen, ein Risiko einzugehen und das PowerShell-Skript auszuführen. Ich habe mich für eine etwas andere Technik entschieden. Anstatt 6700 Regeln zu erstellen (die Millionen von IPs abdecken), habe ich eine Regel erstellt und alle fehlerhaften IP-Bereiche in die Mutter aller Remote-Adressen verschoben.
Ergebnis : Funktioniert einwandfrei. Blockiert den größten Teil Chinas, Russlands, Taiwans, der Ukraine und Nigerias, wo wir die meisten eingehenden Hacking-Versuche erhalten. Und es gibt keinen merklichen Leistungsunterschied. Wir scheinen die gleiche Anzahl von Anfragen ohne Änderung zu bearbeiten. Eine für die Windows-Firewall. Es scheint in der Lage zu sein, Tausende von IP-Blöcken sehr effizient zu handhaben.
UPDATE 2 - FEEDBACK
Das Skript ist seit ein paar Tagen in Kraft, daher dachte ich, Sie würden sich über Feedback freuen, wie es läuft. Ich habe das Skript als geplanten Job eingerichtet, der täglich ausgeführt wird, und die Firewall mit neuen IP-Bereichen aktualisiert, die aus einer CSV-Datei eingelesen werden. Das alles funktioniert perfekt, die Firewall funktioniert sehr schnell. Allerdings gibt es ein Wort der Vorsicht: Das Skript selbst dauert ca.. Die Laufzeit beträgt 4-5 Minuten. Während dieser Zeit ist die CPU voll und die Webanforderungen sind äußerst träge.
Daher empfehle ich, das Skript abends oder während eines Wartungsfensters auszuführen, in dem Sie keine hohe Last erwarten.
Die Lösung für mich besteht darin, das Skript zu unterschiedlichen Zeiten auf jedem meiner Server mit Lastenausgleich auszuführen, damit die Leistung während der Ausführung nicht beeinträchtigt wird.
Hier ist das Skript:
$csv = Import-Csv -Path 'C:\Scripts\IP Block List.csv'
$data = @()
$csv | ForEach-Object { $data += $_.From + "-" + $_.To }
Set-NetFirewallRule -Name "BlockAllIPsInList" -RemoteAddress $data
Und hier ist eine CSV-Beispieldatei:
From,To
1.2.3.4,1.2.3.255
In diesem Beispiel würde also alles von 1.2.3.4 bis einschließlich 1.2.3.255 blockiert
Mit ein wenig Arbeit könnte das Skript so geändert werden, dass es auch mit CIDR-Formaten funktioniert. Hoffe das hilft.