Topic

Vaultwarden auf ZimaOS installieren und mit Caddy über HTTPS absichern

Vaultwarden ist eine schlanke, selbst gehostete Alternative zum offiziellen Bitwarden-Server. Besonders praktisch: Die bekannten Bitwarden-Apps und Browser-Erweiterungen können weiterhin verwendet werden, während der eigentliche Vaultwarden-Server auf dem eigenen System läuft.

Auf ZimaOS lässt sich Vaultwarden schnell über den App Store installieren. Beim ersten Aufruf über die lokale IP-Adresse wartet allerdings eine kleine Hürde.

Rufen wir Vaultwarden beispielsweise über

http://192.168.178.52:10380

auf, meldet der Web Vault, dass kein sicherer Browser-Kontext zur Verfügung steht.

Eine mögliche Fehlermeldung lautet:

You are not using a secure context which is required for the Subtle Crypto API to work.

Die Lösung: Wir setzen Caddy als Reverse Proxy vor Vaultwarden und erreichen unseren Passwortmanager anschließend lokal über eine HTTPS-Adresse:

https://vaultwarden.home

Wichtig: Die IP-Adresse 192.168.178.52 stammt aus meinem eigenen Beispiel. Ersetzt sie in den folgenden Schritten durch die lokale IP-Adresse eures ZimaOS-Systems.


1. Vaultwarden auf ZimaOS installieren

Vaultwarden lässt sich direkt über den ZimaOS App Store installieren.

In meinem Beispiel ist Vaultwarden anschließend über Port 10380 erreichbar.

Die persistenten Daten liegen unter:

/DATA/AppData/vaultwarden/data

Für unsere spätere HTTPS-Konfiguration hinterlegen wir außerdem die Adresse, unter der Vaultwarden erreichbar sein soll.

In der Docker-Compose-Konfiguration benötigen wir:

environment:
  DOMAIN: "https://vaultwarden.home"

Falls environment: noch nicht vorhanden ist, kann der Bereich entsprechend ergänzt werden.

environment ist in Docker Compose der Bereich für Umgebungsvariablen, die an die Anwendung innerhalb des Containers übergeben werden.

Mit DOMAIN teilen wir Vaultwarden also mit:

Meine externe Adresse lautet https://vaultwarden.home.


2. Warum benötigen wir überhaupt HTTPS?

Nach der Installation könnten wir Vaultwarden zunächst direkt über die lokale IP-Adresse aufrufen:

http://192.168.178.52:10380

Vaultwarden läuft zwar, der Web Vault benötigt für bestimmte Browser- und Kryptografie-Funktionen jedoch einen Secure Context.

Unser Ziel sieht deshalb so aus:

Browser
   │
   │ HTTPS / Port 443
   ▼
 Caddy
   │
   │ HTTP im lokalen Netzwerk
   ▼
Vaultwarden / Port 10380

Caddy nimmt die HTTPS-Verbindung entgegen und leitet die Anfrage an Vaultwarden weiter.


3. Caddy-Verzeichnisse anlegen

Zunächst verbinden wir uns per SSH mit unserem ZimaOS-System.

Danach erstellen wir die benötigten Verzeichnisse:

sudo mkdir -p /DATA/AppData/caddy-vaultwarden/config
sudo mkdir -p /DATA/AppData/caddy-vaultwarden/data

Hier speichern wir später die Konfiguration und persistenten Daten von Caddy.


4. Caddyfile erstellen

Jetzt erstellen wir die Konfigurationsdatei:

sudo nano /DATA/AppData/caddy-vaultwarden/Caddyfile

Dort tragen wir ein:

vaultwarden.home {
    tls internal
    reverse_proxy 192.168.178.52:10380
}

Auch hier muss 192.168.178.52 durch die IP-Adresse des eigenen ZimaOS-Systems ersetzt werden.

Was bedeutet die Konfiguration?

Mit:

vaultwarden.home

legen wir fest, für welche Adresse Caddy die Anfrage entgegennehmen soll.

Mit:

tls internal

weisen wir Caddy an, seine interne Zertifizierungsstelle (Local CA) zu verwenden und ein entsprechendes Zertifikat auszustellen.

