Zum Inhalt springen

Password-Safe selbst hosten

Password-Safe Anwendungen sind heute, fast schon zu einer Selbstverständlichkeit geworden. In der Cloud gibt es sie in allen möglichen Variationen und mit den unterschiedlichsten Sicherheitsfeatures. Einen Password-Safe selbst hosten kann man heute schon mit vielen Clouddiensten und selbst einige Webhosting-Anbieter haben entsprechende Pakete im Angebot.

In diesem Tutorial möchte ich euch zeigen, wie schnell man einen Password-Safe selbst hosten kann, auf seinem eigenen Raspberry.

Voraussetzungen

Um einen Password-Safe selbst hosten zu können, benötigst du lediglich einen Raspberry mit Docker und eine DynDNS Umleitung auf deine IP Adresse. Ich nutze dafür No-IP ( Affiliate Link: Hier kannst du dich anmelden ).

Da ich auch meinen Password-Safe hinter den NginX Proxy setzen möchte, nutze ich den bereits installierten NginX Network Manager. Eine Anleitung zur Installation findest du hier:

Anleitung NginX Network Manager auf Raspberry und Docker

Vorbereitungen

Um die Installation nachher in einem Durchlauf zu erledigen sind ein paar Daten bereit zu halten und das ein oder andere Passwort zu generieren.

Admin Token generieren

Am einfachsten lässt sich ein entsprechender Token auf einer Linux Shell generieren, dazu muss man einzig folgenden Befehl eingeben:

openssl rand -base64 64

Das Ergebnis sieht dann so ähnlich aus und sollte an einem sicheren Ort gespeichert werden.

gE6i9XNXTnG9m03Bob5GTJMsLxDAcqudeGBcZnwuDDleN2aD+Qlm4dGMMDCMBtL/Y
CtaKBZlglE9I0uwhu6cfA==

// Token in die Zwischenablage kopieren
// Beachte! Jeder der diesen Token hat, besitzt die Kontrolle über DEINEN Passwortmanager!!!

Alternativ könnt ihr auch auf einer beliebigen online Password Generator benutzen, so lange er 64 Zeichen lange Passwörter unterstützt und von Euch keine Angaben will für was und wo ihr das ganze einsetzt. Ich setze ab und zu https://mypwd.net/ ein und habe damit gute Erfahrungen gemacht.

Passwörter für Datenbank generieren (Optional)

Zu erst die Erklärung warum steht hier Optional? Für den Betrieb des von mir hier beschriebenen Password-Safe benötigt man keine Datenbank. Er kann auch mit einer sqlite betrieben werden. Ich für meinen Teil bevorzuge jedoch eine richtige DB.

Ja so surreal es klingen mag ich muss Passwörter generieren um Passwörter speichern zu können. Natürlich könnt ihr im nachhinein auch diese Passwörter in den Password-Safe übertragen, doch ohne Sie geht es nun mal nicht.

Ihr könnt zum erstellen der Datenbank Passwörter, den gleichen Befehl nehmen wie für das erstellen des Admin Token, ich habe die Anzahl der Zeichen aber auf 30 begrenzt.

Environment Variablen

Ich habe eine .env Datei angelegt um in dieser alle Variablen zu speichern die ich für den Betrieb des Password-Safe benötige.

Diese sieht wie folgt aus:

TOKEN=
WEBSOCKET=true
MARIADB_ROOT_PASSWORD=
MARIADB_DATABASE=
MARIADB_USER=
MARIADB_PASSWORD=
MARIADB_HOST=
SMTP_FROM_NAME=
SMTP_HOST=
SMTP_FROM=
SMTP_PORT= #465 oder 587
SMTP_SSL=true
SMTP_SECURITY= #force_tls oder starttls
SMTP_USERNAME=
SMTP_PASSWORD=
DOMAIN= #Domain mit http:// oder https://
EMAIL=
CONTAINER_NAME=
CONTAINER_NAME_DB=

Diese Datei speichert ihr im gleichen Verzeichnis wie das Docker-Compose File welches wir noch erstellen werden.

Password-Safe selbst hosten Docker-Compose File

Das Docker-Compose File enthält neben den Netzwerken und den Volumes, 2 Services.

Erstens die Datenbank in meinem Fall habe ich mich für eine MariaDB Entschieden und nehme auch das original Image von MariaDB. Hier kann sich wer will noch an einer Optimierung versuchen, es gibt eine Menge kleine und weniger Speicher und CPU lastige Images für MariaDB.

