Durch fail2ban-Einsatz weniger Serverressourcen verbrauchen

Wer eine Joomla Webseite betreibt, weiss dass es manchmal zu Brute-Force-Angriffen auf den Administrator-Login kommen kann. Diese sind nicht nur lästig, sondern können das Webpaket, bzw. den Server stark auslasten und dazu führen, dass reguläre Nutzer die Seite nur sehr langsam angezeigt bekommen. Bei Joomla ist der Aufruf des Administrationsbereichs nicht konfigurierbar und führt daher immer ins gleiche Verzeichnis - domain.com/administrator . Daraus folgt, dass jeder versuchen kann, in die Administrationsebene einzuloggen - falls keine entsprechenden Sicherheitsvorkehrungen getroffen werden.

Mehrere Lösungen sind denkbar

Nun könnte man dieses Verzeichnis zwar mit einer .htaccess Datei mit einem Password absichern, was jedoch den Nachteil hat, dass man sich zwei mal anmelden muss, wenn man auf den Administrationsbereich zugreifen möchte - auf Dauer keine gute Lösung. Eine andere Möglichkeit ist es, eine Erweiterung zu installieren, bei der man einen zusätzlichen Parameter an die URL anhängt, - was ebenfalls nicht optimal ist. Bei beiden Lösungsansätzen werden Brute-Force-Zugriffe nicht abgewehrt, sondern nur umgeleitet. Der Zugriff auf den Server/das Webpaket findet trotzdem statt und verbraucht Serverressourcen.

Serverbasierte Lösung: fail2ban

Daher bietet es sich an, eine serverbasierte Lösung zu nutzen: Die eingebaute Firewall des Betriebssystems. Bei Linux-basierten Maschinen ist dies mit iptables - in Verbindung mit dem Tool fail2ban - eine optimale Lösung. fail2ban überprüft diverse Logfiles, die von praktisch allen Serverprozessen, wie etwa Apache oder SSH, erzeugt werden. Falls eine fehlgeschlagene Anmeldung erfolgt, wird die entsprechende IP für eine mehr oder weniger lange Zeitspanne per iptables geblockt. Die Konfiguration (Anzahl der Fehlversuche, Bannzeit, etc.) ist sehr leicht einzustellen.

Konfiguration von fail2ban für Joomla

Die Konfiguration wird am Beispiel eines Plesk basierten Systems auf Basis von Ubuntu 14.04 / 16.04 erklärt.

Damit Joomla die benötigten Logfiles erzeugt, benötigt man nur die Erweiterung "Fail2Ban" von mediahof.de . Dieses kleine Plugin muss lediglich installiert und aktiviert werden. Weitere Konfigurationen sind in Joomla nicht nötig. Dadurch wird ein fehlgeschlagener Loginversuch in die Apache-Fehlerdatei geschrieben. Bei einem Ubuntu-Plesk-System befindet sich diese Datei im Verzeichnis /var/www/vhosts/*domain.tld*/logs , und lautet error_log . Bei alternativen Systemen, wie z.B. CentOS oder OpenSUSE kann dieser Pfad abweichen und muss möglicherweise angepasst werden.

Im zweiten Schritt muss nun fail2ban konfiguriert werden. Dazu loggt man sich per SSH in den Server ein, und wechselt am besten auf den root Nutzer (per "sudo su"). Anschließend wechselt man in das Verzeichnis /etc/fail2ban/filter.d . Hier befinden sich die Filterdateien, die den regulären Ausdruck enthalten, der die benötigte IP aus dem Logfile herausfiltert. Als nächstes erzeugt man in diesem Verzeichnis nun die Datei joomla.conf , mit folgendem Inhalt:

[Definition]
failregex = ^.*\[auth_basic:error\].*\[client :.*\].*$
^.*\[client .*\].* user .* authentication failure.*$

Damit wird fail2ban mitgeteilt, wo genau in der Zeile die IP zu finden ist.

Nun muss noch das sogenannte jail erstellt werden. Dazu betritt man das Verzeichnis /etc/fail2ban/jail.d und erstellt eine Jail-Konfigurationsdatei mit Namen joomla.conf . Der Inhalt dieser Datei ist folgender:

[joomla]
enabled = true
filter = joomla
action = iptables-multiport[name="apache", port="http, https"]
logpath = /var/www/vhosts/*/logs/error_log
/var/www/vhosts/*/logs/*/error_log
bantime = 86400
maxretry = 5

Die Optionen bedeuten folgendes:

enabled - aktivert oder nicht
filter - name des verwendeten Filters
action - was soll passieren, wenn eine IP gesperrt wird. In diesem Fall wird der Zugriff auf den Webserver gesperrt.
logpath - die zu überwachenden Logfiles. In diesem Fall werden die Apache error logs von allen Domains überwacht.
bantime - Die Sperrzeit einer IP
maxretry - Die Anzahl der erlaubten Versuche

Diese Optionen sollten wie oben beschrieben passend sein - können bzw müssen (je nach System) aber angepasst werden.

Als letzten Schritt muss noch fail2ban neu gestartet werden:

service fail2ban restart

Nach dem Neustart ist die neue Jail aktiv, und unerwünschte Brute-Force-Angriffe werden abgeblockt. Um zu prüfen, wie viele IPs bereits geblockt wurden, nutzt man diesen Befehl:

fail2ban-client status joomla

Dieser prüft, wie viele IPs von der Jail joomla geblockt wurden.

Fazit:

Wer eine Joomla Installation betreibt, die unter "Dauerbeschuss" durch Brute-Force-Angriffe liegt, sollte den Einsatz von fail2ban erwägen. Der Vorteil dieser Lösung ist, dass sehr viel weniger Serverressourcen verbraucht werden, als durch eine PHP-basierte Lösung, da die Angreifer bereits auf Betriebssystemebene geblockt werden. Zusätzlich funktioniert diese Lösung nicht nur für Joomla, sondern für jede Anwendung, die eine Logdatei mit fehlgeschlagenen Login-Versuchen erstellt, d.h. diese Lösung ist universal einsetzbar.

2017-03-16