Im Synology-NAS unter Docker Bitwarden einrichten

Welt seid mir gegrüßt.
Stellt euch folgendes vor: Ihr habt mehrere Geräte und würdet gern eure Passwörter synchronisieren.
Eure Kennwörter wollt ihr aber ungern auf einer Cloud bei einen externen Anbieter anvertrauen.
Die Lösung liegt nahe: man sollte die Kennwörter also selber hosten.
Eine Keepass-Datenbank hin und her zu synchronisieren erweist sich als unpraktisch. Etwas zentraleres muss her.
Meine Lösung dazu: Bitwarden

Bitwarden kann für Privatanwender for free genutzt werden. Man kann auch deren Cloud Lösung nehmen, aber wozu gibt es NAS und Raspberry Pis die für sowas gut geeignet sind.
Der folgende Guide bezieht sich primär auf Synology DSM 7. Für Raspberry Pi wird ein eigener Beitrag folgen.

Zuerst einmal laden wir im Docker das folgende Paket: vaultwarden/server:latest

und starten den Container und legen folgende Einstellungen fest:

(Name kann natürlich geändert werden)

Wir brauchen ein data Ordner damit die anfallenden Daten auch gespeichert bleiben.
Der Mount-Pfad kann nach belieben geändert werden. Er muss aber auf jedenfall aber manuell (z.b. in der Filestation) erstellt werden.
Das Logfile werden wir später noch brauchen für fail2ban, aber auch so kann es interessant sein das lesen zu wollen.

Eure lokalen Ports sind natürlich je nach gusto auch anpassbar.
Der 3012er Port wird für den Websocket benötigt, damit Änderungen sofort gesynct werden.
Will man das nicht und es reicht einen das Bitwarden das beim Start nur synct ist dieser optional.
Der 80er Port ist, ihr habt es erraten, das Webinterface. Das bekommt gleich via Reverse Proxy auch ein Zertifikat.
Dazu gleich mehr. Auch hier könnt ihr einen Port nehmen den Ihr für richtig erachtet.

Last but not least die Umgebungsvariablen für den Docker:

Sie erklären sich eigentlich von selbst.
Signups_allowed können wir später auf false setzen nachdem wir uns erfolgreich angemeldet haben.

Soviel erstmal zum Docker zeug. Auf zum Reverse Proxy, den findet ihr hier:

Ihr habt keine domain/ddns für eure Synology ? Ist nicht wild, Synology bringt alles mit was wir brauchen.


Synology selbst bietet ein DDNS an den ihr nutzen könnt. Klickt euch durchs menü und erstellt ggfs. ein DDNS.
Ihr solltet euch zur der DDNS auch noch ein Zertifikat ausstellen lassen:

Okay, wir haben den Docker, wir haben den Reverse Proxy und sogar ein Zertifikat. Was jetzt ?

Der Port muss noch freigegeben werden in der Fritz.Box (oder ähnliches).
Wir melden uns also an der Fritz.Box an und gehen auf „Freigaben“:

sowie „Gerät für Freigaben hinzufügen“ und geben jetzt den öffentlichen Port des Reverse Proxy sowie den Websocket an.
Soweit so gut. Testen wir das ganze und rufen eure DDNS auf mit dem entsprechenden Port der auf den Reverse Proxy zeigt:

Den aufmerksamen unter uns wird aufgefallen sein, das ganze Verbindung ist durch das Synology Zertifikat geschützt:

Konto erstellen und fast Fertig.
Grundsätzlich kann man schon das Webinterface komplett nutzen.
Wir wollen aber noch die Browser Plugins und/oder den Mobiltelefon client installieren.
Das ermöglicht uns im Browser die neue Kennwörter direkt in den Tresor abzulegen, sowie gespeicherte Daten bequem abzurufen.
Am beispiel von Firefox sieht das so aus:

Wir installieren das folgende Browser Plugin:
https://addons.mozilla.org/de/firefox/addon/bitwarden-password-manager/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search

und das sieht dann so aus:

Bevor wir uns anmelden gehen wir zum zahnrad und geben als URL das Webinterface von oben ein.

Analog funktioniert das natürlich auch für Android/IOS. Einfach den Bitwarden Client installieren und als URL beim Zahnrad das Webinterface eingeben.

Okay, soweit so gut. was jetzt ? Der Websocket funktioniert noch nicht so ganz. das fixen wir schnell
Dazu hatte ich das hier gefunden:
https://gist.github.com/nstanke/3949ae1c4706854d8f166d1fb3dadc81
genauer gesagt das hier:
https://gist.github.com/nstanke/3949ae1c4706854d8f166d1fb3dadc81#gistcomment-3795730

Hier muss im Script die IP geändert werden, dann legen wir es im bitwarden docker verzeichnis ab. Dummerweise überschreibt sich bei Änderungen seitens DSM die Anpassung. Wir sollten das Script also einmal am tag in den „Geplante Aufgaben“ legen.
Kann so aussehen:


bash /volume1/docker/vaultwardenvaultwarden__enable_websocket.sh euredomain.eu 35554 35556
Ihr müsst die Ports die ihr ganz oben definiert habt als parameter mitangeben.

Gut. Ansich haben wir hier eigentlich alles fertig, jetzt kommt der versprochende „Fail2Ban“.
Was ist das und wozu brauch ich es:

Fail2Ban liest die log files zyklisch vom bitwarden und schaut ob es fehlerhafte loginversuche gab.
Und wenn man es zuoft versucht wird man für eine Zeit X gesperrt.

Der Schritt ist optional, ich empfehle es aber.

Was brauchen wir? Zuersteinmal das Docker image:

und wir brauchen folgende Mount-Pfade (ggfs. anpassen falls andere Pfade als oben gewählt wurden)

Sowie folgende Umgebungsvariablen:

Im /docker/fail2ban/filter.d/ legen wir eine „vaultwarden.local“ an mit folgenden Inhalt:

[INCLUDES]
before = common.conf

[Definition]
failregex = ^.Username or password is incorrect. Try again. IP: . Username:.$
ignoreregex =

und im /docker/fail2ban/jail.d/ legen wir auch eine „vaultwarden.local“ an mit folgenden Inhalt:

[vaultwarden]
enabled = true
port = 80,443,8081,35554,35555
filter = vaultwarden
action = iptables-allports[name=vaultwarden]
logpath = /vaultwarden/bitwarden_log.log
maxretry = 3
bantime = 1 days
findtime = 10m
ignoreip = 127.0.0.1 192.168.1.0/24 8.8.8.8

Docker durchstarten und das ist es auch schon. Der Bitwarden schreibt seine logs wie ganz oben angegeben in /docker/vaultwarden/bitwarden_log.log und fail2ban liest besagte log file und sperrt ggfs die IP bei mehr als 3 Fehlversuchen für 10 Minuten. Fühlt euch frei die Werte nach euren gusto anzupassen.