Files
Homelab--Bratonein-Kontroll…/Kapitel 6/Tutorial.md

11 KiB
Raw Blame History

🛠️ Kapitel 6 Vaultwarden (Docker, Debian12LXC) Tutorial

🎯 Ziel Vaultwarden in einem Debian12LXC per Docker + Compose bereitstellen, hinter Nginx Proxy Manager (NPM) mit HTTPS und WebSockets veröffentlichen; Registrierungen deaktivieren, AdminToken setzen und Backups ermöglichen.

🧩 Was wir aufbauen

  • Image: vaultwarden/server:latest
  • Ports: 8000:80 (Web/API), 3012:3012 (WebSocket/LiveSync)
  • Persistenz: ./data:/data → Hostpfad /opt/vaultwarden/data
  • Konfig per .env: DOMAIN, ADMIN_TOKEN, SIGNUPS_ALLOWED=false (+ optional SMTP_*)
  • ReverseProxy (NPM): Proxy Host für pass.DEINEDOMAIN.tld, Custom Location /notifications/hub → 3012, SSL (Lets Encrypt)

Voraussetzungen (konkret)

  • LXC: Debian 12 (Bookworm) erstellt nach Grundkapitel Erster LXC Grundsetup & SSH (hier nur Verweis)
  • Specs: 1 vCPU · 512MB1GB RAM (512MB empfohlen) · 48GB Disk · statische IPv4 (z.B. 10.0.0.16/24), IPv6 optional
  • NPM läuft (separater LXC), Subdomain pass.DEINEDOMAIN.tld zeigt auf NPM (DNS A/AAAA gesetzt)
  • OutboundInternet im LXC erreichbar; Hostports 8000/3012 frei

🔁 Platzhalter

  • <VW_IP> = IP des VaultwardenLXC (z.B. 10.0.0.16)
  • DEINE-DOMAIN.tld = deine echte Domain

— — —

1 System vorbereiten

apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-release

👉 ca-certificates/curl/gnupg werden für das DockerRepo benötigt.

— — —

2 Docker & Compose installieren

mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

Prüfen:

docker --version && docker compose version

👉 Offizielle Pakete, Compose als Plugin integriert.

— — —

3 Projekt anlegen & .env erstellen

mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
mkdir -p data
openssl rand -base64 48   # Token erzeugen und kopieren
nano .env

Inhalt (.env) Platzhalter ersetzen, Token einfügen:

DOMAIN=https://pass.DEINE-DOMAIN.tld
ADMIN_TOKEN=HIER_DEIN_ERZEUGTES_TOKEN_EINFÜGEN
SIGNUPS_ALLOWED=false
# Optional SMTP (nur falls Mailversand gewünscht)
# SMTP_HOST=smtp.example.com
# SMTP_FROM=pass@example.com
# SMTP_PORT=587
# SMTP_SECURITY=starttls
# SMTP_USERNAME=user
# SMTP_PASSWORD=deinPasswort

Speichern: Strg+O, Enter → Beenden: Strg+X. 👉 DOMAIN zwingend https; ADMIN_TOKEN schützt /admin; Signups sind zu.

— — —

4 docker-compose.yml schreiben

nano docker-compose.yml

Inhalt einfügen:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    env_file: .env
    environment:
      - DOMAIN=${DOMAIN}
    volumes:
      - ./data:/data
    ports:
      - "8000:80"     # Web / API
      - "3012:3012"   # WebSocket (Live Sync)

Speichern: Strg+O, EnterStrg+X. 👉 ./data:/data = Persistenz auf dem Host.

— — —

5 Container starten & Logs prüfen

docker compose up -d
docker compose logs -f --tail=50 vaultwarden

Erwartet: Meldungen wie Rocket has launched…. 👉 Erst prüfen, dann veröffentlichen.

— — —

6 NPM einrichten (Proxy, WebSockets, SSL) Proxy Host:

  • Domain Names: pass.DEINE-DOMAIN.tld
  • Scheme: http
  • Forward Host/IP: <VW_IP>
  • Forward Port: 8000
  • Block Common Exploits: ✔️ · Websockets Support: ✔️

