# 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: ```text [YYYY-MM-DD HH:MM:SS] [SECURITY] [EVENT_TYPE] 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`: ```bash 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`: ```bash 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: ```ini [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: ```bash 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: ```text Lines: 12 lines, 0 ignored, 12 matched, 0 missed ``` ### Schritt 4: Fail2Ban neu laden ```bash 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`: ```text /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: ```bash # 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.