Fail2Ban – Schutz vor Brute-Force-Angriffen

geschrieben am 03.07.2015
Schlagwörter: , , , ,

Fail2Ban - Brute-Force-Angriffe verhindern.

Fail2Ban schützt vor Brute-Force-Angriffen

Dank WordPress ist es heute ein Kinderspiel seinen eigenen Blog zu betreiben. Ein virtueller Server ist schnell gemietet und WordPress ist häufig bereits vorinstalliert.

Doch Vorsicht! Hacker und Skriptkiddies durchsuchen tagtäglich das Internet nach möglichen Angriffszielen und ein virtueller Server mit SSH-Zugang oder der Login zum Adminbereich des WordPress-Blog sind gern gesehene Angriffsziele. Wenn die Angreifer keine Sicherheitslücken finden, die Sie sofort ausnutzen können, probieren sie es eben mit der Brechstange. Beim sogenannten Brute-Force-Angriff, werden einfach so lange Passwörter ausprobiert, bis man den „admin“-Account geknackt hat. Da die wenigsten Anwender wirklich sichere Passwörter einsetzen und die Rechenleistung immer größer wird, kann so ein virtueller Einbruch schnell passiert sein.

Im folgenden Artikel beschreibe ich Ihnen, wie Fail2Ban funktioniert und wieso es wirkungsvoll vor Brute-Force-Angriffe schützt. Das ganze werde ich anhand der zwei Webdienste WordPress und Odoo zeigen. Sollten Sie eher an einer allgemeinen Beschreibung der Funktionsweise interessiert sein, empfehlen wir Ihnen folgenden Artikel zu Fail2ban.

Wie wird Fail2Ban eingesetzt?

Das Prinzip von Fail2Ban ist denkbar einfach. Jeder Zugriffsversuch auf einer Webseite oder über SSH wird von einem Linux-System in eine Log-Datei geschrieben. Bei einem Zugriff auf die Login-Seite von WordPress wird z.B. folgender Log-Eintrag geschrieben:

91.127.182.18 - - [01/Jul/2015:00:31:26 +0200] "POST /wissen/wp-login.php HTTP/1.1" 200 
1556 "https://www.ionas.com/wissen/wp-login.php"
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0"

Diese Zeile besagt, dass jemand von der IP-Adresse 91.127.182.18 am 1.Juli 2015 auf die Seite „wp-login.php“ zugegriffen hat. Der Aufruf erfolgte mit einem Firefox Browser der Version 38.

Fail2Ban überwacht diese Log-Dateien und blockiert bei zu vielen fehlerhaften Zugriffen die IP-Adresse des Angreifers.
Fail2Ban ist somit ein automatisches System zum Erkennen und Verhindern von Systemeinbrüchen durch die Analyse von Log-Dateien.

Warum Fail2Ban?

Wir von ionas nutzen selbst WordPress um die Seite, die Sie gerade lesen, zu verwalten. Um den Adminbereich von WordPress vor Angreifern zu schützen, haben wir uns verschiedenste Möglichkeiten angesehen. Die Login-Seite von WordPress soll über das Internet verfügbar sein, damit wir von jedem Ort mit Internetzugang an neuen Texten arbeiten können. Trotzdem möchten wir die Seite wirkungsvoll vor Angreifern schützen. Neben Fail2Ban gibt es noch andere Dienste wie z.B. Stockade, Denyhosts oder OSSEC. Stockade und Denyhost werden seit Jahren nicht mehr weiter weiter entwickelt, weshalb wir diese Programme nicht weiter betrachtet haben. OSSEC macht auf den ersten Blick einen guten Eindruck, jedoch haben wir zuerst Fail2Ban ausprobiert, da es bereits in den Paketquellen von Ubuntu-Server enthalten ist.

Allgemeines Vorgehen mit Fail2Ban

Egal, ob Sie am Ende WordPress, Odoo (ehemals OpenERP) oder einen beliebigen anderen Dienst schützen wollen. Sie müssen die folgenden Schritte mit Fail2Ban durchführen.

  • Suchen Sie die Log-Datei, in der die Zugriffsversuche für die gewünschte Applikation protokolliert werden
  • Notieren Sie sich, wie fehlerhafte Zugriffsversuche protokolliert werden
  • Erstellen Sie eine Filterregel für Fail2Ban
  • Prüfen Sie die Filterregel
  • Aktivieren Sie die Filterregel

