4.0 KiB
Fail2Ban Integration für das Deploymentcenter
Das Deploymentcenter führt alle sicherheitsrelevanten Vorfälle (fehlgeschlagene WebUI-Logins, Kontosperren, IP-Drosselungen, ungültige API-Tokens und Rate-Limit-Verstöße) in einem dedizierten, maschinenlesbaren Sicherheitslog:
var/log/security.log
Im Gegensatz zu den anwendungsinternen Logs (var/log/dc-YYYY-MM-DD.log) behält diese Datei einen stabilen Dateinamen, sodass Log-Watcher wie Fail2Ban sie unterbrechungsfrei auswerten können.
1. Logformat
Jeder Eintrag folgt dem festen Schema:
[YYYY-MM-DD HH:MM:SS] [SECURITY] [EVENT_TYPE] ip=<IP> key="val" ...
Typische Ereignisse:
| Event-Typ | Bedeutung | Beispielzeile |
|---|---|---|
AUTH_FAIL |
Falsches Passwort oder Benutzer existiert nicht | [2026-09-08 11:30:00] [SECURITY] [AUTH_FAIL] ip=198.51.100.2 user="admin" reason="invalid_password" failures=1 |
ACCOUNT_LOCKED |
Kontosperre nach N Fehlversuchen |
[2026-09-08 11:30:15] [SECURITY] [ACCOUNT_LOCKED] ip=198.51.100.2 user="admin" duration=900 reason="too_many_failed_logins" |
IP_LOCKED |
IP-Sperre nach 10 Fehlversuchen | [2026-09-08 11:30:20] [SECURITY] [IP_LOCKED] ip=198.51.100.2 failures=10 duration=900 |
API_AUTH_FAIL |
Ungültiges Bearer-/Agent-Token übermittelt | [2026-09-08 11:30:25] [SECURITY] [API_AUTH_FAIL] ip=198.51.100.2 path="/api/bugtracker/v1/projects" reason="token_rejected" |
API_BRUTE_FORCE |
Schwellenwert ungültiger Tokens pro IP überschritten | [2026-09-08 11:30:30] [SECURITY] [API_BRUTE_FORCE] ip=198.51.100.2 path="/api/bugtracker/v1/projects" reason="too_many_invalid_tokens" |
RATE_LIMITED |
Endpunkt-Drosselung ausgelöst | [2026-09-08 11:30:35] [SECURITY] [RATE_LIMITED] ip=198.51.100.2 bucket="setup_login" limit=10 count=11 |
2. Server-Installation & Konfiguration
Schritt 1: Filter-Definition hinterlegen
Kopiere die Filterdatei nach /etc/fail2ban/filter.d/deploymentcenter.conf:
sudo cp config/fail2ban/filter.d/deploymentcenter.conf /etc/fail2ban/filter.d/deploymentcenter.conf
Schritt 2: Jail aktivieren
Kopiere die Jail-Vorlage nach /etc/fail2ban/jail.d/deploymentcenter.local:
sudo cp config/fail2ban/jail.d/deploymentcenter.local /etc/fail2ban/jail.d/deploymentcenter.local
Passe in /etc/fail2ban/jail.d/deploymentcenter.local den Pfad zur Logdatei an deine Webroot an:
[deploymentcenter]
enabled = true
port = http,https
filter = deploymentcenter
logpath = /var/www/deploymentcenter/var/log/security.log
maxretry = 5
findtime = 600
bantime = 3600
Schritt 3: Filter testen
Mit fail2ban-regex kann die Erkennung direkt gegen das Log geprüft werden:
sudo fail2ban-regex /var/www/deploymentcenter/var/log/security.log /etc/fail2ban/filter.d/deploymentcenter.conf
Die Ausgabe sollte die erkannten Treffer und die extrahierten IP-Adressen anzeigen:
Lines: 12 lines, 0 ignored, 12 matched, 0 missed
Schritt 4: Fail2Ban neu laden
sudo fail2ban-client reload
sudo fail2ban-client status deploymentcenter
3. Logrotate für security.log
Damit security.log nicht unbegrenzt wächst, wird eine Logrotate-Konfiguration empfohlen:
/etc/logrotate.d/deploymentcenter-security:
/var/www/deploymentcenter/var/log/security.log {
weekly
rotate 12
missingok
notifempty
compress
delaycompress
copytruncate
}
Hinweis:
copytruncateerlaubt das Rotieren, ohne dass der PHP-Prozess neu gestartet werden muss oder Dateideskriptoren verloren gehen.
4. Manuelle Entsperrung (Unban)
Wurde eine IP fälschlicherweise gebannt, kann sie administrativ freigegeben werden:
# Aktuellen Status und gebannte IPs ansehen:
sudo fail2ban-client status deploymentcenter
# IP freigeben:
sudo fail2ban-client set deploymentcenter unbanip 198.51.100.2
Parallel dazu kann ein gesperrtes Benutzerkonto in der Verwaltungsoberfläche des Deploymentcenters unter System → Benutzer jederzeit mit einem Klick auf 🔓 Entsperren wieder freigeschaltet werden.