feat(waf): Alerts — Regelübereinstimmungen in DB + UI — v1.2.77

- Migration 0038: waf_alerts-Tabelle
- AlertWriter (Buffered-Channel → async DB-Write)
- SPOE: MatchedRules → sendAlert() nach ProcessRequestHeaders()
- API: GET /waf/alerts + DELETE /waf/alerts
- WAF-Page: Tabs Domains | Alarme; Alarme-Tabelle mit Rule-ID,
  Severity, Aktion (Detected/Blocked), URI, Client-IP + Purge-Button

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Debian
2026-06-03 10:40:43 +02:00
parent c83bb7b137
commit 220d9d7050
10 changed files with 453 additions and 37 deletions

View File

@@ -1800,6 +1800,30 @@
"customRulesHint": "Rohe SecRule-Direktiven die nach dem CRS eingefügt werden. Können CRS-Regeln überschreiben.",
"defaultHint": "Standard: Nur-Erkennung, Paranoia-Level 1. Erst auf Blocking wechseln, nachdem Alerts geprüft wurden.",
"saveFailed": "WAF-Konfiguration konnte nicht gespeichert werden."
},
"tabs": {
"domains": "Domains",
"alerts": "Alarme"
},
"alerts": {
"total": "Einträge",
"empty": "Noch keine WAF-Alarme. Regelübereinstimmungen erscheinen hier.",
"purge30d": "> 30 Tage löschen",
"purgeConfirm": "Alle Alarme älter als 30 Tage löschen?",
"purged": "Alarme gelöscht.",
"blocked": "Geblockt",
"detected": "Erkannt",
"col": {
"time": "Zeit",
"action": "Aktion",
"hostname": "Domain",
"clientIp": "Client-IP",
"method": "Methode",
"uri": "URI",
"ruleId": "Regel-ID",
"severity": "Schwere",
"msg": "Meldung"
}
}
}
}