Files

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: copytruncate erlaubt 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.