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
  1. # Fail2Ban configuration file
  2. #
  3. # Author: Lutz Hillebrand
  4. #
  5. # $Revision: 1 $
  6. #
  7.  
  8. [Definition]
  9.  
  10. # Option:  failregex
  11. # Notes.:  Regex to make it possible to detect brute-force on Typo3
  12. #          failed logon shows image <login-alert-error.gif>
  13. #          request of image is used to detect brute-force
  14. #          Question: Would attackers script load images ?
  15. #          Alternatve:
  16. #          if too many POST /typo3/index.php within a time, that might
  17. #          be a brute force as well
  18. #
  19. #          The host must be matched by a group named "host". The tag "<HOST>" can
  20. #          be used for standard IP/hostname matching and is only an alias for
  21. #          (?:::f{4,6}:)?(?P<host>\S+)
  22. # Values:  TEXT
  23. #
  24. failregex = ^<HOST> -.*GET.*/login-alert-error\.gif
  25.             ^<HOST> -.*POST.*/typo3/index\.php
  26.  
  27.  
  28. # Option:  ignoreregex
  29. # Notes.:  regex to ignore. If this regex matches, the line is ignored.
  30. # Values:  TEXT
  31. #
  32. 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
  1. # Eigene Konfigurationen
  2. # Typo3 Backend absichern
  3. [apache-typo3-backend]
  4. enabled = true
  5. port = http,https
  6. filter = apache-typo3-backend
  7. logpath = /var/log/apache2/*/access.log
  8. maxretry = 7
  9. findtime = 3600
  10. #bantime = 7200
  11. 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!