Erstellt man für Joomla eine Fail2ban-Regel, muss man darauf achten, dass die Error-Logs in /administrator/logs immer vorhanden sind, sonst beendet Fail2ban eventuell seine Dienste, und zwar komplett. Eine leere Datei an völlig anderer Stelle soll dabei unterstützen, diesen Dienst stabil zu halten.
Die Sache ist recht einfach. Die Annahme ist, dass der Webserver den User und die Gruppe www-data benutzt.
cd /var/log/
mkdir ./joomla_temp && cd joomla_temp
touch snakeoil.php
chown www-data:www-data snakeoil.php
chmod 644 snakeoil.php
Es hat sich letztlich herausgestellt, dass es besser ist, die snakeoil-Datei in ein anderes Verzeichnis als /administrator/logs zu stellen, da Joomla den Hang zu haben scheint, die Log-Verzeichnisse nach dem einen oder anderen Update zurückzusetzen und die snakeoil-Datei somit verschwindet, was ein generelles Anhalten des fail2ban-Dienstes zur Folge hat.
Danach wird die entsprechende Filterregel erstellt ...
/etc/fail2ban/filter.d/joomla.conf
[Definition]
failregex = ^.*INFO .*joomlafailure.*(Benutzername|Username).*
^.*INFO .*tokenfailure.*(Authentication failed).*
... und eine jail-datei:
/etc/fail2ban/jail.d/joomla.local
[joomla] enabled = true filter = joomla port = http,https maxretry = xxx findtime = xxx bantime = xxx logpath = [pfad zu joomla]/administrator/logs/*error.php /var/log/joomla_temp/snakeoil.php
Ein beherztes
service fail2ban restart
und voilà, der Dienst läuft.