Und:

reverse_proxy 192.168.178.52:10380

sorgt dafür, dass die Anfrage an unseren Vaultwarden-Server weitergeleitet wird.

In Nano speichern wir mit:

CTRL + O
Enter
CTRL + X

5. Prüfen, ob Port 443 verfügbar ist

Caddy benötigt den Standardport für HTTPS:

443

Deshalb prüfen wir vorher, ob dort bereits ein anderer Dienst lauscht:

sudo ss -tulpn | grep :443

Wird nichts ausgegeben, ist Port 443 in der Regel frei.


6. Caddy als Docker-Container starten

Jetzt können wir Caddy starten:

sudo docker run -d \
  --name caddy-vaultwarden \
  --restart unless-stopped \
  -p 443:443 \
  -v /DATA/AppData/caddy-vaultwarden/Caddyfile:/etc/caddy/Caddyfile:ro \
  -v /DATA/AppData/caddy-vaultwarden/data:/data \
  -v /DATA/AppData/caddy-vaultwarden/config:/config \
  caddy:latest

Anschließend prüfen wir, ob der Container läuft:

sudo docker ps

Bei Problemen können wir die Logs aufrufen:

sudo docker logs caddy-vaultwarden

Oder beispielsweise nur die Ereignisse der letzten Minute:

sudo docker logs caddy-vaultwarden --since 1m

7. vaultwarden.home auf die ZimaOS-IP auflösen

Dieser Schritt ist entscheidend.

Wir haben Caddy zwar so konfiguriert, dass er auf Anfragen für

vaultwarden.home

reagiert. Unser Mac oder PC weiß dadurch aber noch nicht automatisch, welcher Server hinter diesem Namen steckt.

Wenn wir im Browser

https://vaultwarden.home

eingeben, muss der Rechner zuerst herausfinden:

vaultwarden.home
        │
        │ Namensauflösung
        ▼
192.168.178.52
        │
        ▼
     ZimaOS
        │
        ▼
      Caddy

Da vaultwarden.home in unserem Beispiel nur eine lokale Adresse ist, benötigen wir eine lokale Namensauflösung.

Variante 1: Hosts-Datei

Für einzelne Geräte ist die einfachste Lösung die lokale Hosts-Datei.

Unter macOS öffnen wir:

sudo nano /etc/hosts

und ergänzen:

192.168.178.52 vaultwarden.home

Natürlich wieder mit der eigenen ZimaOS-IP.

Danach speichern:

CTRL + O
Enter
CTRL + X

Jetzt können wir testen:

ping vaultwarden.home

Als Ziel sollte unsere ZimaOS-IP erscheinen, beispielsweise:

192.168.178.52

Den Ping beenden wir mit:

CTRL + C

Damit weiß dieser Mac:

vaultwarden.home = 192.168.178.52

Wichtig: Die Hosts-Datei gilt nur für dieses Gerät

Der Eintrag wird nicht automatisch auf andere Geräte im Netzwerk übertragen.

Wenn wir beispielsweise noch einen zweiten Computer verwenden, muss auch dieser wissen, wohin vaultwarden.home zeigen soll.

Genau deshalb ist die Hosts-Datei vor allem für einzelne oder wenige Clients praktisch.

Variante 2: Lokaler DNS-Server

Wer Vaultwarden auf vielen Geräten verwenden möchte, kann die Namensauflösung stattdessen zentral über einen lokalen DNS-Server beziehungsweise eine entsprechende Router-Funktion erledigen.

Dort wird ebenfalls hinterlegt:

vaultwarden.home → 192.168.178.52

Alle Geräte, die diesen DNS-Server verwenden, können vaultwarden.home anschließend zentral auflösen.

Ohne Hosts-Datei geht es also durchaus. Ohne irgendeine Form der Namensauflösung geht es bei dieser Konfiguration jedoch nicht.

Für diese Anleitung verwenden wir die Hosts-Datei, weil sie schnell eingerichtet ist und keine zusätzliche Infrastruktur voraussetzt.


8. Vaultwarden erstmals über HTTPS öffnen