Zweitens die Password-Safe Application, hier habe ich mich für Bitwarden, bzw die OpenSource (GPLv3.0) Variante Vaultwarden entschieden. Vaultwarden ist wesentlich Ressourcen schonender und läuft dadurch auch stabiler auf einem Raspi.

Password-Safe selbst hosten Docker-Compose MariaDB

Eigentlich eine Standard Compose File für Maria DB mit ein paar Variablen aufgepeppt.

  vault_db:
    image: mariadb
    container_name: ${CONTAINER_NAME_DB}
    hostname: "${MARIADB_HOST}"
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
      - MARIADB_DATABASE=${MARIADB_DATABASE}
      - MARIADB_USER=${MARIADB_USER}
      - MARIADB_PASSWORD=${MARIADB_PASSWORD}
    volumes:
      - vault_db_vol:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    networks:
      - nginx_proxy_backend #Name für den NginX Network Manager

Wie Ihr seht werden hier die Variablen aus der .env Datei genutzt die ihr vorhin angelegt habt. Variablen sind einfach flexibel und ermöglichen euch alles selbst anzugeben und entsprechend die Datei auch weiter zu geben.

Password-Safe selbst hosten Docker-Compose Vaultwarden

Pssword-Safe selbst hosten Login Fenster, Bitwarden / Vaultwarden, Email Adresse eingeben und Masterpassword
Login Fenster Bitwarden / Vaultwarden

Es würden 10 Zeilen in der Compose Datei reichen um einen Vaultwarden Password-Safe zum laufen zu bekommen. Dann jedoch sind einige Funktionen nur rudimentär oder gar nicht vorhanden. Deswegen habe ich mich entschieden so viel wie möglich per Variable zu konfigurieren, dadurch ist der Teil etwas länger.

  vaultwarden:
    image: vaultwarden/server:latest
    container_name: ${CONTAINER_NAME}
    restart: unless-stopped
    environment:
    ## Bitte auf die Doppelten Anführungsstriche achten
      - "DATABASE_URL=mysql://${MARIADB_USER}:${MARIADB_PASSWORD}@${MARIADB_HOST}/${MARIADB_DATABASE}"
      - "ADMIN_TOKEN=${TOKEN}"
      - "RUST_BACKTRACE=1"
      - LOG_LEVEL=info
      - LOG_FILE= /var/log/vaultwarden_${CONTAINER_NAME}.log
      - TZ=Europe/Berlin
      - WEBSOCKET_ENABLED=${WEBSOCKET}
      - SMTP_FROM_NAME=${SMTP_FROM_NAME}
      - SMTP_HOST=${SMTP_HOST}
      - SMTP_FROM=${SMTP_FROM}
      - SMTP_PORT=${SMTP_PORT}
      - SMTP_SSL=${SMTP_SSL}
      - SMTP_SECURITY=${SMTP_SECURITY}
      - SMTP_USERNAME=${SMTP_USERNAME}
      - SMTP_PASSWORD=${SMTP_PASSWORD}
      - SIGNUPS_VERIFY=true
      - SIGNUPS_ALLOWED=false
      - INVITATIONS_ALLOWED=false
      - DOMAIN=${DOMAIN}
      - EMAIL=${EMAIL}

Auswirkung und den Zweck einiger Variablen

In diesem Abschnitt möchte ich kurz den Zweck einiger Variablen erklären.

Variable Beschreibung
DATABASE_URL Wird benötigt wenn Vaultwarden mit einer externen DB betrieben werden soll. Bitte hierbei auf die Doppelten Anführungszeichen achten, diese sind notwendig für die richtige Interpretation der Variable.
ADMIN_TOKEN Wird für den Zugriff auf das Admin Backend benötigt, bitte niemals teilen. Wer diesen Token hat, hat Zugriff auf alle Password Safe Accounts eures Servers
RUST_BACKTRACE Support for capturing a stack backtrace of an OS thread
SMTP_FROM_NAME Anzeige Name des Absenders
SMTP_HOST Servername des Email Dienstes ( zb smtp.gmail.com )
SMTP_FROM Absender Email Adresse
SMTP_PORT Port für dem SMTP Server 465 oder 587
SMTP_SECURITY force_tls oder starttls bitte fragt euren Email Anbieter
SMTP_USERNAME
SMTP_PASSWORD
Anmelde Username und Password beim Email Server/Dienst
SIGNUPS_VERIFY False/True Email Adressen für Anmeldung müssen bestätigt werden (empfohlen: true)
SIGNUPS_ALLOWED False/True Damit sich niemand einfach so bei Eurem Vaultwarden anmelden kann. (empfohlen: false)
INVITATIONS_ALLOWED False/True Erlaubt und verbietet es Einladungen zu verschicken. (empfohlen: false)
DOMAIN Domain Eures Vaultwarden (zb vaultwarden.example.com)
EMAIL Email Adresse eures Vaultwarden / Admin Email

