# Changelog Alle nennenswerten Änderungen an Clusev. Format nach [Keep a Changelog](https://keepachangelog.com), Versionierung nach [SemVer](https://semver.org). **Release-Prozess:** Feature-Commits sammeln sich auf dem Branch. Ist ein Stand reif, wird er nach `main` gemerged, als `vX.Y.Z` getaggt und hier unter einer eigenen Versionsüberschrift dokumentiert. Nutzer beziehen ausschließlich getaggte Releases (Kanal `stable`, optional `beta`) — niemals Entwicklungs-Builds. ## [Unreleased] _Keine offenen Änderungen — der nächste Stand wird hier gesammelt und als `vX.Y.Z` getaggt._ ## [0.2.1] - 2026-06-13 Verfeinerungen an 0.2.0: vollautomatisches TLS ohne sichtbare Konfiguration und einheitliche Buttons. ### Geändert - **TLS ist vollautomatisch.** Caddy stellt das Zertifikat aus, erneuert es und leitet HTTP→HTTPS um — ohne manuelle Schritte. Die System-Seite zeigt nur noch den **Status** (Domain, Zugriffsadresse) statt der erzeugten Caddy-Konfiguration und des `caddy reload`-Befehls. Die Panel-Domain ist eine **Installations-Entscheidung** (`APP_DOMAIN`) und bleibt damit konsistent mit URL, WebSocket (wss) und Cookie-Sicherheit; zum Ändern `install.sh` mit der neuen Domain erneut ausführen. - Härtungs-Checkliste: alle Aktions-Buttons im selben Stil (einheitlich `secondary`, mit Rahmen) statt zustandsabhängig mal mit, mal ohne Rahmen. ### Entfernt - Laufzeit-Override der App-URL aus der Datenbank und das dashboard-seitige Bearbeiten von Domain/E-Mail (konnte URL/WebSocket/Cookies nicht konsistent zur Laufzeit umstellen). Eine Migration entfernt die leeren Alt-Einträge; ein real konfigurierter Wert bleibt als Verlauf erhalten. **Upgrade-Hinweis:** eine zuvor im Dashboard gesetzte Domain bitte einmalig über `install.sh` setzen. ## [0.2.0] - 2026-06-13 Mehr-Betriebssystem-Verwaltung, echte Firewall- und fail2ban-Steuerung aus dem Dashboard sowie eine Tastatur-/Befehls-Bedienung. ### Hinzugefügt - **OS-Abstraktion**: Updates, Härtung und Firewall laufen jetzt über **apt, dnf und zypper** (Debian/Ubuntu, RHEL/Fedora/Rocky/Alma, openSUSE). Das Betriebssystem wird erkannt und auf der Server-Detailseite angezeigt (Paketverwaltung/Firewall). Arch und Alpine werden erkannt; nicht unterstützte Funktionen werden mit deutschem Hinweis sauber deaktiviert statt fehlzuschlagen. - **Firewall-Regeln (UFW)**: Regeln ansehen, hinzufügen und löschen samt Standard-Anzeige — mit Aussperr-Schutz (SSH-Regeln/-Port, deny ohne Port). firewalld wird nur angezeigt (Laufzeit aller aktiven Zonen inkl. Rich Rules); Regelverwaltung bleibt vorerst UFW. - **fail2ban-Status**: Jails mit Zählern, **gebannte IPs sehen und entsperren**, IP manuell sperren (R5-Dialog, Aussperr-Schutz für Loopback + eigenen Zugang) und **Whitelist (ignoreip)** verwalten. - **Befehls-Palette (Strg/⌘-K)** + Tastenkürzel: Schnell-Navigation (Leader „g“), Seitensuche („/“), Hilfe („?“). ### Geändert - System-Updates verwenden je Distribution den passenden Paketmanager (Audit-Aktion `system.package_upgrade`). - fail2ban-Tuning und -Whitelist liegen in getrennten Drop-ins, damit Änderungen sich nicht gegenseitig überschreiben; das frühere Einzel-Drop-in wird migriert. - Server-Detailseite zeigt erkanntes System, Paketverwaltung und Firewall-Werkzeug. - System-Seite erklärt jetzt, warum TLS über Caddy terminiert wird. ### Sicherheit - Firewall: race-freies Löschen per Regel-Spezifikation (keine Regelnummern), Whitelisting gegen Befehls-Injection, firewalld-Lockout-Schutz (Ports vor dem Start in der permanenten Konfiguration). - fail2ban: kanonischer (inet_pton) Schutz gegen das Sperren des eigenen Zugangs, ignoreip wird verbatim erhalten (inkl. Hostnames/Fortsetzungszeilen). ## [0.1.1] - 2026-06-13 Wartungs-Release: vollständige Code-Auditierung, Entfernung von totem Code und ein behobenes Open-Redirect. Keine funktionalen Änderungen für Nutzer. ### Behoben - Open-Redirect im Server-Switcher: ein manipulierter `Referer` konnte die Weiterleitung nach dem Server-Wechsel auf eine fremde Adresse lenken. Die Weiterleitung wird jetzt auf einen **gleich-origin** relativen Pfad reduziert (fremde Schemata wie `javascript:`/`data:`, andere Hosts/Ports sowie protokoll-relative Tricks `//host` / `/\host` werden abgewiesen). - SSH-Zugang: eine Passphrase wurde unabhängig vom Auth-Typ gespeichert; sie wird jetzt nur noch bei Schlüssel-Authentifizierung hinterlegt. ### Geändert - Datei-Manager + Editor verwenden ein eigenes `file`-Symbol statt des Audit-Symbols (semantisch korrekt). - Code-Hygiene: toten Code entfernt (ungenutzte `FirewallService`-Methoden `status/allow/deny`, `Server::auditEvents()`, `SshCredential::scopeActive()`, ungenutztes `bell`-Icon), veraltete Doc-Blöcke/Kommentare korrigiert, Exceptions sauber importiert, base64-Argument im Sudo-Pfad defensiv gequotet, Null-sichere Nutzerabfrage in den Einstellungen. Pint + Codex-Review sauber. ## [0.1.0] - 2026-06-13 Erste geschnittene Version — die komplette v1-Basis inklusive Server- und Panel-Härtung als ein Release. ### Hinzugefügt - Dashboard mit Live-Sparklines und poll-getriebenem Dual-Chart (KPIs + Tabelle). - Server-Index + Detailseite, Dienste (systemd: Start/Stop/Restart + Journal), Datei-Manager (SFTP: Up-/Download, Editor), Audit-Log. - SSH-Schicht über phpseclib (exec + SFTP) mit Host-Key-Pinning (TOFU) und Multi-Server-Switcher samt Fleet-Kontext. - Echte Metriken (CPU/RAM/Disk/Load) inkl. Absolutwerten über Reverb. - Authentifizierung + 2FA (TOTP) mit erzwungenem Onboarding. - R5-Bestätigungsmodals (wire-elements/modal) für destruktive Aktionen. - System-Seite mit Domain & TLS (Caddy Auto-TLS) und Release-Kanal. - Echte Versions-Seite, die Version, Build-Hash und dieses Änderungsprotokoll liest. - Deploy: `install.sh` + Caddy (Auto-TLS) + Produktions-Härtung. - Selbst-gehostete Fonts (kein CDN), Split-Brand Login/2FA. ### Geändert - Dienst-Steuerung läuft über das hinterlegte Sudo-Passwort (`sudo -S`) statt nur passwortlosem sudo — Start/Stop/Restart + Journal funktionieren live. - Lazy-Loading der Seiten (Skeletons), normalisierte Buttons + Spinner, Detailseiten- und Einstellungs-Redesign, Schlüsselerzeugung. - Vollständige Regel-Auditierung (R1–R14), neue Regel R14 (lokale Fonts). ### Behoben - Datei-Editor: Klick löste einen Alpine-Fehler aus (`@js()` kompiliert nicht in Komponenten-Attributen) — auf Index-Lookups umgestellt. - Adversarial Review der SSH-Schicht (Escaping, Parser, Host-Key-Pinning). - 500 durch `@disabled` auf ``; Modal über dem Backdrop; poll-getriebene Metriken (Chart + Gauges) statt fiktiver Fleet-Daten; 2FA-Setup-QR als ``. - fail2ban/apt-Härtung schlug fehl, weil der 12s-SSH-Timeout den Paket-Install abbrach — langer Timeout für apt-Aktionen. ### Sicherheit - Server-Härtung aus dem Dashboard (Root-/Passwort-Login, fail2ban, UFW, Auto-Updates) mit Befehls-Vorschau, Bestätigung und Aussperr-Schutz. - Verwaltung hinterlegter SSH-Zugänge (Name, Sperren, Löschen); der Vault verweigert gesperrte Zugänge. Dienst-Steuerung über hinterlegtes Sudo-Passwort. - Panel-Selbst-Härtung: Security-Header + umgebungsbewusste CSP, 2FA-Brute-Force- Drossel, Session-Cookie-Härtung. - Release-/Versionierungsmodell: echte semantische Versionen + Git-Tags, Changelog pro Version, Kanäle `stable`/`beta` (kein nutzer-seitiges `dev`). [Unreleased]: https://git.bave.dev/boban/clusev/compare/v0.2.1...HEAD [0.2.1]: https://git.bave.dev/boban/clusev/compare/v0.2.0...v0.2.1 [0.2.0]: https://git.bave.dev/boban/clusev/compare/v0.1.1...v0.2.0 [0.1.1]: https://git.bave.dev/boban/clusev/compare/v0.1.0...v0.1.1 [0.1.0]: https://git.bave.dev/boban/clusev/releases/tag/v0.1.0