Jetzt können wir unsere neue Adresse aufrufen:

https://vaultwarden.home

Caddy nimmt die Verbindung auf Port 443 entgegen und stellt HTTPS bereit.

Allerdings kann der Browser jetzt zunächst eine Zertifikatswarnung anzeigen.

Das bedeutet nicht, dass Caddy nicht funktioniert.

Der Grund ist vielmehr:

Caddy
   │
   ▼
eigene Local CA
   │
   ▼
Zertifikat für vaultwarden.home
   │
   ▼
Browser kennt diese CA noch nicht

Mit tls internal verwendet Caddy eine eigene lokale Zertifizierungsstelle. Unser Betriebssystem vertraut dieser Zertifizierungsstelle zunächst noch nicht.

Das ändern wir im nächsten Schritt.


9. Caddy Root-Zertifikat finden

Das Root-Zertifikat unserer lokalen Caddy-CA befindet sich im persistenten /data-Bereich des Containers.

Wir prüfen zunächst:

sudo docker exec caddy-vaultwarden \
ls -l /data/caddy/pki/authorities/local/

Dort sollte unter anderem folgende Datei vorhanden sein:

root.crt

Dieses Zertifikat benötigen wir auf unserem Client.


10. Root-Zertifikat aus Caddy kopieren

Wir kopieren das Zertifikat zunächst aus dem Container auf unser ZimaOS-System:

sudo docker cp \
caddy-vaultwarden:/data/caddy/pki/authorities/local/root.crt \
/tmp/caddy-root.crt

Anschließend können wir es beispielsweise per SCP auf unseren Mac übertragen:

scp Daniel@192.168.178.52:/tmp/caddy-root.crt ~/Desktop/

Hier müssen sowohl

Daniel

als auch

192.168.178.52

an den eigenen Benutzernamen beziehungsweise die eigene ZimaOS-IP angepasst werden.


11. Caddy Root CA unter macOS vertrauen

Auf dem Mac importieren wir anschließend:

caddy-root.crt

in die Zertifikats-/Schlüsselbundverwaltung.

Das Zertifikat öffnen und unter Vertrauen entsprechend als vertrauenswürdig hinterlegen.

Bei unserer lokalen CA wählen wir:

Immer vertrauen

macOS kann dabei die Eingabe des Benutzerpassworts verlangen.

Anschließend den Browser vollständig schließen und neu starten.

Jetzt öffnen wir erneut:

https://vaultwarden.home

Der Browser sollte unserer lokalen Caddy-CA nun vertrauen und die HTTPS-Verbindung ohne entsprechende Zertifikatswarnung herstellen.


12. Vaultwarden einrichten

Jetzt können wir Vaultwarden normal verwenden und unseren Account anlegen beziehungsweise uns anmelden.

Auch die offiziellen Bitwarden-Apps und Browser-Erweiterungen können mit einem selbst gehosteten Vaultwarden-Server verwendet werden.

Als Serveradresse verwenden wir:

https://vaultwarden.home

Auf weiteren Geräten müssen allerdings zwei Voraussetzungen erfüllt sein:

  1. Das Gerät muss vaultwarden.home auf die richtige ZimaOS-IP auflösen können.
  2. Das Gerät muss unserer Caddy Root CA vertrauen.

Das ist besonders wichtig, wenn Vaultwarden später beispielsweise auf mehreren PCs, Smartphones oder Tablets verwendet werden soll.


13. Registrierung nach der Einrichtung deaktivieren

Wenn alle gewünschten Benutzerkonten erstellt wurden, kann es sinnvoll sein, weitere Registrierungen zu deaktivieren.

Dafür können wir Vaultwarden beispielsweise folgende Umgebungsvariable mitgeben:

environment:
  DOMAIN: "https://vaultwarden.home"
  SIGNUPS_ALLOWED: "false"

Damit können sich anschließend nicht einfach weitere Benutzer über die Registrierungsseite einen neuen Account anlegen.


14. Backup nicht vergessen

Self-Hosting bedeutet auch, dass wir selbst für unsere Daten verantwortlich sind.

Bei unserem Setup liegen die persistenten Vaultwarden-Daten unter:

