Einleitung
Geht es dir auch so wie mir, dass du gerne einen Passwortmanager nutzen möchtest, aber keine Lust hast dafür monatlich Geld auszugeben oder aber deine Daten bei fremden Unternehmen bzw. Anbietern zu hinterlegen? Wer meinen Block verfolgt, weiß, dass ich, wenn möglich, alles gerne auf der eigenen Hardware bereitstellen möchte. Daher zeige ich dir heute Vaultwarden die kostenlose Open-Source Variante und das pandon zu bitwarden. Das angnehme hier ist, dass du die Bitwarden Apps und Software nutzen kannst. Also gehen wir mal in die vollen.
Voraussetzungen
- Ubuntu Server (Ich nutze für den Beitrag 24.04)
- SSH-Zugang zu eurem Ubuntu-Server
Informationen zu Vaultwarden
- Link zu Github – KLICK MICH
Installation Vorbereitungen
System auf Updates prüfen und Systemzeit richtig einstellen
Logge dich am besten per SSH auf eurem Server ein und gebt folgende Befehle im Anschluss ein:
apt update && apt upgrade -V && apt dist-upgrade && apt autoremove
timedatectl set-timezone Europe/Berlin
Installation von Docker und Docker-Compose
apt install docker.io docker-compose -y
Anlegen des Verzeichnisses für Vaultwarden
Jetzt legen wir ein Verzeichnis mit einem Namen und dem Pfad deiner Wahl an. Ich entscheide mich mal für Vault als Ordner-Namen.
mkdir vault
Anlegen der Docker-Compose.yml
Wechselt in die den vorher angelegten Ordner mit diesem Befehl:
cd vault
und legt im Anschluss die Docker-Compose-Datei an.
nano docker-compose.yml
Füllt die Datei mit folgendem Inhalt:
Achtet da auf die Anpassungen, die ihr machen müsst, z. B.: beim Pfad.
version: "3" networks: internal: external: false services: vaultwarden: container_name: vaultwarden image: vaultwarden/server restart: unless-stopped volumes: - /home/test/vault:/data # Bei Bedarf Ordnerpfad anpassen z. B. /test/... Wichtig! :/data muss stehen bleiben ports: - 1234:80 # Der Port auf der linken Seite kann nach Bedarf geändert werden. - 3012:3012 # Der Port auf der linken Seite kann nach Bedarf geändert werden. environment: - WEBSOCKET_ENABLED=true # Aktiviert die Echtzeitsynchronisation - ADMIN_TOKEN=${VAULTWARDEN_ADMIN_TOKEN} networks: - internal
Speicher die Datei mit
– STRG +O
– STRG +M
– STRG +X
Wenn das erledigt ist, können wir uns dem nächsten Part widmen.
Erstellung des Admin-Tokens
Für die erstellung des benötigten Tokens, kannst du folgendenen Befehl nutzen:
docker run --rm -it vaultwarden/server /vaultwarden hash
Nach dem Ausführen des Befehls, wirst du nach einem PW gefragt, ich nutze dafür eine generierte Passphrase, in meinem Beispiel hier wäre das: dad-boondocks-sharply
Alles richtig gemacht, wird dir der Token angezeigt, speicher dir den irgendwo ab. z. B. in einem Editor, den Token braucht ihr gleich nochmal.
Erstelle jetzt eine Datei in dem Ordner, welchen du Eingangs erstellt hast (Bei mir hieß der Ordner vault). Dort muss auch die docker-compose.yml drin liegen.
nano .env
Fügt in die Datei folgendes ein:
VAULTWARDEN_ADMIN_TOKEN= #Hier kommt der Token inklusive der ' Zeichen rein,welchen ihr vorhin generiert habt
Die gefüllte Datei könnte dann z. B.: so aussehen:
Erledigt? Dann kannst du die Datei speichern mit:
– STRG +O
– STRG +M
– STRG +X
Starten der Docker-Konfiguration
Du benötigst zum Starten von Vaultwarden nur einen Befehl, der lautet:
docker-compose up -d
Wenn du alles richtig gemacht hast, startet jetzt das Docker Image. Testen kannst du das Ganze, in dem du die IP deines Servers eingibst. Inklusive http vorne und den Port 1234 hinten anhängst.
Hier wieder ein Bsp. http://192.168.60.42:1234
Vaultwarden Admin-Panel
Du hast es fast geschafft, für die weiteren Einstellungen nutzt du das Admin-Panel. Du musst der URL hinten nur noch ein /admin anhängen. Das Login Password ist übrigens nicht der Admin-Token, sondern unsere Passphrase, mit der Ihr am Anfang den Token erstellt habt.
Bei mir war das dad-boondocks-sharply.
Wenn die Konfiguration richtig abgeschlossen wurde, sollten keine Fehlermeldungen ersichtlich sein.
Was für dich jetzt wichtig ist, dass ihr für den Einrichtungsprozess einen SMTP-Server von deinem E-Mail-Anbieter deiner Wahl hinterlegst.
Fazit
Heute habe ich dir gezeigt, wie du den Vaultwarden Passwortmanager mithilfe von Docker-Compose schnell installieren kannst. Natürlich war das nur der Anfang, denn um ihn richtig nutzen zu können, brauchst du z. b. einen SMTP-Server und eine https-Verbindung, mit der du auf den Vaultwarden zugreifst. Dafür kann man z. B. einen Reverse Proxy nutzen oder aber man installiert sich nginx auf dem gleichen Server und nutzt Vaultwarden nur für das heimische Netzwerk mit einem selbst signiertem Zertifikat. Wie du das intern nutzen kannst, zeige ich dir gleich in meinem ersten Tipp.
Tipp 1 Zugriff mit Nginx und selbst signierten Zertifikat
Installation Nginx
Na dann legen wir mal los mit Nginx.
Integrieren wir mal den Key des Repositories von Nginx
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" | tee /etc/apt/sources.list.d/nginx.list
und die Paketquelle selbst auch
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
jetzt startest du die Installation von nginx selbst.
apt update && apt install nginx
ändere nach der Installation noch den User von Nginx auf www-data
nano /etc/nginx/nginx.conf
Speichere die Datei wieder ab.
Test Nginx
um sicherzustellen, dass alles läuft, startest du den Service neu.
service nginx restart
Gebe die http:// und die IP deines Servers in den Browser deiner Wahl ein und bestätige mit Enter. Du solltest folgende Meldung erhalten.
Wenn bisher alles erfolgreich war, deaktivieren wir jetzt die Default-Seite von nginx
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf_disabled service nginx restart
Die ersten vorbereitungen sind abgeschlossen, im nächsten Step, bereiten wir das Zertifikat vor.
Selbst signiertes Zertifikat erstellen
Wichtig!
Bei der Abfrage Common Name, die gleich erscheint, musst du deine interne IP eingeben, die auch genutzt wird, um Vaultwarden im Browser aufzurufen. Bei mir war es z. B.die IP 192.168.60.42
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Ordner erstellen für die Snippets
mkdir /etc/nginx/snippets
Erstelle folgende conf
sudo nano /etc/nginx/snippets/self-signed.conf
und fülle sie mit leben
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
und noch eine .conf brauchen wir, welche du auch gleich wieder erstellen solltest
nano /etc/nginx/snippets/ssl-params.conf
und auch die Datei befüllst du jetzt mit leben
ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256->; ssl_ecdh_curve secp384r1; ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # ssl_stapling on; # ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
Wenn du die .conf befüllt hast, speichere sie und erzeuge mit folgendem Befehl das eigentliche Zertifikat.
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Nginx .conf für den internen https Zugriff
Lege jetzt die Datei für den Zugriff auf Vaultwarden an
nano /etc/nginx/conf.d/vault.conf
Folgenden Inhalt solltest du jetzt einfügen, achte wie immer darauf, alles auf deinen Server bzw. VM anzupassen.
server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name 192.168.60.42; include snippets/self-signed.conf; include snippets/ssl-params.conf; # set max upload size client_max_body_size 1G; #... location / { proxy_pass http://192.168.60.42:1234; 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-Remote-Port $remote_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; add_header X-Frame-Options "SAMEORIGIN"; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;" always; } location /notifications/hub { proxy_pass http://192.168.60.42:3012; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /notifications/hub/negotiate { proxy_pass http://192.168.60.42:1234; 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; } }
Speicher die Datei ab und starte den nginx-service neu
service nginx restart
Gebe jetzt https:// und deine IP im Browser ein. Du solltest folgende Warnung erhalten.
Bestätige das die Verbindung ok ist (Weiter zu deine „IP“ (unsicher))
Logge dich jetzt im Admin-Panel ein und klicke auf General Settings und füge bei Domain URL https://und eure IP ein und klicke auf Safe.
Um zu überprüfen, ob alles geklappt hat, kannst du jetzt auf Diagnostics klicken, wenn alles Grün ist, haste alles richtig gemacht
Fertig, jetzt könnt ihr Vaultwarden intern sauber nutzen.
Tip 2 Nginx Reverse Proxy
Wenn du Nginx als Reverse Proxy nutzen möchtest, kannst du die hier gezeigte Konfiguration abgewandelt auch für dich nutzen um von außerhalb auf deinen Passwortmanager zuzugreifen. Hier eine bsp. Konfiguration. Diese .conf muss natürlich auf eure bedürfnisse angepasst werden und du musst entsprechend ein Zertifikat erstellen.
server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name Deine-Domain; # SSL configuration # RSA certificates ssl_certificate /etc/letsencrypt/dein-ordner/rsa/fullchain.pem; ssl_certificate_key /etc/letsencrypt/dein-ordner/rsa/key.pem; # ECC certificates ssl_certificate /etc/letsencrypt/dein-ordner/ecc/fullchain.pem; ssl_certificate_key /etc/letsencrypt/dein-ordner/ecc/key.pem; # This should be ca.pem (certificate with the additional intermediate certificate) # See here: https://certbot.eff.org/docs/using.html # ECC ssl_trusted_certificate /etc/letsencrypt/dein-ordner/ecc/ca.pem; # Include SSL configuration include /etc/nginx/snippets/ssl.conf; # Include headers include /etc/nginx/snippets/headers.conf; # set max upload size client_max_body_size 50M; #... location / { proxy_pass http://192.168.60.42:1234; 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-Remote-Port $remote_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; add_header X-Frame-Options "SAMEORIGIN"; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;" always; } location /notifications/hub { proxy_pass http://192.168.60.42:3012; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /notifications/hub/negotiate { proxy_pass http://192.168.60.42:1234; 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; } }
Abschluss
Heute habe ich dir mehre möglichkeiten gezeigt, wie du deinen eigenen PW-Manager auf deinem eignen Server installieren kannst. Natürlich ist ein wenig Know-How erforderlich, aber grundsätzlich ist die Installation und Konfiguration relativ einfach gehalten. Ich hoffe ich konnte euch das Vaultwarden ein wenig näher bringen.
Viel Spaß mit eurem Vaultwarden Passwortmanager