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.