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.52stammt 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:
- Das Gerät muss
vaultwarden.homeauf die richtige ZimaOS-IP auflösen können. - 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.