/DATA/AppData/vaultwarden/data

Dieses Verzeichnis sollte deshalb Bestandteil einer regelmäßigen Backup-Strategie sein.

Wichtig:

Persistente Speicherung ist noch kein Backup.

Wer dort seine Passwörter speichert, sollte unbedingt dafür sorgen, dass die Daten zusätzlich auf einem anderen Datenträger oder Backup-Ziel gesichert werden.


15. Vaultwarden nicht einfach ins Internet freigeben

Die hier gezeigte Konfiguration ist bewusst für den lokalen Zugriff im eigenen Netzwerk gedacht.

Ich würde insbesondere nicht einfach die verwendeten Ports über den Router ins Internet weiterleiten.

Wer von unterwegs auf seinen Vaultwarden zugreifen möchte, sollte dafür eine entsprechend abgesicherte Remote-Access-Lösung verwenden, beispielsweise über ein VPN.


Alle wichtigen Befehle auf einen Blick

Caddy-Verzeichnisse erstellen

sudo mkdir -p /DATA/AppData/caddy-vaultwarden/config
sudo mkdir -p /DATA/AppData/caddy-vaultwarden/data

Caddyfile erstellen

sudo nano /DATA/AppData/caddy-vaultwarden/Caddyfile

Inhalt:

vaultwarden.home {
    tls internal
    reverse_proxy 192.168.178.52:10380
}

Port 443 prüfen

sudo ss -tulpn | grep :443

Caddy starten

sudo docker run -d \
  --name caddy-vaultwarden \
  --restart unless-stopped \
  -p 443:443 \
  -v /DATA/AppData/caddy-vaultwarden/Caddyfile:/etc/caddy/Caddyfile:ro \
  -v /DATA/AppData/caddy-vaultwarden/data:/data \
  -v /DATA/AppData/caddy-vaultwarden/config:/config \
  caddy:latest

Caddy überprüfen

sudo docker ps
sudo docker logs caddy-vaultwarden

Hosts-Datei auf dem Mac bearbeiten

sudo nano /etc/hosts

Eintrag:

192.168.178.52 vaultwarden.home

Test:

ping vaultwarden.home

Caddy Root CA überprüfen

sudo docker exec caddy-vaultwarden \
ls -l /data/caddy/pki/authorities/local/

Root-Zertifikat aus Caddy kopieren

sudo docker cp \
caddy-vaultwarden:/data/caddy/pki/authorities/local/root.crt \
/tmp/caddy-root.crt

Zertifikat auf den Mac übertragen

scp Daniel@192.168.178.52:/tmp/caddy-root.crt ~/Desktop/

Das Ergebnis

Aus dem ursprünglichen Zugriff:

http://192.168.178.52:10380

wird:

https://vaultwarden.home

Der Ablauf sieht anschließend vereinfacht so aus:

Browser
   │
   │ https://vaultwarden.home
   │ HTTPS / 443
   ▼
 Caddy
   │
   │ Reverse Proxy
   ▼
Vaultwarden
   │
   ▼
/DATA/AppData/vaultwarden/data

Caddy übernimmt dabei HTTPS und die Zertifikatsverwaltung, während Vaultwarden weiterhin auf unserem eigenen ZimaOS-System läuft.

Damit haben wir einen selbst gehosteten Passwortmanager mit einer sauberen HTTPS-Verbindung im lokalen Netzwerk.


Hier entsteht gerade etwas Neues 🚀

Zum Schluss noch ein kleiner Ausblick:

Meine Website bekommt aktuell einen kompletten Neustart.

Die neue Seite wird künftig deutlich stärker mit meinen YouTube-Inhalten verzahnt sein. Dort findet ihr dann solche Anleitungen rund um ZimaOS, NAS, Docker, Self-Hosting, Software und weitere Tech-Themen übersichtlich aufbereitet – inklusive Befehlen, Konfigurationen und zusätzlichen Informationen zu meinen Videos.

Der Launch ist bereits in Vorbereitung.

Mehr dazu gibt es bald.

Please disable your adblocker or whitelist this site!

WordPress Cookie Hinweis von Real Cookie Banner