Custom Location:

  • Location: /notifications/hub
  • Forward Host/IP: <VW_IP>
  • Forward Port: 3012
  • Websockets Support: ✔️

SSLTab:

  • Request a new SSL Certificate (Lets Encrypt)
  • Force SSL, HTTP/2, HSTS: ✔️

Test: https://pass.DEINE-DOMAIN.tld → Loginseite sichtbar; LiveÄnderung zwischen zwei Clients testen. 👉 Die CustomLocation leitet den WebSocketKanal (LiveSync) korrekt weiter.

— — —

7 AdminBackend (GUI), AdminToken absichern & erster Nutzer Öffne https://pass.DEINE-DOMAIN.tld/admin und melde dich mit deinem bisherigen AdminToken an (zunächst im Klartext aus .env).

A) AdminToken auf Argon2 PHC umstellen (GUI, sicher)

  1. Hash erzeugen (nimmt dein künftiges AdminPasswort entgegen → zweimal eingeben):

    # Container-Name ist im Tutorial 'vaultwarden'
    docker exec -it vaultwarden /vaultwarden hash --preset owasp
    

    Kopiere den kompletten PHCString ab $argon2id$… (ohne zusätzliche Anführungszeichen).

  2. Im AdminPanel speichern:

    • Admin → SettingsGeneral → Feld “Admin token / Argon2 PHC”
    • PHCString einfügen → Save.
  3. Konflikte vermeiden: Entferne das alte ADMIN_TOKEN aus der .env (wir nutzen künftig die GUIKonfig/config.json).

    cd /opt/vaultwarden
    sed -i '/^ADMIN_TOKEN=/d' .env
    docker compose restart vaultwarden
    
  4. Prüfen:

    docker compose logs --tail=100 vaultwarden | grep -F "plain text `ADMIN_TOKEN`" || echo "✅ AdminToken ist als Argon2 PHC aktiv"
    

    LoginHinweis: Ab jetzt loggst du dich im AdminBereich mit dem KlartextPasswort ein, das du beim hash eingegeben hast (nicht mit dem langen PHCString!).

B) Ersten Benutzer per GUI anlegen (ohne SMTP)

  1. Admin → Settings → GeneralAllow new signups einschaltenSave.

  2. In neuem Tab https://pass.DEINE-DOMAIN.tld/#/register öffnen → Benutzer anlegen → anmelden.

  3. Admin → Allow new signups wieder ausschaltenSave.

    Mit SMTP kannst du stattdessen Admin → Users → Invitations nutzen (EinladungsMail).

C) Sicherheit abrunden

  • Eigenes Benutzerkonto → Settings/Security2FA (TOTP oder FIDO2/YubiKey) aktivieren.
  • Optional: SMTP in AdminPanel setzen und Testmail senden.

— — —

8 Backup (Basis)

cd /opt/vaultwarden
# optional: kurz stoppen für maximale Konsistenz
# docker compose stop vaultwarden

tar -czf /root/vaultwarden-backup-$(date +%F).tar.gz data
# docker compose start vaultwarden
ls -lh /root/vaultwarden-backup-*.tar.gz

👉 Ein Tar reicht als Grundlage; regelmäßig per Cron sichern.

— — —

🛠️ Fehlerhilfe (kurz)

  • Kein LiveSync / 502: NPMLocation /notifications/hub → Port 3012 + Websockets ✔️
  • Icons/Links fehlen: In .env DOMAIN = https; dann docker compose restart vaultwarden
  • Container startet nicht: docker compose logs --tail=200 vaultwarden
  • LetsEncryptFehler: DNSEintrag prüfen; RateLimit abwarten

Ergebnis

  • Vaultwarden läuft hinter NPM mit HTTPS; WebSockets funktionieren
  • Registrierungen aus, AdminBackend per Token geschützt
  • Daten persistent unter /opt/vaultwarden/data und per Tar gesichert

— — —

9 Arbeiten mit Vaultwarden Kurzguide (Praxis)

Ziel: Direkt nach der Einrichtung sicher starten. Du brauchst nur deine URL https://pass.DEINE-DOMAIN.tld.

