Security Hardening: Proaktive Kontosperren, Fail2Ban-Integration, SecurityLogger, Alerting und API-Schutz

This commit is contained in:
Deploymentcenter Bot
2026-09-08 11:45:04 +02:00
parent 087f4392a9
commit edea46e342
17 changed files with 927 additions and 169 deletions
+37
View File
@@ -31,6 +31,8 @@ final class WebhookDispatcher
'monitor.down',
'monitor.recovered',
'release.published',
'security.lockout',
'security.attack',
];
private const TIMEOUT_SECONDS = 4;
@@ -67,6 +69,41 @@ final class WebhookDispatcher
'Nach Zustand' => $payload['to_state'] ?? 'down',
]
);
} elseif ($event === 'security.lockout') {
RocketChatNotifier::sendAlert(
$db,
'Benutzerkonto vorübergehend gesperrt',
sprintf(
'Das Konto "%s" wurde nach wiederholten Fehlversuchen von IP %s für %d Minute(n) gesperrt.',
$payload['username'] ?? 'unbekannt',
$payload['ip'] ?? 'unbekannt',
(int)($payload['duration_minutes'] ?? 15)
),
'alarm',
[
'Benutzer' => $payload['username'] ?? 'unbekannt',
'IP-Adresse' => $payload['ip'] ?? 'unbekannt',
'Sperrdauer' => ($payload['duration_minutes'] ?? 15) . ' Min',
'Zeitpunkt' => gmdate('Y-m-d H:i:s') . ' UTC',
]
);
} elseif ($event === 'security.attack') {
RocketChatNotifier::sendAlert(
$db,
'Sicherheitsalarm: Brute-Force-Angriff erkannt',
sprintf(
'Verdächtige Aktivität von IP %s: %s',
$payload['ip'] ?? 'unbekannt',
$payload['details'] ?? 'Wiederholte Fehlversuche'
),
'alarm',
[
'IP-Adresse' => $payload['ip'] ?? 'unbekannt',
'Ziel / Pfad' => $payload['target'] ?? 'Login / API',
'Typ' => $payload['type'] ?? 'Brute-Force',
'Zeitpunkt' => gmdate('Y-m-d H:i:s') . ' UTC',
]
);
}
if (self::$dispatchedThisRequest >= self::MAX_TARGETS) {