Die Verwaltung digitaler Identitäten und Passwörter ist in unserer vernetzten Welt von entscheidender Bedeutung. Dienste wie Bitwarden haben sich als äußerst nützlich erwiesen, doch die Kontrolle über die eigenen Daten ist ein Wunsch vieler. Hier kommt Vaultwarden+ ins Spiel – eine beeindruckende, selbst gehostete Alternative zum Bitwarden-Server, die die Kernfunktionalität bietet, aber auf eigener Infrastruktur läuft. Es ist eine perfekte Lösung für all jene, die Wert auf Datensouveränität und Anpassbarkeit legen. Doch was tun, wenn der Internetdienstanbieter (ISP) oder das Netzwerk die gängigen Standardports 80 (HTTP) und 443 (HTTPS) blockiert, die für den Betrieb solcher Dienste unerlässlich sind?
Diese Herausforderung ist nicht selten. Viele ISPs blockieren diese Ports, um missbräuchliche Server-Installationen in Heimnetzwerken zu verhindern oder um ihren Kunden nur statische IP-Adressen für Geschäftstarife anzubieten. In diesem umfassenden Artikel zeigen wir Ihnen Schritt für Schritt, wie Sie Vaultwarden+ sicher und effizient hinter einem Nginx Reverse Proxy einrichten, selbst wenn die Standardports blockiert sind. Wir werden alternative Ports nutzen und dabei sicherstellen, dass Ihre Daten durch SSL-Verschlüsselung mit Let’s Encrypt geschützt sind.
### Vorbereitung: Was Sie für die Installation benötigen
Bevor wir ins Detail gehen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen. Eine gute Vorbereitung spart Zeit und Nerven.
1. **Ein Server:** Dies kann ein virtueller privater Server (VPS), ein Raspberry Pi oder ein dedizierter Home-Server sein. Wichtig ist eine stabile Internetverbindung und eine Linux-Distribution (empfohlen: Ubuntu Server oder Debian).
2. **Ein Domainname:** Zwingend erforderlich für die Einrichtung von SSL-Zertifikaten (Let’s Encrypt) und eine professionelle Erreichbarkeit Ihres Vaultwarden+-Servers. Stellen Sie sicher, dass die DNS-Einträge (A-Record) Ihrer Domain auf die öffentliche IP-Adresse Ihres Servers zeigen.
3. **Docker und Docker Compose:** Vaultwarden+ läuft optimal in Docker-Containern. Dies vereinfacht die Installation, Verwaltung und zukünftige Updates erheblich.
4. **Grundkenntnisse:** Vertrautheit mit der Linux-Befehlszeile, grundlegendem Netzwerkverständnis und Texteditoren (wie Nano oder Vim) ist von Vorteil.
5. **Ausgewählte alternative Ports:** Überlegen Sie sich im Voraus, welche Ports Sie statt 80 und 443 nutzen möchten. Gängige Beispiele sind 8080 (für HTTP) und 8443 (für HTTPS), aber Sie können auch weniger gebräuchliche Ports (z.B. 49152–65535) wählen, um Konflikte zu vermeiden. Stellen Sie sicher, dass diese Ports in Ihrer Firewall geöffnet und von Ihrem ISP nicht blockiert sind. Ein schneller Port-Scan Ihrer öffentlichen IP-Adresse kann hier Klarheit schaffen.
### Schritt 1: Installation von Docker und Docker Compose
Docker ist das Fundament unserer Installation. Es ermöglicht uns, Vaultwarden+ in einer isolierten Umgebung zu betreiben.
Verbinden Sie sich via SSH mit Ihrem Server und führen Sie die folgenden Befehle aus.
**Docker installieren (für Ubuntu/Debian):**
„`bash
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo „deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
„`
Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu, um Docker-Befehle ohne `sudo` ausführen zu können (nach diesem Schritt müssen Sie sich neu anmelden oder `newgrp docker` ausführen):
„`bash
sudo usermod -aG docker ${USER}
„`
**Docker Compose installieren:**
Laden Sie die neueste stabile Version von Docker Compose herunter. Überprüfen Sie die aktuelle Version auf der GitHub-Seite von Docker Compose (z.B. `v2.x.x`).
„`bash
sudo curl -L „https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Für einige Systeme könnte ein Symlink erforderlich sein
# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
„`
**Verifizierung:**
Überprüfen Sie, ob Docker und Docker Compose korrekt installiert wurden:
„`bash
docker –version
docker compose version
„`
### Schritt 2: Vaultwarden+ mittels Docker Compose einrichten
Jetzt richten wir Vaultwarden+ ein. Wir erstellen eine `docker-compose.yml`-Datei, die alle notwendigen Einstellungen für den Container enthält.
Erstellen Sie ein Verzeichnis für Ihre Vaultwarden+-Konfiguration und wechseln Sie hinein:
„`bash
mkdir -p ~/vaultwarden
cd ~/vaultwarden
„`
Erstellen Sie die Datei `docker-compose.yml` mit einem Texteditor (z.B. `nano docker-compose.yml`):
„`yaml
version: ‘3’
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
# Setzen Sie dies auf ‘true’, damit die WebSocket-Verbindung funktioniert.
WEBSOCKET_ENABLED: „true”
# Wichtig: Vaultwarden selbst lauscht intern auf Port 80, Nginx leitet dorthin weiter.
ROCKET_PORT: „80”
# Optional: SMTP-Einstellungen für E-Mail-Bestätigung, Passwort-Reset etc.
# SMTP_HOST: „your.smtp.host”
# SMTP_PORT: „587”
# SMTP_FROM: „[email protected]”
# SMTP_USERNAME: „your_smtp_username”
# SMTP_PASSWORD: „your_smtp_password”
# SMTP_SSL: „true” # oder „false”
# SMTP_STARTTLS: „true”
# Sicherheitseinstellungen
# Erlaubt die Erstellung neuer Benutzerkonten. Setzen Sie dies auf „false”,
# nachdem Sie Ihr erstes Admin-Konto erstellt haben, um die Registrierung zu schließen.
SIGNUPS_ALLOWED: „true”
# ADMIN_TOKEN: „EinSehrSicheresAdminToken” # Erlaubt Zugriff auf das Admin-Panel unter /admin
# OAUTH2_PROXY_ENABLED: „false” # Wenn Sie OAuth2-Proxy nutzen möchten
volumes:
# Persistenter Speicher für Vaultwarden-Daten
– ./vw-data:/data
# Wir veröffentlichen keine Ports direkt nach außen, da Nginx als Reverse Proxy dient.
# Vaultwarden lauscht intern auf 80 (HTTP) und 3012 (WebSockets).
# Nginx wird diese internen Ports verwenden.
# ports:
# – „8080:80” # Beispiel für direkten Zugriff (NICHT empfohlen für Nginx-Setup)
# – „3012:3012” # Beispiel für direkten WebSocket-Zugriff (NICHT empfohlen für Nginx-Setup)
„`
**Wichtiger Hinweis zur Port-Konfiguration:** Beachten Sie, dass wir in dieser `docker-compose.yml`-Datei *keine* `ports:`-Sektion definiert haben. Das liegt daran, dass der Vaultwarden-Container nur intern Ports exponiert, die dann von unserem Nginx-Proxy angesprochen werden. Vaultwarden selbst wird intern auf Port 80 (HTTP) und Port 3012 (WebSockets) lauschen. Nginx wird später diese internen Ports nutzen, um Anfragen von den externen, alternativen Ports dorthin weiterzuleiten.
Speichern und schließen Sie die Datei. Starten Sie Vaultwarden+ im Hintergrund:
„`bash
docker compose up -d
„`
Überprüfen Sie, ob der Container läuft:
„`bash
docker ps
„`
Sie sollten einen Container mit dem Namen `vaultwarden` sehen. Er ist jedoch noch nicht von außen erreichbar.
### Schritt 3: Nginx als Reverse Proxy konfigurieren – Der Schlüssel zum Erfolg
**Nginx** ist ein leistungsstarker und effizienter Webserver, der auch als Reverse Proxy fungieren kann. Er leitet externe Anfragen von unseren alternativen Ports an den internen Vaultwarden+-Container weiter. Zudem ist er unerlässlich für die SSL-Verschlüsselung.
#### 3.1 Nginx installieren
„`bash
sudo apt install nginx -y
„`
#### 3.2 SSL-Zertifikat mit Let’s Encrypt über Certbot besorgen
Bevor wir die Nginx-Konfiguration finalisieren, benötigen wir ein SSL-Zertifikat. **Let’s Encrypt** bietet kostenlose und vertrauenswürdige Zertifikate, und **Certbot** automatisiert den Prozess.
Installieren Sie Certbot und das Nginx-Plugin:
„`bash
sudo apt install certbot python3-certbot-nginx -y
„`
Führen Sie Certbot aus, um ein Zertifikat zu beantragen. Normalerweise konfiguriert Certbot Nginx automatisch für Port 443. Da wir aber einen alternativen Port nutzen, gehen wir einen kleinen Umweg:
„`bash
sudo certbot certonly –nginx -d IhreDomain.com
„`
Ersetzen Sie `IhreDomain.com` durch Ihre tatsächliche Domain. Certbot wird Sie durch einige Fragen führen (E-Mail-Adresse, Zustimmen zu den AGBs). Es wird versuchen, eine temporäre Nginx-Konfiguration zu erstellen, um die Domain-Validierung durchzuführen. Wenn dies erfolgreich war, erhalten Sie eine Meldung, dass das Zertifikat generiert wurde. Es wird unter `/etc/letsencrypt/live/IhreDomain.com/` gespeichert.
**Wichtig:** Certbot versucht standardmäßig, Nginx für Port 443 zu konfigurieren. Wir ignorieren diese automatische Nginx-Konfiguration vorerst und erstellen unsere eigene, die den alternativen HTTPS-Port verwendet.
#### 3.3 Nginx-Konfiguration für Vaultwarden+ auf alternativen Ports
Jetzt erstellen wir die eigentliche Nginx-Konfiguration, die Anfragen auf unserem alternativen HTTPS-Port (z.B. 8443) annimmt und an Vaultwarden+ weiterleitet.
Erstellen Sie eine neue Konfigurationsdatei für Vaultwarden+ (z.B. `/etc/nginx/conf.d/vaultwarden.conf`):
„`bash
sudo nano /etc/nginx/conf.d/vaultwarden.conf
„`
Fügen Sie den folgenden Inhalt ein. **Passen Sie die Ports, die Domain und die Pfade zu den Let’s Encrypt-Zertifikaten an.**
„`nginx
# Umleitung von HTTP auf HTTPS (optional, aber empfohlen, wenn Sie HTTP nicht blockieren)
# Wenn Sie Port 80 blockieren, ist dieser Block nicht notwendig.
# Wenn Sie ihn nutzen, muss Port 80 in der Firewall geöffnet sein.
# server {
# listen 80;
# listen [::]:80;
# server_name IhreDomain.com;
# return 301 https://IhreDomain.com:8443$request_uri; # Umleitung zum alternativen HTTPS-Port
# }
server {
# Wir lauschen auf unserem alternativen HTTPS-Port, z.B. 8443
listen 8443 ssl http2;
listen [::]:8443 ssl http2;
server_name IhreDomain.com;
# Pfade zu den Let’s Encrypt-Zertifikaten
ssl_certificate /etc/letsencrypt/live/IhreDomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/IhreDomain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/IhreDomain.com/chain.pem;
# SSL-Einstellungen (empfohlen für Sicherheit)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ‘ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384’;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; # Google DNS (kann auch auf lokale DNS-Server geändert werden)
resolver_timeout 5s;
add_header Strict-Transport-Security „max-age=63072000” always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection „1; mode=block”;
# Proxy-Einstellungen für Vaultwarden+ (HTTP-Verkehr)
location / {
proxy_pass http://vaultwarden:80; # Leitet Anfragen an den internen Docker-Container weiter
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade; # Für WebSocket
proxy_set_header Connection „upgrade”; # Für WebSocket
proxy_read_timeout 86400s; # Lange Timeout für WebSockets
# Optional: Zusätzliche Sicherheits-Header
add_header Referrer-Policy „no-referrer”;
add_header Permissions-Policy „geolocation=(), midi=(), notifications=(), push=(), sync-xhr=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), speaker=(self), fullscreen=(self), payment=(), publickey-credentials-get=(), screen-wake-lock=(), xr-spatial-tracking=(), clipboard-read=(), clipboard-write=(), vr=()”;
}
# Proxy-Einstellungen für WebSocket-Verbindungen (WICHTIG für Clientsynchronisation)
location /notifications/hub {
proxy_pass http://vaultwarden:3012; # Vaultwarden lauscht intern auf 3012 für WebSockets
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection „upgrade”;
proxy_read_timeout 86400s; # Lange Timeout für WebSockets
}
# Admin-Panel (optional, nur wenn Sie ADMIN_TOKEN in docker-compose.yml gesetzt haben)
# location /admin {
# proxy_pass http://vaultwarden:80;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# }
}
„`
**Anpassungsschritte:**
1. Ändern Sie `IhreDomain.com` an allen Stellen auf Ihre tatsächliche Domain.
2. Stellen Sie sicher, dass der `listen`-Port (hier 8443) der von Ihnen gewählte alternative HTTPS-Port ist.
3. Die Pfade zu den SSL-Zertifikaten müssen exakt dem Format von Let’s Encrypt entsprechen (normalerweise `live/IhreDomain.com/`).
Speichern und schließen Sie die Datei (`Ctrl+O`, `Enter`, `Ctrl+X` bei Nano).
#### 3.4 Nginx-Konfiguration testen und neu laden
Überprüfen Sie die Syntax Ihrer Nginx-Konfiguration, bevor Sie Nginx neu starten:
„`bash
sudo nginx -t
„`
Wenn die Ausgabe `test is successful` anzeigt, können Sie Nginx neu laden, um die Änderungen zu übernehmen:
„`bash
sudo systemctl reload nginx
„`
Sollten Fehler auftreten, überprüfen Sie die Konfigurationsdatei auf Tippfehler oder falsche Pfade.
#### 3.5 Automatisches Zertifikats-Renewal einrichten
Certbot richtet normalerweise einen Cronjob oder einen Systemd-Timer ein, um Zertifikate automatisch zu erneuern. Sie können dies testen mit:
„`bash
sudo certbot renew –dry-run
„`
Wenn dies fehlerfrei durchläuft, ist die automatische Erneuerung eingerichtet. Sollte es Probleme geben, stellen Sie sicher, dass der Nginx-Server richtig konfiguriert ist, um die Domain-Validierung zu ermöglichen. Eventuell müssen Sie im `server`-Block auch einen `location /.well-known/acme-challenge/` Block hinzufügen, der direkt auf die Certbot-Validierungsdateien zugreift.
### Schritt 4: Firewall-Einstellungen (UFW)
Es ist absolut entscheidend, Ihre Firewall so zu konfigurieren, dass sie nur die benötigten Ports freigibt. Für Ubuntu/Debian wird oft UFW (Uncomplicated Firewall) verwendet.
Überprüfen Sie den Status Ihrer Firewall:
„`bash
sudo ufw status
„`
Erlauben Sie den von Ihnen gewählten alternativen HTTPS-Port (z.B. 8443):
„`bash
sudo ufw allow 8443/tcp
„`
Wenn Sie auch die HTTP-Umleitung konfiguriert haben und Port 80 nutzen wollen, dann:
„`bash
sudo ufw allow 80/tcp
„`
Aktivieren Sie die Firewall (falls noch nicht geschehen):
„`bash
sudo ufw enable
„`
Bestätigen Sie mit `y`.
Überprüfen Sie den Status erneut:
„`bash
sudo ufw status
„`
Sie sollten sehen, dass Ihre Ports für `ALLOW` gelistet sind.
### Schritt 5: Zugriff auf Vaultwarden+ und erste Schritte
Ihr Vaultwarden+-Server sollte jetzt über Ihren Browser erreichbar sein. Geben Sie die Adresse ein:
„`
https://IhreDomain.com:8443
„`
(Ersetzen Sie `IhreDomain.com` und den Port durch Ihre Einstellungen.)
Sie sollten die Anmelde-/Registrierungsseite von Vaultwarden+ sehen.
**Erste Schritte:**
1. **Registrieren Sie Ihren ersten Benutzer:** Wenn `SIGNUPS_ALLOWED` in Ihrer `docker-compose.yml` auf `true` gesetzt ist, können Sie sich jetzt registrieren. Dies wird automatisch Ihr Administrator-Konto.
2. **Registrierungen deaktivieren:** Nach der Registrierung Ihres ersten Benutzers (oder wenn Sie Benutzer nur manuell erstellen möchten), bearbeiten Sie die `docker-compose.yml`-Datei und setzen Sie `SIGNUPS_ALLOWED: „false”`. Starten Sie dann den Vaultwarden-Container neu:
„`bash
cd ~/vaultwarden
nano docker-compose.yml # SIGNUPS_ALLOWED auf „false” setzen
docker compose down
docker compose up -d
„`
Dies verhindert, dass andere Personen Konten auf Ihrem Server erstellen können.
3. **Clients verbinden:** Nutzen Sie die offiziellen Bitwarden-Clients (Browser-Erweiterungen, Desktop-Apps, mobile Apps) und geben Sie bei der Server-URL Ihre benutzerdefinierte URL ein (z.B. `https://IhreDomain.com:8443`).
### Wartung und Best Practices
Ein selbst gehosteter Dienst erfordert regelmäßige Wartung, um sicher und aktuell zu bleiben.
* **Regelmäßige Updates:**
* **Docker-Images:** Aktualisieren Sie Ihre Docker-Images regelmäßig, um von Bugfixes und Sicherheitsverbesserungen zu profitieren.
„`bash
cd ~/vaultwarden
docker compose pull
docker compose up -d
docker image prune # Alte Images entfernen
„`
* **Systempakete:** Halten Sie Ihr Betriebssystem und Nginx aktuell:
„`bash
sudo apt update
sudo apt upgrade -y
„`
* **Backups:** Erstellen Sie regelmäßige Backups des `vw-data`-Verzeichnisses (das ist Ihr Vaultwarden-Datenvolumen). Dies ist entscheidend für die Wiederherstellung im Katastrophenfall. Kopieren Sie dieses Verzeichnis auf einen externen Speicher.
* **Sicherheit:**
* Verwenden Sie starke, einzigartige Passwörter für Ihr Vaultwarden-Konto und Ihr Server-Root-Passwort.
* Aktivieren Sie die Zwei-Faktor-Authentifizierung (2FA) für Ihr Vaultwarden-Konto.
* Halten Sie die Firewall restriktiv.
* Setzen Sie `SIGNUPS_ALLOWED` auf `false`, sobald Sie alle gewünschten Benutzer registriert haben.
* **Monitoring:** Überwachen Sie die Systemressourcen Ihres Servers, um sicherzustellen, dass Vaultwarden+ und Nginx stabil laufen.
### Fazit
Die Installation von **Vaultwarden+** hinter einem **Nginx Reverse Proxy** auf **alternativen Ports** ist eine hervorragende Lösung, um die Kontrolle über Ihre Passwörter zu erlangen und gleichzeitig die Hürden blockierter Standardports zu überwinden. Dieser detaillierte Leitfaden hat Ihnen gezeigt, wie Sie diesen Prozess von der Vorbereitung über die Einrichtung von Docker und Vaultwarden+, der komplexen Nginx-Konfiguration mit SSL bis hin zu den notwendigen Firewall-Einstellungen erfolgreich meistern können.
Mit dieser Konfiguration haben Sie einen robusten, sicheren und selbstverwalteten Passwort-Manager in den Händen, der Ihnen die Freiheit und Sicherheit gibt, die Sie verdienen. Die Investition in das Erlernen und Einrichten dieser Lösung zahlt sich durch erhöhte Datensouveränität und Seelenfrieden aus. Genießen Sie die Vorteile Ihres eigenen, maßgeschneiderten Passwort-Tresors!