Härtungs-Checkliste¶
Wenn die Instanz produktiv geht, diese Liste durcharbeiten. Alles ist optional, aber die meisten Punkte solltest du nicht überspringen. Die Grundhaltung von Vesana ist outbound-only: Der Server hat keine ausgehende Verbindung zu überwachten Maschinen, Agents und Collectors verbinden sich immer von innen nach außen. Das reduziert die Angriffsfläche strukturell — die Punkte unten härten den Server selbst.
Authentifizierung¶
- [ ] 2FA Pflicht für Super-Admin und Tenant-Admin — verfügbare Methoden: TOTP (Authenticator-App wie Aegis/Authy/Google Authenticator) oder WebAuthn (Hardware-Key/Passkey). Backup-Codes sind beim Aktivieren Pflicht.
- [ ] Passwort-Komplexität in Admin-Settings auf hoch
- [ ] JWT-Lebensdauer auf 8–24 h begrenzen (kürzer = häufiger Login, sicherer)
- [ ] Default-Admin-Account umbenennen oder deaktivieren — nicht
admin@example.comlassen - [ ] Login-Rate-Limit verifizieren — Default 10 req/min pro IP für Login und 2FA-Verify, 3 req/min für 2FA-Resend
Tokens¶
- [ ] Agent-Tokens minimal verteilen — nur einer pro Host
- [ ] Collector-API-Keys mit langem Prefix benennen, sodass beim Leak sofort klar ist welcher Tenant
- [ ] Personal-Access-Tokens mit kurzer Lebensdauer (z. B. 90 Tage) und gezieltem Scope
Verschlüsselung¶
- [ ]
FIELD_ENCRYPTION_KEYim Passwort-Manager + Print-Backup im Tresor - [ ] Backup vom Schlüssel separat vom DB-Backup
- [ ] Niemand außer 1–2 Personen sollte den Schlüssel kennen
TLS¶
- [ ] Echtes Cert (Let's-Encrypt oder eigene CA), nicht selbstsigned in Production
- [ ] HSTS aktiv (Default ja)
- [ ] TLS 1.2+ only in nginx-Config
- [ ] A/A+ bei SSL Labs
- [ ] Renewal automatisiert (Let's-Encrypt) oder Kalender-Reminder vor Ablauf
Netzwerk¶
- [ ] Outbound-Whitelist auf dem Server: nur erlaubte Ziele (Registry, Lizenzportal, Push-Dienste der Browser, SMTP)
- [ ] Inbound 80/443 only — alle anderen Ports geschlossen außer evtl. SSH und NSCA. Sollen Agents aus fremden Netzen einliefern: Agent-Gateway aktivieren und stattdessen NUR den Gateway-Port öffentlich freigeben (UI-Port intern/VPN)
- [ ] SSH mit Key-only, nicht Passwort
- [ ] Fail2ban o. ä. auf SSH-Brute-Force
- [ ] Firewall-Regeln dokumentiert und versioniert
API-Replicas und Locking¶
- [ ] Wenn mehrere API-Replicas: Distributed Locks via Redis funktionieren (System-Tab beobachten)
- [ ] Redis-Auth aktiv (
REDIS_PASSWORDgesetzt — Default ja, prüfen)
Container-Isolation¶
- [ ] Non-root bestätigen — API-, Worker-, Receiver- und AI-Service-Container laufen als non-root (
USER app, UID 1000). Einzige bewusste Ausnahme: der Updater-Container bleibt root, weil er den Docker-Socket beschreiben muss, um Updates auszuführen. - [ ] Docker-Socket nicht zusätzlich an andere Container mounten
- [ ] Frontend-Image (nginx) läuft mit eingebautem nginx-User — keine Anpassung nötig
Logging und Monitoring¶
- [ ] Audit-Log aktiv und Retention konfiguriert
- [ ] Log-Tailing extern falls Compliance-relevant (z. B. an SIEM)
- [ ] System-Health-E-Mail-Alarm an Super-Admins
- [ ] Failed-Login-Alerts über einen Eventlog-/Script-Check + Alert-Regel anlegen
Updates¶
- [ ] GUI-Updater funktioniert (Test mit kleinem Update vor erstem Live-Update)
- [ ] Backup vor jedem Update läuft (Default ja, prüfen)
- [ ] Update-Fenster kommuniziert (Statuspage / Wiki)
Backup¶
- [ ] Backup-Sidecar aktiv
- [ ] Off-Site-Kopie (mind. wöchentlich)
- [ ] Restore-Drill mind. 1× pro Quartal
- [ ]
.env-Backup separat
RBAC¶
Vesana ist deny-by-default: Jeder API-Endpunkt verlangt eine explizite Permission — ohne passende Permission gibt es 403, nie ein implizites „darf trotzdem". Vier Basis-Rollen (Super-Admin, Admin, Operator, Viewer) decken die Standardfälle ab; Custom-Roles erlauben granulare Permission-Zusammenstellung darüber hinaus. tenant_access steuert unabhängig davon, welche Mandanten ein User überhaupt sieht (ein Tenant, mehrere, oder alle als Super-Admin) — jede Datenbank-Query ist zusätzlich automatisch nach Tenant gefiltert.
- [ ] Permissions-Inventur — kein User mit mehr als nötig
- [ ] Default-Admin-Account nicht für Alltag verwenden
- [ ] Auditor-Rolle für externe Auditoren (nur Lese-Permissions wie
audit_log.view_tenant) - [ ]
tenant_accessprüfen — Cross-Tenant-Read nur wo wirklich gebraucht (MSP-Rollen)
AI¶
- [ ] Wenn Cloud-Provider: klar sein, was an die API geht
- [ ] AI-Permissions sparsam — nicht jeder User braucht
ai.query - [ ] AI-Sichtbarkeit Toggle in User-Pref erklären (Datenschutz-Wunsch)
Smartphone / Push¶
- [ ] HTTPS ist Pflicht — ohne sicheren Kontext erlaubt kein Browser Installation oder Push
- [ ] Push-Schlüssel (VAPID) sichern — sie gehören zur Instanz und stecken im Backup; nach einem Neuaufbau ohne Backup müssen alle Geräte Push neu aktivieren
Custom-Code (Scripts, Profile)¶
Script-fähige Check-Typen (agent_script, custom, ssh_script, ssh_custom) können beliebigen Code auf überwachten Maschinen ausführen — das ist der sensibelste Punkt im ganzen System und deshalb eigens abgesichert:
- Apply-Scope pro User: Wer Script-Checks anlegen/ändern darf, ist granular einschränkbar — nach Tenant, nach Tag oder auf einzelne Hosts. Ohne eigene Einstellung gilt der Standard der Rolle: Admin darf auf allen erreichbaren Tenants Scripts anwenden, jede andere Rolle nicht (Super-Admins sind nie eingeschränkt). Eine gespeicherte Einstellung ersetzt den Standard — auch „Keine" für einen Admin.
- Reichweite wird gefragt, nicht angenommen: Vor dem Speichern eines Script-Inhalts steht, wie viele Checks daran hängen — man wählt „für alle", „als eigenes Script" (Kopie) oder „nur dieses Gerät". So ändert niemand versehentlich ein von vielen Hosts geteiltes Script.
- Sandbox des Aktiven Collectors: Scripts laufen mit eingeschränkten Capabilities, nicht mit vollen Root-Rechten. Server-interne Adressen (Loopback, Docker-Netze) sind für Checks nicht-privilegierter Nutzer gesperrt, und pro Tenant lässt sich freigeben, ob Netzwerk-Checks bzw. eigene Plugins über den Server laufen dürfen (Admin → Agents & Collectors → Active-Checker, ab v1.9.437).
Checkliste:
- [ ]
script.createnicht für Viewer/Operator - [ ] Apply-Scope pro User sinnvoll eingeschränkt (nicht pauschal „alle Tenants")
- [ ] Custom-Scripts vor Roll-out auf Test-Maschine prüfen
- [ ] Profile-Imports aus unbekannter Quelle vorsichtig
- [ ] Policies, die Scripts ausrollen — nur Super-Admin erlaubt (systemseitig erzwungen, nicht konfigurierbar)
Sicherheits-Updates¶
- [ ] CVE-Feeds beobachten (Postgres, Redis, FastAPI, React)
- [ ] Docker-Images regelmäßig pullen (GUI-Updater macht das)
Dokumentation für Operations¶
- [ ] Runbooks im Wiki — was tun bei XYZ
- [ ] Kontaktliste für Eskalationen (im Wiki)
- [ ] Status-Page für externe Kommunikation
- [ ] Ablage
FIELD_ENCRYPTION_KEYdokumentiert (wer hat Zugriff)
Compliance-spezifisch¶
| Standard | Was speziell |
|---|---|
| ISO 27001 | Audit-Log + 2FA + Backup-Drill ausreichend für die meisten Audits |
| DSGVO | klar: keine personenbezogenen Daten überwacht (sondern Geräte). Login-Daten ja → Auftragsverarbeitung-Vertrag mit Anbieter |
| HIPAA | Cloud-AI ausschalten oder Anbieter mit BAA wählen |
| PCI | Vesana ist out-of-scope wenn nicht in Card-Data-Pfad — kann aber beim Monitoring helfen |