Alle weiteren Informationen zu Variablen und deren Auswirkungen findet ihr im Wiki:

https://github.com/dani-garcia/vaultwarden/wiki

Password-Safe selbst hosten Abschluss und Rollout

Kommen wir zum Abschluss, der Artikel ist lange genug und wer sich bis hier hin durchgearbeitet hat, hat sicher einiges gelernt über Docker-Compose, Vaultwarden oder auch NginX.

Die komplette Docker-Compose File findet ihr wie immer in meinem GitHub Repo.

Rollout und Start des Password-Safe

Nach dem ihr nun das .env File angelegt habt und euch das Docker Compose File aus dem Repo gezogen habt, müsst ihr das ganze nur noch auf eurem Raspberry deployen.

Dazu ruft ihr einfach in der Shell folgendes auf:

docker-compose -f docker-compose-vaultwarden.yml up -d

Die notwendigen Images werden nun gezogen und entpackt. Bei mir war nach ca 1 Minute alles geladen und der Vaultwarden Stack hochgefahren.

Mit docker ps könnt ihr nun überprüfen ob die Container hochgefahren sind. Ich habe dafür Portainer installiert.

Anleitung für die Portainer Installation.

Deswegen schaue ich dort nach.

Ansicht des Vaultwarde Stacks in Portainer mit 2 Container, 1 mal App und 1 mal MariaDB
Ansicht in Portainer

Letzte Anpassungen im NginX Proxy Manager

Zu guter Letzt müssen wir noch den NginX Proxy Manager entsprechenden Konfigurieren.

Dazu legt ihr einen neuen Proxy Host an, tragt den Domain Namen, die IP und den Port in den entsprechenden Feldern ein. Nun wählt ihr die zweite Register Karte “ Custom Locations “ und tragt die 2 Locations ein:

Die erste Location hat folgende Parameter.

location:             /notifications/hub
scheme:               http
forward-hostname/ip:  IPvonVaultwarden
port:                 3012
zahnradmenü:          proxy_set_header Upgrade $http_upgrade;
                      proxy_set_header Connection "upgrade";

Nun konfigurieren wir die zweite Location.

location:             /notification/hub/negotiate
scheme:               http
forward-hostname/ip:  IPvonVaultwarden
port:                 80
Ansicht der Proxy Host Config für Custom Locations
Ansicht Custom Location NginX Proxy Manager

Wie Ihr seht ist bei mir der Port nicht 80 sondern 9180, da ich mehrere Container auf dem Raspberry laufen habe die auf Port 80 hören.

Damit sollte nun Euer Bitwarden/Vaultwarden auf eurer Domain erreichbar sein.

Als erstes ruft ihr das Admin Backend auf, dies erreicht ihr über:

subdomain.domain.tld/admin

Screenshot der Webseite mit Zugriff auf das Admin Backend von Vaultwarden
Eingabe Admin Token

Danach habt ihr dann Zugriff auf euer Backend und könnt alles entsprechend Konfigurieren und User einladen.

Password-Safe selbst hosten Vaultwarden Admin Backend
Admin Backend von Vaultwarden

Als erstes solltet ihr Euch selbst als User anlegen, vergesst bitte nicht das wir für die Email Adresse die Verifikation aktiviert haben und ihr deswegen erst den Link in der Email anklicken müsst. Unter SMTP Email Settings könnt ihr auch erst testen ob Eure Einstellungen für den Email Versand funktionieren.

Jetzt könnt ihr noch auf Diagnostics klicken und bekommt dann eine Auswertung eurer Vaultwarden Installation.

Ansicht der Diagnostics Auswertung meiner Vaultwarden Installation
Diagnostics Ansicht meiner Installation

Abschluß

Wie immer wünsche ich euch viel Spaß mit dem Tutorial und hoffe ich konnte dem einen oder anderen Einsteiger damit helfen. Ich freue mich auch wie immer über Feedback und natürlich auch Korrekturen oder Fragen in den Kommentaren.

Vielen Dank

Martin

Published inNerdStuffRaspberryTutorial