=', now()->subDay())->count(); $blocked24h = SecurityEvent::where('occurred_at', '>=', now()->subDay())->where('blocked', true)->count(); $highEvents = SecurityEvent::query() ->whereIn('severity', ['high', 'critical']) ->orderByDesc('occurred_at') ->limit(8) ->get(); $feedEvents = SecurityEvent::query() ->orderByDesc('occurred_at') ->limit(12) ->get(); $certs = Certificate::query() ->with('site') ->orderBy('expires_at') ->limit(10) ->get(); $totalMembers = TeamMember::count() ?: 1; $with2fa = TeamMember::where('two_fa_enabled', true)->count(); return [ 'eventsTotal' => $events24h, 'blockedCount' => $blocked24h, 'advisories' => $highEvents, 'feedEvents' => $feedEvents, 'certs' => $certs, 'twoFaCoverage' => (int) round($with2fa / $totalMembers * 100), 'rulesActive' => 42, 'sslExpiringSoon' => Certificate::where('expires_at', '<=', now()->addDays(30))->count(), ]; } }; ?>

Sicherheit

{{ $blockedCount }} blockiert / 24h · {{ $advisories->count() }} advisories
firewall aktiv
Blockiert / 24h
{{ $blockedCount }}
↑ brute-force trend
Firewall Rules
{{ $rulesActive }}
aktiv
SSL läuft bald ab
{{ $sslExpiringSoon }}
in den nächsten 30 Tagen
2FA Coverage
{{ $twoFaCoverage }}%
Team mit 2FA
@if ($advisories->isNotEmpty())

Offene Advisories

{{ $advisories->count() }} aktiv
@foreach ($advisories as $a)
{{ $a->message ?? ucfirst(str_replace('_', ' ', $a->type)) }}
{{ strtoupper($a->severity) }} · {{ $a->source_ip ?? '—' }} · {{ $a->occurred_at?->diffForHumans() }}
@endforeach
@endif

Threat Feed

live
@forelse ($feedEvents as $e)
{{ $e->message ?? ucfirst(str_replace('_', ' ', $e->type)) }}
{{ $e->source_ip ?? '—' }} · {{ $e->country ?? '—' }} · {{ $e->occurred_at?->diffForHumans() }}
@empty
Keine Events.
@endforelse

SSL Zertifikate

{{ $certs->count() }} nächste
@forelse ($certs as $c) @empty @endforelse
DomainAusstellerTageStatus
{{ $c->domain }} {{ $c->issuer }} {{ $c->days_to_expiry }}d @if ($c->status === 'critical') kritisch @elseif ($c->status === 'warning') bald ablauf @else ok @endif
Keine Zertifikate.