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

322 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

🛠️ 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
```bash
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
```bash
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:**
```bash
docker --version && docker compose version
```
👉 Offizielle Pakete, Compose als Plugin integriert.
— — —
3⃣ Projekt anlegen & `.env` erstellen
```bash
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
```bash
nano docker-compose.yml
```
**Inhalt einfügen:**
```yaml
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`, `Enter``Strg+X`.
👉 `./data:/data` = Persistenz auf dem Host.
— — —
5⃣ Container starten & Logs prüfen
```bash
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):
```bash
# 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 → **Settings** → **General** → 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`).
```bash
cd /opt/vaultwarden
sed -i '/^ADMIN_TOKEN=/d' .env
docker compose restart vaultwarden
```
4. **Prüfen:**
```bash
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 → General** → **Allow new signups** **einschalten** → **Save**.
2. In neuem Tab `https://pass.DEINE-DOMAIN.tld/#/register` öffnen → Benutzer anlegen → anmelden.
3. Admin → **Allow new signups** wieder **ausschalten** → **Save**.
> **Mit SMTP** kannst du stattdessen Admin → **Users → Invitations** nutzen (EinladungsMail).
**C) Sicherheit abrunden**
* Eigenes Benutzerkonto → **Settings/Security** → **2FA** (TOTP oder FIDO2/YubiKey) aktivieren.
* Optional: **SMTP** in AdminPanel setzen und **Testmail** senden.
— — —
8⃣ Backup (Basis)
```bash
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 → **Neu** → **Anmeldung**:
* **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 → **Ordner****Neuer 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 → **Werkzeuge****Importieren**:
* **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 → **Neu****Send**:
* Text oder Datei wählen, **Ablaufdatum**, **max. Abrufe**, optional **Kennwort** setzen → **Erstellen****Link kopieren**.
**Einsatz:** Einzelne Secrets/Dateien sicher an Partner schicken.
### 9.9 Organisation (Team, optional)
WebUI → **Organisationen****Neue 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 → **Werkzeuge****Exportieren** → 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).