Vaultwarden Passwortmanager Installation mit Docker-Compose

Vaultwarden Passwortmanager Installation mit Docker-Compose

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

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie Consent mit Real Cookie Banner