Sie möchten Ihre PHP-Anmeldeseite mit Fail2Ban schützen? Das zum Beispiel nach X Fehl-Versuchen die IP-Adresse blockiert wird? Dazu gibt es eine einfache Lösung.

Wenn sich jemand über ein PHP-Formular anmeldet und der Benutzername existiert nicht oder der Benutzer existiert aber das Kennwort ist falsch, fügen Sie einfach folgenden PHP-Code hinzu:

<?php
openlog("myApp", LOG_PID | LOG_PERROR, LOG_LOCAL0);
syslog(LOG_INFO, "php-login: login incorrect: " . "{$_SERVER['REMOTE_ADDR']}");
?>

oder


<?php
openlog("myApp", LOG_PID | LOG_PERROR, LOG_LOCAL0);
syslog(LOG_INFO, "php-login: user not found: " . "{$_SERVER['REMOTE_ADDR']}");
?>

Damit werden fehlerhafte Anmeldeversuche in Ihr Standard-Logfile geschrieben (zum Beispiel /var/log/messages).

Nun benötigen Sie noch 2 Filter für Fail2Ban. Einen für “Benutzer nicht gefunden” und einen für “Benutzer gefunden, aber falsches Kennwort”.

Entsprechende Beispiel-Filter finden Sie hier bei GitHub:

Nun müssen Sie nur noch Ihre Fail2Ban jail.local Datei anpassen bzw. erweitern:

[php-usernotfound]
enabled = true
filter = php-login-usernotfound
maxretry = 3
logpath = /var/log/messages
port = http,https
bantime = 10

[php-wrongpasswd]
enabled = true
filter = php-login-wrongpasswd
maxretry = 3
logpath = /var/log/messages
port = http,https
bantime = 10

Die Werte für maxretry, bantime, etc. sollten Sie natürlich auf Ihre Bedürfnisse anpassen.