Nachdem Sie nun das allgemeine Vorgehen verstanden haben, können wir zu den konkreten Beispielen übergehen.

Schutz von WordPress mit Fail2Ban

Wordpress Login

Der Login zum Adminbereich von WordPress ist ein beliebtes Angriffsziel. Schützen Sie diesen mit Fail2Ban

Wie ich bereits oben beschrieben haben, loggt der Webserver (typischerweise nginx oder Apache) die Zugriffe auf WordPress. Jedoch wird nicht zwischen zulässigen und fehlerhaften Logins unterschieden. Somit kann man nur die schiere Anzahl an Loginversuchen prüfen. Einfacher wird es mit der Installation des WP-Plugins „WP Fail2Ban“. Nach der Installation dieses Plugins werden alle Zugriffsversuche in die Log-Datei /var/log/auth.log geschrieben. Dabei wird sehr schön zwischen erfolgreichen und abgelehnten Zugriffen unterschieden:

Jul  1 09:59:55 www wordpress(www.ionas-server.com)[19713]: Authentication failure for MrX from 37.148.137.78
Jul  1 10:00:08 www wordpress(www.ionas-server.com)[19731]: Accepted password for ChristophDyllick from 37.148.137.78

Als nächstes erstellen wir eine Fail2Ban Filter-Regel, welcher die Log-Einträge richtig erfassen soll. Wir machen es uns einfach und laden einfach eine passende Regel herunter. Wie genau eine Filterregel aufgebaut werden muss, beschreibe ich im nächsten Absatz zum Schutz des CRM-Systems Odoo.

$ cd /etc/fail2ban/filter.d
$ wget http://plugins.svn.wordpress.org/wp-fail2ban/trunk/wordpress.conf

Als nächstes prüfen wir, ob die Filterregel auch wirklich funktioniert. Der Befehl hierfür lautet:

$ fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/wordpress.conf

Es ist schon fast selbsterklärend, dass mit diesem Befehl die auth.log mit der Filterregel wordpress.conf geprüft wird. Die Ausgabe ist von fail2ban-regex ist umfangreich, aber am Ende sollte folgende Zeile stehen:

Success, the total number of match is 1

Provozieren Sie nun einmal einen fehlerhaften Login in WordPress und führen Sie den regex-Befehl erneut aus. Die Anzahl der Treffer sollte dann logischerweise um 1 angestiegen sein.

Nun ist die Filterregel definiert, aber Fail2Ban muss noch wissen, dass es diese Regel anwenden soll. Öffnen Sie dafür die Datei /etc/fail2ban/jail.conf mit einem Editor Ihrer Wahl und fügen Sie am Ende folgenden Abschnitt ein:

[wordpress]
enabled = true                   
filter = wordpress               
logpath = /var/log/auth.log      
port = http,https                
maxretry = 5                      
findtime = 10800                                                   
bantime = 86400          

Mit dieser Regel sperren Sie eine IP für 24 Stunden, wenn diese innerhalb von 3 Stunden 5 fehlgeschlagene Logins verursacht hat.
Nach einem Neustart von Fail2Ban wird die neue Filterregel aktiviert und Ihr WordPress System ist vor Brute-Force-Angriffen geschützt.

$ /etc/init.d/fail2ban restart
$ /etc/init.d/fail2ban status
$ tail -f /var/log/fail2ban.log

Nach diesen Befehlen sollten Sie in der Log-Datei von Fail2Ban folgende Meldung sehen:

2015-07-01 10:28:32,666 fail2ban.jail   : INFO   Jail 'wordpress' started

Schutz des CRM-Systems Odoo

Odoo perfekt geschützt

Schützen Sie sich vor Brute-Force Angriffen mit Fail2Ban

Als nächstes wollen wir das Open-Source CRM-System Odoo (ehemals OpenERP) schützen. Für Odoo gibt es leider kein Plugin, welches die fehlgeschlagenen Zugriffsversuche so detailliert in die /var/log/auth.log schreibt. Stattdessen müssen wir nginx oder Apache mitteilen, dass die Zugriffsversuche entsprechend geloggt werden. Unter nginx reicht dazu der folgende Eintrag in der „sites-available“ Datei:

