Ziele

Der Betrieb eines Vaultwarden Servers mit einem selbstsignierten Zertifikat ist tatsächlich recht einfach.

NEU: Für ganz ungeduldige habe ich einen Konsole only Abschnitt. Da gibts nur Befehle, keine Erklärungen.

Diese einfachste Ausbaustufe des ersten Teils ist NICHT für den öffentlichen Betrieb geeignet. Auch können damit die Bitwarden Apps nur im lokalen Netzwerk genutzt werden!

Letzte Aktualisierung:

  • 31.12.2024: TrueNAS entfernt und auf FreeBSD Server mit Bastille umgestellt. Konsole only aktualisiert und auf Github verlinkt.
  • 03.03.2024: Kleinigkeiten und Struktur angepasst
  • 01.01.2024: Starke Überarbeitung, Verzicht auf PostgreSQL, Daten- und Konfigurationsspeicherung außerhalb des Jails optional ergänzt. Update für FreeBSD 13.2.
  • 19.11.2022: Erweiterung um Diagramm und kleinere Anpassungen.
  • 30.10.2022: Initiales Dokument.

Voraussetzungen

Generell sollten solche Dienst in einer eigenen Umgebung eingerichtet werden. Das macht nicht nur die Sicherheit, sondern auch die Wartung wesentlich einfacher. Jails können relativ einfach gesichert werden und es sind nur die Pakete installiert, die absolut notwendig sind.

Begrifflichkeiten

  • ADMINTOKEN = Erzeugte Zeichenkette um sich im /admin Bereich des Vaultwarden Servers anzumelden

Diagramm

Damit sieht das Setup lokal so aus:

                    ┌─────────────────────┐
                    │ FreeBSD             │
                    │ ┌─────────────────┐ │
                    │ │ jails/vault     │ │
LAN: 0.0.0.0:8000 ──┼─┼─► vaultwarden   │ │
                    │ │   sqlite        │ │
                    │ └─────────────────┘ │
                    └─────────────────────┘

Jail erstellen

Es wird ein eigenes Jail benötigt, hier nehmen wir vault als Jail Namen.

Jail einrichten

Entweder mit bastile console vault eine Konsole in das erstellte Jail starten, oder es erfolgt ein Login per SSH (wenn aktiviert) mit ssh USERNAME@IP oder ssh USERNAME@HOSTNAME, um dann mit su root Rechte zu erlangen.

Paketquelle anpassen

Paketquellen sollten angepasst werden, siehe separater Artikel.

Pakete installieren & Dienste aktivieren

Nun die Paketquelle mit pkg update aktualisieren und dann die benötigten Pakete installieren: pkg install -y vaultwarden libargon2 Dienste aktivieren damit diese beim Start des Jails automatisch mit starten: service vaultwarden enable.

Vaultwarden

Admin Token erstellen

Mit folgendem Befehl wird eine zufällige und lange Zeichenfolge erzeugt: openssl rand -base64 48, welche wir als ADMINTOKEN nutzen werden, z.B. bznRfGlBEDrZS8HBmELgEtPMMUX7p/HJrCn47tEVT2d8ejjyfYCfXSMbUfewtUca. Damit kann später auf das Admin Portal von Vaultwarden zugegriffen werden. Also gut merken!. Dieser kommt aber nicht in die Konfigurationsdatei, sondern ein per argon2 erzeugter Hash der mit echo -n "bznRfGlBEDrZS8HBmELgEtPMMUX7p/HJrCn47tEVT2d8ejjyfYCfXSMbUfewtUca" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4 erzeugt wird.

Zertifikat erstellen (selbstsigniert)

Der Vaultwarden Dienst sollte niemals im Klartext angesprochen, sondern durch eine abgesicherte Verbindung aufgerufen werden, auch lokal.

Mit dem folgenden Befehl wird ein selbstsigniertes Zertifikat erzeugt. Das wird zwar im Browser (einmalig) eine Warnung erzeugen, sorgt aber für eine verschlüsselte Verbindung.

  • SSL Verzeichnis erstellen: install -o www -g www -d /usr/local/www/vaultwarden/data/ssl/
  • Zertifikat erstellen: openssl req -new -x509 -days 3650 -nodes -keyout /usr/local/www/vaultwarden/data/ssl/vault.key -out /usr/local/www/vaultwarden/data/ssl/vault.crt -subj "/C=DE/ST=NRW/L=ERKRATH/O=BSDBOX/OU=IT/CN=vault.bsdbox.local"

Dann wird OpenSSL ein paar Fragen stellen, die beantwortet werden wollen (mind. der HOSTNAME sollte angepasst werden)

Country Name (2 letter code) [AU]: DE
State or Province Name (full name) [Some-State]: NRW
Locality Name (eg, city) []: ERKRATH
Organization Name (eg, company) [Internet Widgits Pty Ltd]: BSDBOX
Organizational Unit Name (eg, section) []: IT
Common Name (e.g. server FQDN or YOUR name) []: vault.bsdbox.local
Email Address []:

Die damit erzeugten Schlüssel werden noch mit chown www:www /usr/local/www/vaultwarden/data/ssl/* gegen neugierige Blicke abgesichert.

Konfiguration erstellen

Im Vergleich zur mitgelieferten Standard-Konfiguration hat diese ein paar Änderungen:

  • Vaultwarden lauscht auf allen IP Adressen, nicht nur localhost (ROCKET_ADDRESS)
  • HTTPS aktiviert (ROCKET_TLS)
  • E-Mail Benachrichtigungen per SMTPS sind aktiviert (SMTP_HOST)
  • Admin Token gesetzt (ADMIN_TOKEN)
  • Organisationen aktiviert (ORG_GROUPS_ENABLED)

Kopiere die initiale Konfigurationsdatei mit cp /usr/local/www/vaultwarden/data/config.json.sample /usr/local/www/vaultwarden/data/rc.conf.d/vaultwarden und mit ee /usr/local/etc/rc.conf.d/vaultwarden anpassen. Dabei die Werte ADMINTOKEN und HOSTNAME ersetzen.

ROCKET_ADDRESS=0.0.0.0
export ROCKET_ADDRESS
ROCKET_PORT=8000
export ROCKET_PORT
ROCKET_TLS='{certs = "/usr/local/www/vaultwarden/data/ssl/vault.crt", key = "/usr/local/www/vaultwarden/data/ssl/vault.key"}'
export ROCKET_TLS
ADMIN_TOKEN='ADMINTOKEN'
export ADMIN_TOKEN
DOMAIN='https://HOSTNAME'
export DOMAIN
SIGNUPS_ALLOWED=true
export SIGNUPS_ALLOWED
ORG_GROUPS_ENABLED=true
export ORG_GROUPS_ENABLED

... und letztendlich den Vaultwarden Dienst starten: service vaultwarden start

Vaultwarden aufrufen

Vaultwarden ist dann unter https://IP:8000 oder https://HOSTNAME:8000 erreichbar.
Die Adminkonsole kann mit einem /admin hinter der genutzten Adresse aufgerufen werden (ADMINTOKEN benutzen!) und ab jetzt werden alle weiteren Einstellungen auch dort vorgenommen.

Bitwarden Login

Jeder (lokal) kann sich nun an dem Server registrieren und eigene Tresore und Kennwörter hinterlegen. Dazu muss der Emailversand funktionieren, damit die Email Adressen verifiziert werden können. Das kann ebenfalls über die Admin Webseite eingestellt werden.

Neu starten

service vaultwarden stop
pkg delete -a 
rm /usr/local/etc/rc.conf.d/vaultwarden
rm -rf /usr/local/www/vaultwarden

Konsole

Voilá