From 55fdb135328607e6f28e7230525d84ba38bf4983 Mon Sep 17 00:00:00 2001 From: Micha Date: Mon, 1 Jun 2026 15:52:31 +0200 Subject: [PATCH] Enable Vaultwarden SMTP invites --- docs/EXTERNAL_DEPENDENCIES.md | 4 ++-- docs/SECRETS_MAP.md | 5 +++-- docs/SERVICE_CATALOG.md | 2 +- security/vaultwarden/docker-compose.yml | 8 ++++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/EXTERNAL_DEPENDENCIES.md b/docs/EXTERNAL_DEPENDENCIES.md index 6b517e0..5bd2f27 100644 --- a/docs/EXTERNAL_DEPENDENCIES.md +++ b/docs/EXTERNAL_DEPENDENCIES.md @@ -17,7 +17,7 @@ Dieses Dokument beschreibt externe Anbieter und Konten, von denen Betrieb, Recov | Hetzner Storage Box | Off-site Borg Backup | kritisch | Restore aus Off-site ggf. nicht moeglich | Hetzner-Konto / Storage-Box-Zugang ausserhalb Repo | Borg-Passphrase ist offline gesichert; Hetzner 2FA/Recovery/Zahlung sind bestaetigt; Storage Box ist SSH-only, Maintenance-Key liegt in Vaultwarden; Borg `append-only` wird per Operator-Entscheidung nicht umgesetzt | | GitHub Mirror | Externer Repo-Mirror `michaelkaleschke-spec/homelab-infra` | mittel/hoch | Gitea-Verlust abfederbar, Repo-Bootstrap bleibt moeglich | GitHub-Konto; PAT liegt in Gitea-Mirror-Settings, nicht im Repo | Mirror-Status regelmaessig pruefen; lokalen Clone als zweite Kopie behalten | | Tailscale | Remote-/Operator-Zugang | hoch | Remote-Zugriff erschwert, lokale Bedienung bleibt | Tailnet-Konto; Node `Kallilabcore`, IPv4 `100.80.98.33` | Break-glass per LAN und physischem Zugriff; Tailnet-Recovery-Codes sichern | -| GMX SMTP | Authelia Notifier | mittel | Mail-Notifier faellt aus, Login selbst nicht zwingend | GMX-Konto; SMTP-Secret liegt hostseitig | ntfy/zweiter SMTP als Fallback pruefen | +| GMX SMTP | Authelia Notifier, Vaultwarden-Einladungen, Ops-Report-Mail | mittel | Mail-Notifier und Vaultwarden-Einladungen fallen aus; Login selbst nicht zwingend | GMX-Konto; SMTP-Secrets liegen hostseitig | ntfy/zweiter SMTP als Fallback pruefen | | Let's Encrypt | TLS-Zertifikate | hoch | Cert-Erneuerung faellt aus | automatisch via Traefik und Cloudflare DNS-Challenge | Cert-Expiry Alert einrichten; Cloudflare-Token und Traefik-Storage pruefen | | Container Registries | Image Pulls von Docker Hub, GHCR, LSCR, Gitea Registry u. a. | mittel | Redeploy/Update blockiert | ueberwiegend oeffentlich; keine produktiven Registry-Tokens im Repo | Gepinnte Digests und lokale Runtime helfen kurzfristig; Updates geplant und einzeln deployen | | Plex Konto/Remote Access | Plex native Auth, ggf. Remote Access und Claim | mittel | Plex-Clients/Remote-Funktionen koennen ausfallen | Plex-Konto ausserhalb Repo; `PLEX_CLAIM` nur fuer Setup | LAN-Medienpfade bleiben lokal; Konto-Recovery separat sichern | @@ -33,7 +33,7 @@ Authoritativ ist `docs/SECRETS_MAP.md`. Diese Liste markiert nur externe Abhaeng | Cloudflare DNS API Token | ACME DNS-Challenge | Token-Rotation und Scope pruefen | | GitHub Mirror Token | Push-Mirror | In Gitea/GitHub verwaltet, nicht im Repo | | Tailscale Account Recovery | Tailnet-Zugang | Account-2FA/Recovery Codes sichern | -| SMTP Passwort | Authelia Mail | In Host-Secret, Fallback pruefen | +| SMTP Passwort | Authelia Mail, Vaultwarden-Einladungen, Ops-Report-Mail | In Host-Secrets, Fallback pruefen | | Domain-Registrar Recovery | Domain-Besitz und Zahlung | Account, 2FA und Zahlungsweg ausserhalb des Homelabs sichern | | Hetzner Storage Box Zugang | Off-site Backup-Ziel | Account 2FA aktiv, Recovery Key offline gedruckt, Zahlungsweg ok; Maintenance-Key und Storage-Box-Passwort in Vaultwarden | diff --git a/docs/SECRETS_MAP.md b/docs/SECRETS_MAP.md index 3994007..f505baf 100644 --- a/docs/SECRETS_MAP.md +++ b/docs/SECRETS_MAP.md @@ -17,6 +17,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb | Service | Secret | Datei / Methode | Status | |---|---|---|---| | Vaultwarden | `ADMIN_TOKEN` | `/mnt/user/appdata/secrets/vaultwarden_admin_token.txt` -> `ADMIN_TOKEN_FILE` | aktiv | +| Vaultwarden | SMTP Password | `/mnt/user/appdata/secrets/homelab_smtp_password.txt` -> `SMTP_PASSWORD_FILE` fuer Einladungen/Benachrichtigungen | aktiv | | Traefik | Cloudflare DNS API Token | `/mnt/user/appdata/traefik/secrets/cloudflare_dns_api_token` -> Docker Secret `cloudflare_dns_api_token` | aktiv | | PostgreSQL 18 | DB Password | `/mnt/user/appdata/secrets/postgres_password.txt` -> `POSTGRES_PASSWORD_FILE` | aktiv | | Redis | Passwort | `/mnt/user/appdata/secrets/redis_password.txt` -> Datei-Mount + Startkommando in `infra/redis/docker-compose.yml` | aktiv | @@ -89,6 +90,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb |-- borg_repo_passphrase.txt |-- influxdb3_admin_token.json |-- filebrowser_admin_password.txt +|-- homelab_smtp_password.txt `-- vaultwarden_admin_token.txt ``` @@ -109,8 +111,7 @@ Weitere dokumentierte Secret-Pfade: Einige Secrets liegen bewusst nur als Komodo Stack Environment Variables vor, weil das Image kein `_FILE` unterstuetzt oder ein laufender stabiler Produktionsstand nicht fuer eine reine Mechanik-Migration geopfert werden soll. Diese Werte existieren **ausschliesslich** an folgenden Stellen: 1. **Komodo Mongo** (Runtime und Backup-Dump `komodo-mongo.archive.gz` unter `/mnt/user/backups/borg/dumps/latest/`). -2. **Vaultwarden** (Operator-Eintrag pro Stack, sofern dort gepflegt). -3. **Externe Operator-Notiz** (analoge Sicherung, vergleichbar mit der Borg-Passphrase). +2. **Externe Operator-Notiz** (analoge Sicherung, vergleichbar mit der Borg-Passphrase). **Bei Komodo-Restore aus kaltem Zustand wird immer in dieser Reihenfolge gesucht.** Konkrete Werte werden im Repo, in Logs, in Doku-Kommentaren und in ntfy-Meldungen niemals wiedergegeben. diff --git a/docs/SERVICE_CATALOG.md b/docs/SERVICE_CATALOG.md index 8bba0e7..79779de 100644 --- a/docs/SERVICE_CATALOG.md +++ b/docs/SERVICE_CATALOG.md @@ -21,7 +21,7 @@ Secret-Werte sind nicht enthalten. Es werden nur Secret-Namen, Env-Key-Namen und | Service | Zweck | Autoritativer Pfad | URL / Zugang | Abhaengigkeiten | Datenpfade | Backup / Restore | Traefik | Besonderheiten / TODOs | |---|---|---|---|---|---|---|---|---| | `authelia` | ForwardAuth / zentrale Auth fuer Admin-UIs | `security/authelia/docker-compose.yml`, `security/authelia/configuration.yml` | `https://auth.kaleschke.info` | PostgreSQL 18, Traefik, GMX SMTP | `/mnt/user/appdata/authelia/config`, Authelia Secret-Dateien | Tier 1, config + DB + secrets | ja | Bewusst ohne Redis-Session-Backend; SMTP-Notifier via GMX und `authelia_smtp_password.txt`; explizite DNS-Server fuer SMTP/NTP; Repo-Baseline muss manuell in die Host-Config gemerged werden, OIDC/Secrets bleiben hostseitig; Access-Control und Compose-Middleware bei Aenderungen abgleichen | -| `vaultwarden` | Passwort-Tresor | `security/vaultwarden/docker-compose.yml` | `https://vault.kaleschke.info` | Traefik, `frontend_net` | `/mnt/user/appdata/vaultwarden` | Tier 1, `vaultwarden.sqlite.dump` + Share | ja | `ADMIN_TOKEN_FILE`; keine direkten Ports | +| `vaultwarden` | Passwort-Tresor | `security/vaultwarden/docker-compose.yml` | `https://vault.kaleschke.info` | Traefik, `frontend_net`, GMX SMTP | `/mnt/user/appdata/vaultwarden` | Tier 1, `vaultwarden.sqlite.dump` + Share | ja | `ADMIN_TOKEN_FILE`; SMTP ueber `homelab_smtp_password.txt` fuer Einladungen/Benachrichtigungen; keine direkten Ports | ## Shared Infrastructure diff --git a/security/vaultwarden/docker-compose.yml b/security/vaultwarden/docker-compose.yml index 36918be..87e3145 100644 --- a/security/vaultwarden/docker-compose.yml +++ b/security/vaultwarden/docker-compose.yml @@ -11,12 +11,20 @@ services: SIGNUPS_ALLOWED: "false" INVITATIONS_ALLOWED: "false" ADMIN_TOKEN_FILE: /run/secrets/admin_token + SMTP_HOST: smtp.gmx.net + SMTP_PORT: "587" + SMTP_SECURITY: starttls + SMTP_USERNAME: michideheld@gmx.de + SMTP_PASSWORD_FILE: /run/secrets/smtp_password + SMTP_FROM: michideheld@gmx.de + SMTP_FROM_NAME: KalliLab Vaultwarden ROCKET_PORT: 80 ROCKET_ADDRESS: 0.0.0.0 volumes: - /mnt/user/appdata/vaultwarden:/data - /mnt/user/appdata/secrets/vaultwarden_admin_token.txt:/run/secrets/admin_token:ro + - /mnt/user/appdata/secrets/homelab_smtp_password.txt:/run/secrets/smtp_password:ro networks: - frontend_net