access_log    /var/log/nginx/odoo-access.log;

Bei jeden Zugriffsversuch (egal ob erfolgreich oder nicht erfolgreich) wird nun folgender Log-Eintrag erzeugt:

37.148.137.78 - - [30/Jun/2015:14:07:01 +0200] "POST /web/session/authenticate HTTP/1.1"
200 177 "https://h2419672.stratoserver.net/?db=ionas-test-2015-05-27"
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0"

Deshalb lassen wir die Filterdatei von Fail2Ban nach /web/session/authenticate suchen und legen folgende odoo.conf unter /etc/fail2ban/filter.d an

# fail2ban filter configuration for odoo (on nginx)
[Definition]

failregex = ^<HOST>(.*?)(/web/session/authenticate)(.*)$
ignoreregex =

# Author: Christoph Dyllick-Brenzinger (www.ionas-server.com)

Nun sehen Sie auch den Aufbau einer Filterdatei von Fail2Ban. Hinter fail2regex definieren Sie einen oder mehrere reguläre Ausdrücke (jeweils in einer neuen Zeile), die auf einen fehlerhaften Loginversuch hindeuten. Mit ignoreregex können Sie dementsprechend einen oder mehrere reguläre Ausdrücke definieren, die ignoriert werden sollen. Wichtig ist, dass Sie mit Fail2Ban mitteilen, wo er in dem Log-Eintrag die IP findet, die er sperren soll.

Als nächstes aktivieren wir die Filterregel in Fail2Ban, indem Sie folgenden Absatz in die jail.conf von Fail2Ban einfügen:

[nginx-odoo]
enabled = true
port    = http,https
filter  = odoo
logpath = /var/log/nginx/odoo-access.log
maxretry = 30
findtime = 1200                                                   
bantime = 6000        

Nach einem /etc/init.d/fail2ban restart ist auch odoo mit Hilfe von Fail2Ban vor Brute-Force-Angriffen geschützt.

Achtung: Fail2Ban hinter Proxys oder Zugriffe aus einem Büro

Fail2Ban merkt sich Zugriffsversuche und ordnet diese einer IP-Adresse zu. Wenn Sie somit z.B. mit einem vorgeschalteten Proxy arbeiten, sollten Sie Fail2Ban nicht verwenden. Der Proxy würde dafür sorgen, dass alle Zugriffe mit der IP des Proxys gespeichert werden und sobald in Summe zu viele fehlgeschlagene Zugriffsversuche aufgetreten sind, ist das Gesamtsystem für alle Anwender gesperrt. Ihre Seite wäre dann nicht mehr erreichbar.

Ähnlich verhält es sich, wenn Sie z.B. mehrere Mitarbeiter haben, die über die gleiche externe IP auf ein System zugreifen. Stellen Sie sich vor 10 Mitarbeiter loggen sich morgen zum Arbeitsbeginn in Odoo ein. Dies wären die ersten 10 Zugriffe von der gleichen IP-Adresse. Aus diesem Grund sollten Sie die Möglichkeit nutzen, in der Datei /etc/fail2ban/jail.conf IP-Adressen zu definieren, die von Fail2Ban ignoriert werden. Mit ignoreip können Sie entweder gesamte Netzwerke oder einzelne IPs von der Prüfung ausnehmen.

ignoreip = 127.0.0.1 192.168.1.0/24 8.8.8.8

Wie Sie sehen ist Fail2Ban ein sehr einfaches und mächtiges Tool um Linux-Systeme vor Brute-Force-Angriffen zu schützen. Dies ist der Grund warum wir von ionas Fail2Ban auf dem ionas-Server nutzen um die installierten Webdienste vor unerlaubten Zugriffen zu schützen.

Sollten Sie Fragen oder Probleme haben, zögern Sie nicht uns anzurufen. Wir helfen Ihnen gerne an 365 Tagen im Jahr von 8 bis 20 Uhr. Sie erreichen uns unter +49 (0)6131 3270777.

  • Facebook
  • Twitter
  • Google+
  • RSS Feed
  • YouTube

Kommentar schreiben

Kommentar


Danke für diese gute Erklärung der Filterregeln von Fail2Ban. Daumen hoch und weiter so!


« | »