clusev/resources/views/livewire
boban e792e9a3af feat(fail2ban): jail status, banned-IP list + unban, manual ban, whitelist
Addresses "ich sehe nicht welche IPs gebannt sind / entsperren / whitelist". The
server-detail page gains a "fail2ban-Status" panel.

New Fail2banService (owns all fail2ban I/O):
- status(): jails with currently/total failed+banned + the banned IP list, plus the
  whitelist; sentinel-guarded, and a CLIENT_OK marker so an active service whose
  fail2ban-client query fails is reported as a read error, not "0 jails".
- unban() (idempotent: "not banned" = success), manual ban() GUARDED against loopback
  (whole 127.0.0.0/8 + ::1) and Clusev's own SSH source (canonical inet_pton compare).
- readConfig()/writeTuning()/writeIgnoreip(): tuning and whitelist live in SEPARATE
  zz- drop-ins and each writes only its own keys, so a whitelist change can never
  rewrite the ban policy (and vice-versa). The legacy single-file zz-clusev.local is
  removed on tuning save (migration). ignoreip is preserved VERBATIM (hostnames/CIDRs,
  continuation lines) — loopback always re-seeded; add/remove report no-ops so the
  audit only records real changes.

UI: jails + banned IPs each with "Entsperren" (direct, audited), whitelist editor
(add/remove, audited), "IP sperren" via an R5 modal (modals.fail2ban-ban). Jail/IP
args are Js::from()-encoded (remote-sourced, injection-safe). Direct handlers catch
SSH failures. Tuning modal migrated to Fail2banService.writeTuning.

MaintenanceService slimmed to package updates only (fail2ban moved out).

Pint clean; Codex review clean (IPv6 guard, verbatim ignoreip, decoupled drop-ins,
legacy migration, read-error detection all hardened); R12 — server-detail HTTP 200,
0 console errors, fail2ban panel + jail + whitelist render.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 20:27:55 +02:00
..
audit feat: v1 pages — servers (index + details), services, files, audit + SSH layer 2026-06-12 06:33:59 +02:00
auth fix(ux): editor click bug (@js→index), self-hosted fonts, split-brand auth, R14 2026-06-13 01:16:31 +02:00
files chore(audit): full code sweep — fix open-redirect, drop dead code, clean docs 2026-06-13 12:54:26 +02:00
modals feat(fail2ban): jail status, banned-IP list + unban, manual ban, whitelist 2026-06-13 20:27:55 +02:00
servers feat(fail2ban): jail status, banned-IP list + unban, manual ban, whitelist 2026-06-13 20:27:55 +02:00
services fix(ux): editor click bug (@js→index), self-hosted fonts, split-brand auth, R14 2026-06-13 01:16:31 +02:00
settings feat(ux): real metrics+context, working file manager, settings redesign, EN routes 2026-06-13 00:32:05 +02:00
system feat: add-server, apt updates, fail2ban config; clean modals; drop storage internals 2026-06-13 12:19:55 +02:00
versions fix+feat(release/security): apt timeout, real version/release model, domain in DB not .env, R15 2026-06-13 03:06:35 +02:00
dashboard.blade.php feat(versions)+fix: password-sudo service control, honest login, real versions page 2026-06-13 01:43:48 +02:00
server-switcher.blade.php feat: multi-server switcher + fleet context 2026-06-12 13:45:40 +02:00