Windows Server: IP-Adresse nach fehlgeschlagenen Logins blocken (Quick & Dirty)

Wer Exchange Server und ihre Webschnittstellen direkt via Portforward im Internet veröffentlicht kennt vieleicht das Problem: Jemand versucht die Benutzer und Passwörter zu erraten oder probiert per Brute-Force an die Mail Konten zu kommen. Leider bieten weder die Windows Bordmittel noch Exchange Server die Möglichkeit nach ein paar fehlgeschlagenen Anmeldeversuchen die IP-Adresse zu blocken.

Hier also wieder ein Script aus dem Bereich Quick and Dirty: Mittels Windows Ereignis Anzeige bekommen man die IP-Adresse herraus, von der ein fehlerhaftes Login ausgegangen ist. Das zugehörige Event ist 4625:

IP

Ich habe daher 2 kleine Scripte erstellt, die folgende Funktion haben:

Das erste Script schreibt die IP-Adresse für jede fehlerhafte Login in eine Datei, das zweite Script zählt die Anmeldeversuche von jeder IP-Adresse und konfiguriert eine Windows Firewall Regel, wenn zu viele fehlerhafte Anmeldungen von einer IP ausgehen.

Leider hat sich gezeigt das diese Methode nicht hundertprozentig zuverlässig ist, es werden also bei vielen falschen Anmeldeversuchen, wie etwa bei einer Brute-Force Attacke nicht jedes Login registriert, was dazu führt das die IP nicht schon nach 10 Versuchen, sondern erst nach um die 30 Versuchen blockiert wird. Ich habe daher wenig Zeit in die Scripte investiert, da es natürlich Lösungen gibt, die solch eine Funktion besser umsetzen können.

Wer die Scripte trotzdem nutzen möchte, muss sie wie folgt einrichten:

Legt in der Aufgabenplanung eine neue Aufgabe an und definiert als Trigger das Event 4625

image

Als Aktion soll das Script „eventaction.ps1“ gestartet werden, das Script sammelt die 4625er Events und schreibt sie in eine Datei:

image

Danach legt eine zweite Aufgabe mit dem Trigger „Bei Systemstart“ an:

image

Als Aktion soll das Script „blacklist-host.ps1“ gestartet werden:

image

Das Script läuft kontinuierlich in einer Schleife und wertet die Datei „c:\IPban\ipban.txt“ aus. Es genügt vorher eine leere Datei mit dem Namen zu erzeugen, damit das Script nicht auf einen Fehler läuft. Die Pfade lassen sich innerhalb der Script Dateien anpassen.

Im Script „blacklist-host.ps1“ lässt sich außerdem festlegen, ab wann und für wie lange eine IP geblockt werden soll:

image

Das Script konfiguriert dann die Windows Firewall mit einer „Verweigern“-Regel, wenn eine IP erkannt wurde die zu viele fehlerhafte Logins produziert hat:

image

Ich habe die Scripte nur kurz in meiner Testumgebung getestet, hier gilt es also selbst noch etwas Hand anzulegen und ausgiebige Tests durchzuführen. Hier nun die Scripte zum Download.

[wpdm_file id=11]

Vieleicht kann es ja jemand gebrauchen Smiley

