Schon länger habe ich überlegt, wie ich ein Typo3-Backend mit relative geringem Aufwand absichern kann, ohne mir die Funktionalität einzuschränken.
In einigen Foren und Anleitungen habe ich gelesen, wie man den Typo3-Ordner umbenennen kann, damit er nicht mehr dem Standard entspricht. Dazu mussten aber auch einige Änderungen im Quellcode erfolgen, so dass man beim nächsten Update die Änderungen wieder nachholen musste oder aufgeschmissen war.
Eigene Versuche mit .htaccess-Dateien den Zugriff auf diesen Ordner auf einen bestimmten IP-Adress-Bereich einzuschränken haben gezeigt, dass dann einige Extensions nicht mehr funktioniert haben. Diese werden ja vom jeweiligen Besucher aus aufgerufen. Funktioniert also auch nicht (wirklich).
Im Mittenwald-Forum unter www.typo3.net habe ich folgenden Beitrag gefunden. Darin wird von Lutz Hillebrand eine, meines Erachtens, sehr gute Möglichkeit beschrieben ein Typo3 Backend einfach und effektiv mit "fail2ban" abzusichern.
Benötigte Pakete
Es wird lediglich ein Paket unter Debian benötigt, dass aber ggf. weitere Abhängigkeiten (python, iptables) mit installiert:
aptitude install fail2ban
Was macht fail2ban?
Die Arbeitsweise ist so einfach wie genial. Fail2ban scannt konfigurierte Logfiles nach bestimmten Auffälligkeiten. Treten von diesen Auffälligkeiten zu viele in einem definierten Zeitraum auf, sperrt er die Quell-IP mit Hilfe von Firewall-Regeln. Weitere Details kann im Manual herausfinden.
Konfiguration fail2ban
Filter erstellen
Zuerst müssen wir uns mal einen Filter erstellen, in dem wir definieren, worauf fail2ban reagieren soll und was er ggf. ignorieren soll. Die Datei heißt bei mir "apache-typo3-backend.conf" und liegt im Standard-Ordner "/etc/fail2ban/filter.d" zusammen mit den Standard-Filter-Dateien:
cd /etc/fail2ban
ls -alh filter.d/apache-*
-rw-r--r-- 1 root root 704 27. Feb 2008 filter.d/apache-auth.conf
-rw-r--r-- 1 root root 2,4K 5. Mär 2008 filter.d/apache-badbots.conf
-rw-r--r-- 1 root root 756 5. Feb 2009 filter.d/apache-noscript.conf
-rw-r--r-- 1 root root 444 5. Mär 2008 filter.d/apache-overflows.conf
-rw-r--r-- 1 root root 938 24. Feb 20:57 filter.d/apache-typo3-backend.conf
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- # Fail2Ban configuration file
- #
- # Author: Lutz Hillebrand
- #
- # $Revision: 1 $
- #
- [Definition]
- # Option: failregex
- # Notes.: Regex to make it possible to detect brute-force on Typo3
- # failed logon shows image <login-alert-error.gif>
- # request of image is used to detect brute-force
- # Question: Would attackers script load images ?
- # Alternatve:
- # if too many POST /typo3/index.php within a time, that might
- # be a brute force as well
- #
- # The host must be matched by a group named "host". The tag "<HOST>" can
- # be used for standard IP/hostname matching and is only an alias for
- # (?:::f{4,6}:)?(?P<host>\S+)
- # Values: TEXT
- #
- failregex = ^<HOST> -.*GET.*/login-alert-error\.gif
- ^<HOST> -.*POST.*/typo3/index\.php
- # Option: ignoreregex
- # Notes.: regex to ignore. If this regex matches, the line is ignored.
- # Values: TEXT
- #
- ignoreregex =
"Lokale Sperre" einrichten
Jetzt muss fail2ban noch mitgeteilt werden, dass ein zusätzlicher Filter existiert und wass passieren soll, wenn dieser Ergebnisse liefert. Die Paket-Konfiguration erfolgt in der jail.conf, die aber nicht geändert werden sollte! Ansonsten ist man nur bedingt updatefähig. Wie auch darin angegeben, sollte die lokale Konfiguration in der Datei jail.local erfolgen. Diese enthält bei mir Folgendes:
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- # Eigene Konfigurationen
- # Typo3 Backend absichern
- [apache-typo3-backend]
- enabled = true
- port = http,https
- filter = apache-typo3-backend
- logpath = /var/log/apache2/*/access.log
- maxretry = 7
- findtime = 3600
- #bantime = 7200
- bantime = 300
Warum und wie funktioniert das?
Fail2ban prüft die angegebene Protokolldateien (hier alle Dateien namens access.log in allen Unterordnern von /var/log/apache) in Sekundenabständen nach Veränderungen. Wenn eine Anmeldung stattfindet, dann wird immer kurzfristig die Seite "/typo3/index.php" aufgerufen und von dort aus werden die Login-Parameter gePOSTet. Wenn die Anmeldung fehlschlägt, wird erstens das Bild login-alert-error.gif angezeigt und zweitens erneut versucht die Parameter zu posten.
In der Konfiguration ist festgelegt, dass diese Ereignisse 7 mal innerhalb einer Stunde (3600sec) auftreten dürfen. Danach wird die entsprechende IP-Adresse für 2 Stunden (7200sec) verbannt.
Die Parameter maxretry, findtime, bantime sollte jeder nach Lust und Laune einstellen.
Allerdings:
Werte <4 werden Ärger machen, da beim ersten Fehlversuch sowohl das Bild als auch das Script geladen werden. Dadurch sind die ersten 2 Ereignisse von fail2ban schon mit einem Fehlversuch aufgebraucht! Den dritten Versuch braucht man zu zweiten Anmeldung.
Empfehlung: maxretry >= 5 einstellen!