Anyone who publishes Exchange servers and their web interfaces directly via port forward on the Internet may be familiar with the problem: Someone tries to guess the users and passwords or tries to access the mail accounts using brute force. Unfortunately, neither the Windows on-board tools nor Exchange Server offer the option of blocking the IP address after a few failed login attempts.
So here is another script from the Quick and Dirty section: Using the Windows event display, you can find out the IP address from which an incorrect login originated. The corresponding event is 4625:
I have therefore created 2 small scripts that have the following function:
The first script writes the IP address for each failed login to a file, the second script counts the login attempts from each IP address and configures a Windows Firewall rule if too many failed logins originate from one IP.
Unfortunately, it turned out that this method is not one hundred percent reliable, so if there are many incorrect login attempts, such as a brute force attack, not every login is registered, which means that the IP is not blocked after 10 attempts, but only after around 30 attempts. I have therefore invested little time in the scripts, as there are of course solutions that can implement such a function better.
If you still want to use the scripts, you must set them up as follows:
Creates a new task in task planning and defines event 4625 as the trigger
The script "eventaction.ps1" is to be started as an action; the script collects the 4625 events and writes them to a file:
Then create a second task with the trigger "On system start":
The script "blacklist-host.ps1" should be started as an action:
The script runs continuously in a loop and evaluates the file "c:\IPban\ipban.txt". It is sufficient to create an empty file with the name beforehand so that the script does not run into an error. The paths can be adjusted within the script files.
The "blacklist-host.ps1" script can also be used to specify when and for how long an IP should be blocked:
The script then configures the Windows firewall with a "deny" rule if an IP is detected that has produced too many incorrect logins:
I have only tested the scripts briefly in my test environment, so you will need to do some work yourself and carry out extensive tests. Here are the scripts for download.
[wpdm_file id=11]
Maybe someone can use it
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).
Hallo, ich hatte in meinen Server 2012 auch fehlgeschlagene Loginversuche mit russischen und teilweise auch chinesischen IP Adressen gehabt. Ich bin auf folgende Seite gestoßen und mir hat es bisher geholfen… Also ich hatte keine Fehlerhaften Loginversuche mehr gehabt.
https://sus-its.de/laender-blockieren-in-der-windows-server-2012-firewall/
Also man kann laut Anleitung ganze Länder in diran Firewall importieren und blocken.
Hi Frank,
sorry, hab irgendwie Bissel gebraucht! ;-)
Aber danke nachträglich für den Tipp! :-D
Viele Grüße,
Sebastian
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
Hi,
per DNS Reverse Lookup lässt sich die IP zu dem Namen ermitteln. Das Script muss dazu etwas angepasst werden.
Gruß, Frank
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… ;)
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.
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.
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.
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?
Sehr geil, danach habe ich gesucht, macht genau das was ich brauche, vielen Dank