11 Gedanken zu „Windows Server: IP-Adresse nach fehlgeschlagenen Logins blocken (Quick & Dirty)“

  1. Für dieses Problem gibt es eine einfache Lösung: syspeace.
    http://www.syspeace.com
    Diese Software überwacht fehlgeschlagene Loginversuche und generiert nach einer zu definierenden Anzahl falscher Versuche eine Windows Firewall Regel, die diese IP-Adresse für einen bestimmten Zeitraum sperrt.
    Geoblocking ist auch möglich.
    Ganz einfach und kostet auch nicht die Welt (73 USD pro Installation und Jahr).

    Antworten
  2. Klasse Anleitung, vielen Dank!
    Aber eine zusätzliche Frage: Ich habe momentan extrem viele Anmeldeversuche im Log, bei denen leider keine IP-Adresse eingetragen ist, sondern nur ein Arbeitsstationsname. Gibt’s ne Chance, da auch die IP raus zu bekommen?

    Vielen Dank und viele Grüße,
    Sebastian

    Antworten
  3. Nun, die Wahrscheinlichkeit, den Lotto-Jackpot 6aus49 zu knacken, liegt bei 1:139.838.160. Die Wahrscheinlichkeit, daß die gleiche IP eines Hackers nochmal einem „sauberen“ Nutzer zugeteilt wird, der dann ausgerechnet binnen eines Jahres auf meinen Server zugreift, wäre noch zu errechnen, wobei wir bei IPv4 von 4.294.967.296 Adressierungsmöglichkeiten ausgehen, also dem Dreißigfachen an Möglichkeiten als Ausgangsbasis der Wahrscheinlichkeitsrechnung, IPv6 mal ausgeklammert. Ich denke, das Risiko, einen seriösen Client auszusperren, dürfte gering sein, selbst wenn man im Laufe des Serverlebens zehntausende IPs blockiert hätte. Wäre ne Aufgabe für nen Stochastiker… ;)

    Antworten
  4. Dein Skript hatte bei mir zwar die IPs in die Log-Datei geschrieben, jedoch keine Einträge in der Firewallregel gemacht. Habe nun dieses Script hier verwendet, weil es erstens die Beschränkung der Firewallregel auf 1000 Einträge behebt, zweitens auch die erheblich sicherheitsrelevanten Ftp-Logins überprüft und drittens die Sperr-Einträge dauerhaft speichert:
    http://serverfault.com/a/571903
    Sobald dann da eine neue Firewallregel erstellt wurde, kann man ja alte Regeln nach einer gewissen Zeit wieder löschen. Wenn man mal bedenkt, daß ich binnen 20 Tagen 23.000 Hacker-Loginversuche aus aller Herren Länder zu verzeichnen hatte, dann sind die 1000 IP-Einträge auch ratzfatz voll. Die Frage wäre nur noch, wie man dieses Script erweitern kann, auch die Logfiles vom Controll-Channel oder von weiteren Ftp-Accounts auszuwerten.

    Antworten
    • Stimmt, mein Script prüft nicht gegen die FTP Logins, wie schon erwähnt, halte ich es für ungeschickt IPs dauerhaft zu blocken. Ehrlich würde ich aber auch kein IIS FTP ins Internet hängen, da dort die Funktionen doch sehr eingeschränkt sind. Es gibt freie Lösungen die deutlich besser sind, sowohl was Verwaltung, als auch Funktionsumfang angeht, FileZilla FTP Server zum Beispiel wäre eine Open Source ALternative, der AutoBan von Hause aus mit bringt, ohne entsprechende Scripte.

      Antworten
  5. Eine IP dauerhaft zu blocken ist leider keine Lösung, da viele Internetanschlüsse dynamische IPs verwenden. Bei zu langer „Blockzeit“ steigt die Gefahr, das eine IP geblockt wird, die mit dem fehlgeschlagenen Login vor einem halben Jahr nichts zu tun hatte.
    Nach Ablauf der zeit wird die IP wieder aus der Firewall Regel ausgetragen.

    Antworten
  6. Danke, ich teste es gerade! Wie ändere ich das Script, damit eine IP dauerhaft geblockt wird? Momentan habe ich eine Zeit von einem Jahr eingestellt, allerdings könnte ich mir vorstellen, daß dann die Anwendung immer mehr Leistung verbraucht, weil sie für jede gespeicherte IP die Minuten zählen muß – und leider sind rund um die Uhr Hacker-Angriffe am Server zu verzeichnen, so daß vielleicht irgendwann der Server abkratzt bei der Ausführung des Scriptes. Was macht das Script eigentlich bei Ablauf der Zeit? Wird die IP aus der Firewall-Regel wieder ausgetragen?

    Antworten

Schreibe einen Kommentar