Debian Vaultwarden
Einleitung
Vaultwarden (neuer Name für Bitwarden_RS) ist eine freie Serverkomponente für den Bitwarden Passwort Manager. Bitwarden kann Passwörter über mehrere Geräte und Webbrowser zu synchronisieren. Durch die Verwendung von Vaultwarden, liegen die Passwörter zentral auf dem eigenen Server anstatt in einer Hersteller Cloud. Client seitig kommen die Standard Bitwarden Clients zum Einsatz.
Installation
Debian Paket erstellen
mit folgender Prozdedur kann ein Debian Paket mit der aktuellen Vaultwarden Version erstellt. Es empfiehlt sich dies auf einem Standalone Container zu erledigen, um auf dem Produktivsserver keine Buildumgebung zu haben. Das Paket wird in einer Dockerumgebung gebaut
apt-get install docker git patch curl cd /usr/local/src git clone https://github.com/greizgh/vaultwarden-debian.git cd vaultwarden-debian git checkout -b origin/vaultwarden ./build.sh -o debian_version
z.B.
./build.sh -o buster
oder
./build.sh -o bullseye
Je nach Systemleistung kann der Buildvorgang sehr lange dauern. das fertige Paket liegt im Unterordner dist/ z.B.
vaultwarden-buster-1.22.2-sqlite-amd64.deb vaultwarden-bullseye-1.22.2-sqlite-amd64.deb
Instatlation auf Zielserver
dpkg -i vaultwarden-bullseye-1.22.2-sqlite-amd64.deb
Dies installiert Vaultwarden incl. evtl. Abhängigkeiten und legt einen systemd-Dienst und Konfigfile an. Unterverzeichnis für sqlite Datenbank Dateien anlegen:
mkdir/var/lib/vaultwarden/data chown vaultwarden:nogroup /var/lib/vaultwarden/data
Konfiguration
vi /etc/vaultwarden/config.env
Folgende Änderung durchführen (Kommentarzeichen entfernen und ändern, Admin Token beibehalten, oder abändern.):
DATABASE_URL=/var/lib/vaultwarden/data/db.sqlite3 WEBSOCKET_ENABLED=true WEBSOCKET_ADDRESS=0.0.0.0 WEBSOCKET_PORT=3012 EXTENDED_LOGGING=true LOG_TIMESTAMP_FORMAT="%Y-%m-%d %H:%M:%S.%3f" LOG_FILE=/var/lib/vaultwarden/vaultwarden.log LOG_LEVEL=Info SIGNUPS_ALLOWED=true SIGNUPS_VERIFY=true ADMIN_TOKEN=token
Vaultwarden aktivieren und starten
Bei der Installation wurde ein systemd-Daemon File angelegt, aber noch nicht aktiviert, sodass Vaultwarden beim Systemstart gestartet wird.
systemctl enable vaultwarden systemctl start vaultwarden
Prüfen, ob Vaultwarden erfolgreich gestartet wurde
systemctl status vaultwarden
HTTPS Reverse Proxy=
Vaultwarden verwendet einen Webserver auf Port 8000, der per Default nicht TLS verschlüsselt ist. Zwar kann TLS aktiviert werden, aber dann funktionieren Websockets nicht mehr und Das Sicherheitsniveau des eingebauten Webservers entpricht nicht dem ausgewachsener Webserver ala Apache oder Nginx. für den HTTPS ist ein SSL Zertifikat und Privat Key erforlderlich. Deren Generierung ist nicht Teill dieser Anleitung.
apt-get install apache
Virtual Host anlegen:
vi /etc/apache2/sites-available/vaultwarden_https.conf
Folgende Zeilen einfügen und anpassen:
<VirtualHost *:443> SSLEngine on ServerName vaultwarden.domain.org SSLCertificateFile /path/cert SSLCertificateKeyFile /path/key #SSLCACertificateFile ${SSLCA} Include /etc/letsencrypt/options-ssl-apache.conf ErrorLog /var/log/apache2/vaultwarden-error.log CustomLog /var/log/apache2/vaultwarden-access.log combined # SSLProxyEngine on RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /notifications/hub(.*) ws://IP_Vaultwarden:3012/$1 [P,L] ProxyPass / http://IP_Vaultwarden:8000/ ProxyPreserveHost On ProxyRequests Off RequestHeader set X-Real-IP %{REMOTE_ADDR}s </VirtualHost>
Virtualhost und nötige Module aktiveren:
a2ensite vaultwarden_https.conf a2enmod ssl proxy proxy_html proxy_http
Apache neu starten:
service apache2 restart
Webbasierte Konfiguration und User anlegen
- Webbrowser öffnen und https://vaultwarden.domain.org/admin eingeben.
- Der Loginbildschirm der Adminoberfläche sollte erscheinen.
- Mit dem in config.env entahltenen Admin_Token token einloggen
- Im Bereich General Settings folgende Einstellungen vornehmen/prüfen:
- Domain URL=https://vaultwarden.domain.org
- Require email verification on signups=true
- Bereich SMTP EMAIL Settings öffnen und die Einstellungen entsprechend dem verwendeten Mailserver einstellen
- Enabled=True
- Host=smtp.domain.org
- Enable Secure SMTP=true
- Force TLS=false
- Port=25
- From Address=vaultwarden@domain.org
- From Name=Vaultwarden
- Username=mailuser
- Password=mailpwd
- Settings abspeichern
- SMTP Email Setting testen
- Bereich SMTP EMAIL Settings erneut öffnen
- Unter Test SMTP Ziel Mailadresse eingeben und Button send test email auswählen
- Falls Fehler auftreten, Logfile des Mailservers prüfen und Settings anpassen. Falls SSL Feher auftreten, evtl. Enabe Secure SMTP und Force TLS Settings invertieren, oder Accept Invalid Certs (Know the risks!) auswählen, Settings abspeichern und Test erneut durchführen.
User anlegen:
- https://vaultwarden.domain.org im Browser öffnen
- Konto erstellen auswählen
- email Adresse eingeben
- Name: Realer oder beliebiger Name
- Master Passwort
- Master Passwort wiederholen
- evtl. Passwort Hinweis vergeben
- Nach dem Anlegen wird eine email mit einem Verifikationslink gesendet. Diesen anklicken
- Browser Fenster/Tab öffnet sich mit der Vaultwarden Seite und dem Hinweis, dass die Email-Adresse verifiziert wurde
- Mit eben angelegten User-Daten einloggen
Vaultwarden absichern mit Fail2ban
Vaultwarden kann relativ einfach mittels Fail2ban gegen Brute-Force Passwort Atacken abgesichert werden. Dabei muss der User-Zugang und Admin Zugang separat betrachter werden. User werden mittels email-Adresse+Passwort authentifiziert und der Adminzugang ist mittels Token abgesichert
apt-get install fail2ban
Vaultwarden Jail
vi /etc/fail2ban/jail.d/vaultwarden.local
Folgende Zeilen einfügen:
[vaultwarden] enabled = true port = 80,443,8000 filter = vaultwarden #action = iptables-allports[name=vaultwarden] logpath = /var/lib/vaultwarden/vaultwarden.log maxretry = 3 bantime = 3d findtime = 3d
Vaultwarden Filter:
vi /etc/fail2ban/filter.d/vaultwarden.local
Folgende Zeilen einfügen:
[INCLUDES] before = common.conf [Definition] failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$ ignoreregex =
Admin Zugang Vaultwarden-Admin Jail
vi /etc/fail2ban/jail.d/vaultwarden-admin.local
Folgende Zeilen einfügen:
[vaultwarden-admin] enabled = true port = 80,443,8000 filter = vaultwarden-admin #action = iptables-allports[name=vaultwarden] logpath = /var/lib/vaultwarden/vaultwarden.log maxretry = 3 bantime = 3w findtime = 1w
Vaultwarden-Admin Filter:
vi /etc/fail2ban/filter.d/vaultwarden-admin.local
Folgende Zeilen einfügen:
[INCLUDES] before = common.conf [Definition] failregex = ^.*Invalid admin token\. IP: <ADDR>.*$ ignoreregex =
Fail2Ban Neustart
service fail2ban restart
Funktionstest
Fail2ban Logfile überwachen:
tail -f /var/log/fail2ban.log
- Vaultwarden Seite im Webbrowser öffnen und mit korrekten User-Daten einloggen (siehe auch oben). Im Fail2ban Logfile dark kein Eintrag erzeugt werden.
- Vaultwarden Seite im Webbrowser öffnen und mit falschen User-Daten einloggen. Logfile-Eintag:
[vaultwarden] Found IP - Datum Uhrzeit
- Vaultwarden Admin Seite im Webbrowser öffnen und mit korrekten Admin_Token einloggen (siehe auch oben). Im Fail2ban Logfile dark kein Eintrag erzeugt werden.
- Vaultwarden Admin Seite im Webbrowser öffnen und mit falschen Token einloggen. Logfile-Eintag:
[vaultwarden-admin] Found IP - Datum Uhrzeit
Client Tools
Die Installation und Einrichtung der Clienttools soll hier nicht näher beschrieben werden, da dies eigentlich selbsterklärend sein sollte. Es muss darauf geachtet werden, dass die eigene Server-Adresse als Server verwendet wird, anstatt derjenige von Bitwarden.