123 lines
4.0 KiB
Markdown
123 lines
4.0 KiB
Markdown
# 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=<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.
|