9.1 Anmelden & Clients verbinden

  • Web: Öffne https://pass.DEINE-DOMAIN.tld, logge dich mit deinem Benutzer ein.

  • BrowserErweiterung: Suche nach Bitwarden im AddonStore deines Browsers, installiere das Addon.

    • In den AddonEinstellungen „SelfHosted/ServerURL“ auf https://pass.DEINE-DOMAIN.tld setzen.
    • Einloggen → das Tresorsymbol erscheint in der Toolbar.
  • Desktop/Mobile (optional): BitwardenApp installieren → beim ersten Start Server auf https://pass.DEINE-DOMAIN.tld stellen → einloggen. Erfolg: Du siehst deinen (noch leeren) Tresor in Web & Addon.

9.2 Ersten Eintrag anlegen (Login)

WebUI → NeuAnmeldung:

  • Name: z.B. „Twitch Hauptaccount“
  • Benutzername / EMail und Passwort eintragen
  • URL: z.B. https://www.twitch.tv Speichern. Erfolg: Der Eintrag erscheint sofort; das Addon zeigt ihn ebenfalls (LiveSync).

9.3 Ordner/Struktur

WebUI → OrdnerNeuer Ordner: z.B. „Streaming“. Im Eintrag den Ordner auf „Streaming“ stellen → speichern. Warum: Ordnung hält die Suche schlank.

9.4 Sicheres Passwort generieren

WebUI oder Addon → Generator:

  • Länge 2024, Zahlen, Sonderzeichen an; keine ähnlichen Zeichen.
  • „Generieren“ → „In Eintrag übernehmen“ (oder Kopieren und ins Zielkonto einfügen). Tipp: Nach Passwortwechsel beim Dienst die Änderung im Tresor speichern.

9.5 TOTP (2Faktor) im Eintrag hinterlegen

Beim ZielDienst 2FA aktivieren → du bekommst einen TOTPSchlüssel (Base32) oder QR.

  • Im TresorEintrag → Feld hinzufügen„AuthenticatorSchlüssel (TOTP)“ wählen → Schlüssel einfügen → speichern.
  • Der Eintrag zeigt nun zeitbasierte 6stellige Codes. Test: Logout beim Dienst → Login mit Passwort + aktuellem Code aus dem Eintrag.

9.6 Import vorhandener Passwörter (optional)

WebUI → WerkzeugeImportieren:

  • Format wählen (z.B. Chrome/Firefox/Bitwarden JSON/CSV).
  • Datei auswählen → Import. Hinweis: Nach dem Import kurz durchgehen, doppelte/alte Logins aufräumen.

9.7 Autofill testen (BrowserAddon)

Zur LoginSeite wechseln → Tresorsymbol → passenden Eintrag anklicken → Felder werden gefüllt. Tipp: In den AddonEinstellungen „Beim Seitenaufruf vorschlagen/AutoFill“ nach Wunsch aktivieren.

9.8 „Send“ (sicher teilen, optional)

WebUI → NeuSend:

  • Text oder Datei wählen, Ablaufdatum, max. Abrufe, optional Kennwort setzen → ErstellenLink kopieren. Einsatz: Einzelne Secrets/Dateien sicher an Partner schicken.

9.9 Organisation (Team, optional)

WebUI → OrganisationenNeue Organisation (Name vergeben).

  • Mitglieder einladen (erfordert funktionierendes SMTP).
  • Sammlungen anlegen (z.B. „StreamZugänge“) und Einträge zuordnen. Hinweis: Ohne SMTP später nachrüsten; bis dahin SoloTresor nutzen.

9.10 Export (NutzerSicht) & RestoreProbe

WebUI → WerkzeugeExportieren → Format wählen (z.B. Bitwarden JSON) → lokal verschlüsselt ablegen. ProbeRestore: In einer Testinstanz/Profil importieren und prüfen. (ServerBackups hast du zusätzlich in Schritt 8.)

9.11 Gute Praxis

  • Ein Dienst = ein eindeutiges Passwort; Passwortgenerator konsequent nutzen.
  • Wo verfügbar, 2FA aktivieren und TOTP im Eintrag hinterlegen.
  • Addon/Apps: Sperre/Timeout und Biometrie/PIN aktivieren.
  • Regelmäßig aufräumen (alte/duplizierte Logins löschen).