Code downloaden

In dit artikel worden voorbeelden van diverse commando's gegeven. Omdat het overtikken van dergelijke opdrachten erg foutgevoelig is, kun je ze beter downloaden en daarna bekijken of kopiëren. Zie het bestand vaultcode.txt, dat je hier kunt downloaden.

Er bestaan verschillende soorten wachtwoordbeheerders. Veel daarvan slaan je kluis met inloggegevens op externe cloudservers op, zoals Google Wachtwoordmanager, Dashlane en Bitwarden. Wie dat liever niet wil, heeft grofweg twee alternatieven: lokale opslag met bijvoorbeeld KeePassXC of Enpass, of een zelfgehoste wachtwoordmanager zoals Passbolt of Vaultwarden.

Bij lokale opslag blijft je kluis op je eigen apparaat staan (het is dus een wachtwoordmanager zonder cloudopslag), maar synchronisatie tussen meerdere apparaten is daardoor minder eenvoudig. Je kunt het kluisbestand wel via een cloudopslagdienst delen, maar daarmee verdwijnt een deel van het lokale karakter. Een zelfgehoste oplossing ligt daarom vaak meer voor de hand. Vaultwarden is daarbij een interessante keuze: de software is gratis, opensource en lichtgewicht, werkt met Bitwarden-clients, gebruikt sterke client-side encryptie en laat je alle gegevens op je eigen server bewaren.

Google bewaart (na aanmelding in Chrome) je wachtwoorden ook in de cloud.

Vaultwarden installeren op Windows: de opzet

In dit artikel laten we zien hoe je Vaultwarden installeert op Windows met Docker Desktop. In de paragrafen Vaultwarden installeren op een Synology-NAS en De publieke Cloudflare-route voor je NAS instellen) lees je hoe je zo'n Vaultwarden-installatie ook op een NAS instelt. Je kunt Vaultwarden op verschillende manieren veilig installeren. Wij maken hiervoor graag gebruik van een Cloudflare-tunnel, om Vaultwarden veilig bereikbaar te maken. Je hebt dan geen poortdoorverwijzing op je router nodig, het werkt ook in complexere routeromgevingen, zoals CGNAT, https wordt automatisch geregeld en de opzet vergt weinig onderhoud.

Een alternatief is het zelf opzetten van een reverse proxy als Nginx Proxy Manager, in combinatie met een dienst als Let's Encrypt voor een SSL/TLS-certificaat om https-verbindingen mogelijk te maken, en eventueel een DDNS-service als je netwerk niet via een vast ip-adres of domeinnaam bereikbaar is. Hiervoor moet je wel poorten openzetten op je router en is de kans op misconfiguratie, en dus op een grotere aanvalsvector, groter.

Een alternatieve installatie met Nginx Proxy Manager (reverse proxy met ssl-certificaat).

WSL2 voorbereiden voor Docker op Windows

Zoals aangegeven gaan we aan de slag met Docker Desktop voor Windows. Met deze tool draai je toepassingen in geïsoleerde containers, zodat je software en bijbehorende afhankelijkheden start zonder lokale installatie.

Docker gebruikt doorgaans WSL2 om Linux-containers, zoals Vaultwarden (en Nginx Proxy Manager), op Windows te draaien.

Controleer of WSL2 actief is door de Opdrachtprompt als administrator te openen en de volgende opdracht uit te voeren:

wsl -l -v

Je ziet dan bijvoorbeeld 'Ubuntu Version 2'. Verschijnt 'Version 1', voer dan het volgende commando uit, zodat Docker straks zeker met WSL 2 werkt:

wsl --set-default-version 2

Krijg je een foutmelding, installeer dan eerst WSL met:

wsl --install

Druk nu voor alle zekerheid op Windows-toets+R, voer optionalfeatures uit en controleer of Platform voor virtuele machine en Windows-subsysteem voor Linux zijn ingeschakeld, wat nodig is voor Docker Desktop.

Controleer de WSL-status en de vereiste onderdelen.

Vaultwarden installeren met Docker Compose

Download de nieuwste versie van Docker Desktop voor Windows (ook beschikbaar voor macOS en Linux) en installeer de tool via het gedownloade exe-bestand. Herstart daarna je pc en start Docker Desktop op. Maak vervolgens in de Verkenner een map voor je Vaultwarden-project (bijvoorbeeld d:\docker\vaultwarden). Maak met een editor zoals Notepad++ een tekstbestand en sla dit in deze map op als compose.yml. Let goed op de inspringingen met (standaard telkens 2) spaties om foutmeldingen te vermijden:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    ports:
      - "8081:80"
    volumes:
      - ./vw-data:/data
    environment:
      ADMIN_TOKEN: "<mijn_token>"
      SIGNUPS_ALLOWED: "true"

Vervang de omgevingsvariabele ADMIN_TOKEN door een eigen lange, willekeurige string (en bewaar deze zorgvuldig). Je kunt ook een andere poort gebruiken, zoals 8080, via:

- "8080:80"

Open daarna de opdrachtprompt in deze map en voer het volgende commando uit:

docker compose config

Ziet alles er goed uit, voer dan het volgende commando uit:

docker compose up -d

Als het goed is zie je deze nu ook draaien in je Docker Desktop-venster (bij Containers). Controleer de Vaultwarden-server lokaal via http://localhost:8081. Als het goed is, verschijnt het inlogvenster van Vaultwarden, maar je kunt de pagina het best meteen weer sluiten omdat de server via http niet goed functioneert.

Het compose-bestand is uitgevoerd: Vaultwarden draait en is (lokaal) bereikbaar.

Een domeinnaam koppelen aan Cloudflare

We maken nu eerst een flinke zijsprong om Vaultwarden correct en veilig te laten draaien. Zoals gezegd maken we hiervoor gebruik van Cloudflare. Deze dienst zorgt ervoor dat je Vaultwarden-server zelf een uitgaande tunnelverbinding maakt naar Cloudflare, zodat er geen open poorten zijn en geen directe inkomende verbindingen naar je netwerk. Je eigen ip blijft verborgen. Bovendien krijg je automatisch een geldig TLS-certificaat voor https en wordt verkeer gefilterd vóór het je server bereikt, zodat malafide verzoeken worden geblokkeerd. Ga hiervoor naar www.cloudflare.com, klik op Start for free en creëer een account (of meld je aan met Google, Apple of GitHub). Even later beland je op je dashboard. Klik hier op +Add en kies Connect a domain als je al een eigen domeinnaam hebt. Je kunt dan de nameservers (laten) aanpassen zodat Cloudflare je DNS beheert. A- en CNAME-records laat je dan via de Cloudflare-proxy lopen (voor webverkeer), terwijl MX- en TXT-records (voor e-mail) ongewijzigd blijven. Je kunt ook kiezen voor Register a domain en een nieuw domein aankopen uit verschillende TLD's. Wijzelf kozen bijvoorbeeld voor het domein tvd-reshift.work. Zodra je domeinnaam aan Cloudflare is gekoppeld, kun je verder.

Ons pas aangekochte domein wordt automatisch aan Cloudflare gekoppeld.

Vaultwarden publiceren via een Cloudflare-tunnel

Nu moeten we nog een tunnel opzetten tussen onze Vaultwarden-server en Cloudflare. Een lokale client (cloudflared) zet een uitgaande, persistente verbinding op naar Cloudflare, die vervolgens als beveiligd transportkanaal dient voor tweerichtingsverkeer tussen Cloudflare en je server.

Open hiervoor de rubriek Zero Trust in je Cloudflare-dashboard en klik op Networks / Connectors. Klik daarna op +Create a tunnel en op Select Cloudflared en geef deze een naam (zoals mijnkluis). Meteen na je bevestiging met Save tunnel verschijnt een downloadlink voor de Cloudflare-client (msi). Voer deze installer uit (met een tweetal muisklikken), open vervolgens de Opdrachtprompt als administrator en voer het commando uit dat je via Copy to Clipboard vanuit je dashboard kunt kopiëren. De tunnel wordt nu gekoppeld en de service start automatisch.

Nu moet je nog een koppeling tussen je publieke adres (domein) en de gewenste interne server (hier Vaultwarden) creëren: een 'published application route', oftewel publieke hostnaam. Hiervoor klik je in de rubriek Connectors op de drie puntjes naast je tunnel en kies je Configure. Open hier het tabblad Published application routes en klik op +Add a published application route.

Vul bij Subdomain bijvoorbeeld mijnkluis in en bij Domain het gekoppelde domein (zoals tvd-reshift.work). Bij Type selecteer je HTTP en bij URL stel je bijvoorbeeld localhost:8081 in (of 8080, afhankelijk van je Vaultwarden-configuratie). Na Save zie je inderdaad de koppeling (bijvoorbeeld mijnkluis.tvd-reshift.work met http://localhost:8081).

Kopieer het commando naar de opdrachtprompt om de tunnel te koppelen.

Je eerste Vaultwarden-account aanmaken

Je kunt nu opnieuw Vaultwarden openen, in de veronderstelling dat deze nog draait in Docker (Desktop). Voortaan gebruik je hiervoor https://<cloudflare_subdomein>.<jouw_domein>, zoals https://mijnkluis.tvd-reshift.work. Cloudflare zorgt automatisch voor de https-verbinding (je Vaultwarden-container blijft op zich lokaal bereikbaar via http, maar laat je zo niet toe je aan te melden).

Vul een e-mailadres in, klik op Account aanmaken, vul je naam in en klik op Doorgaan. Kies een sterk hoofdwachtwoord van minstens 12 tekens (twee keer) en vul een hoofdwachtwoordhint in. Bevestig met Account aanmaken. De Bitwarden-extensie voegen we naderhand toe, klik dus op Later toevoegen en Ga naar webapp. Je komt nu in je dashboard met de logische melding 'Geen items in de kluis'. We leggen zo dadelijk uit hoe je hier allerlei items, zoals logins, kaarten, identiteiten, SSH-sleutels en notities, kunt toevoegen, maar je maakt bij voorkeur eerst eventuele extra accounts aan als het de bedoeling is dat meerdere gebruikers elk hun eigen, end-to-end versleutelde kluis moeten kunnen gebruiken.

Ben je hiermee klaar, dan schakel je nieuwe registraties bij voorkeur uit. Open hiervoor je compose.yml-bestand en zoek de regel:

SIGNUPS_ALLOWED: "true"

Wijzig deze in:

SIGNUPS_ALLOWED: "false"

Voer wederom deze opdracht uit zodat de wijziging wordt toegepast:

docker compose up -d
Het dashboard van Vaultwarden: voorlopig nog een lege kluis.

Wachtwoorden en andere kluisitems toevoegen

We leggen nu kort uit hoe je items aan je kluis kunt toevoegen. Dat kan om te beginnen handmatig, vanuit je dashboard. Open het onderdeel Kluizen en klik op +Nieuw, rechtsboven. Je kunt eventueel beginnen met het toevoegen van een of meer mappen, zodat je items thematisch kunt ordenen, zoals Webshops, Banking, Mail, Sociale media of Sociale media/Forums (voor een submap).

Om bijvoorbeeld een login toe te voegen, open je eerst de gewenste map en klik je op +Nieuw item. Vul de nodige gegevens in, zoals naam, map, gebruikersnaam, wachtwoord, url en eventueel een authenticatiesleutel (TOTP, voor tweestapsverificatie). Bevestig met Opslaan. Klik op de drie puntjes naast een item voor opties zoals Wachtwoord kopiëren, Starten, Favoriet, Bewerken, Verwijderen of Bijlagen.

Gebruikte je al een andere wachtwoordmanager, dan kun je de inhoud meestal overhevelen naar Vaultwarden. We tonen dit aan de hand van Google (Chrome). Open Instellingen in Chrome en kies Automatisch invullen en wachtwoorden / Google Wachtwoordmanager. Ga naar Instellingen en kies Bestand downloaden bij Wachtwoorden exporteren, waarna je het csv-bestand opslaat. Terug in Vaultwarden open je Hulpmiddelen / Importeren, kies je Chrome uit tientallen opties, selecteer je het csv-bestand en bevestig je met Importeren.

Je kunt ook gemakkelijk kluisitems uit andere wachtwoordmanagers importeren.

Vaultwarden gebruiken met de Bitwarden-extensie

Er is nog een derde, erg handige manier om items aan je kluis toe te voegen: de Bitwarden-extensie. We tonen dit in een desktopbrowser (Chrome), maar er bestaan ook mobiele apps voor Android en iOS met een vergelijkbare werking.

Ga naar de Chrome Web Store, zoek naar Bitwarden – wachtwoordbeheerder en klik op Toev. aan Chrome en vervolgens op Extensie toevoegen. Je kunt de extensie eventueel vastpinnen op de extensiewerkbalk. Klik hier op het Bitwarden-pictogram en kies Inloggen. Scrol in het pop-upvenster naar beneden tot je Toegang verkrijgen: bitwarden.com ziet, klik hier op het pijltje, kies Zelfgehost en vul bij Server-URL het juiste adres in: https://<subdomein>.<jouwdomein>. Bevestig met Opslaan en meld je aan met je Vaultwarden-account (e-mailadres en wachtwoord). Als het goed is, wordt logininformatie op webpagina's nu automatisch voorgesteld en kun je deze eenvoudig laten invullen. Vanuit het pop-upvenster kun je via +Nieuw ook nieuwe items toevoegen zonder je browser te verlaten. Op vergelijkbare manier kun je ook wachtwoordsleutels toevoegen: probeer dit bijvoorbeeld even met https://passkeys.io via Create an account en Create a passkey en, na opslag, met Sign in with a passkey.

Merk op dat je via Instellingen, onder in het pop-upvenster, de Bitwarden-extensie nog op allerlei manieren kunt aanpassen, onder meer op het vlak van meldingen, uiterlijk, accountbeveiliging en automatisch invullen.

De (compatibele) Bitwarden-extensie maakt het werken met Vaultwarden nog zo comfortabel.
De (compatibele) Bitwarden-extensie maakt het werken met Vaultwarden nog zo comfortabel.

Vaultwarden beveiligen met Cloudflare Access

Vaultwarden gebruikt end-to-end-versleuteling en je moet je met een sterk hoofdwachtwoord aanmelden, maar je kunt de beveiliging nog verder verhogen met een extra laag via Cloudflare Access. Je kunt er namelijk voor zorgen dat eerst een extra login vereist is vóór toegang tot Vaultwarden mogelijk is. Dit gaat als volgt.

Meld je aan bij Cloudflare en kies Zero Trust / Access controls / Applications. Omdat Cloudflare Access een aparte dienst is, moet je hier een (gratis) Zero Trust-plan activeren via Review and Purchase / Purchase. Ververs eventueel de pagina en kies Add an application. Klik op Select bij Self-hosted. Vul (bijvoorbeeld) Vaultwarden in bij Application name, klik op Add public hostname en vul je subdomein (bijvoorbeeld mijnkluis) en je domein in (bijvoorbeeld tvd-reshift.work). Klik op Next en vervolgens op Save application.

Open je applicatie, klik op Configure en ga naar Policies. Klik op Add a policy. Geef je policy een naam (zoals Vaultwarden-toegang), kies Allow bij Action en selecteer bij Include bijvoorbeeld Emails, waarna je bij Value het e-mailadres invult waarmee je je bij Cloudflare aanmeldt. Je kunt extra voorwaarden toevoegen via Require, zoals Authentication Method (PIN of OTP), Country of IP-ranges. Bevestig met Save.

Wanneer je weer je applicatie opent, kun je op het tabblad Policies via Select existing policies de juiste policy koppelen. Bevestig met Save application en test het uit.

Een extra login vanuit Cloudflare.

Tweestapsverificatie voor Vaultwarden instellen

Je kunt een extra toegangsbeveiliging ook in Vaultwarden zelf activeren. Ga naar Instellingen / Beveiliging en open het tabblad Tweestapsaanmelding. Klik op Beheren bij Authenticatie-app (of bij FIDO2 WebAuthn als je over een geschikte beveiligingssleutel beschikt), vul je hoofdwachtwoord in, scan de QR-code met je authenticator-app, typ de gegenereerde code in en rond af met Inschakelen. Bewaar zorgvuldig je herstelcode.

Tweestapsverificatie in Vaultwarden.

Een veilige back-up van Vaultwarden maken

Weet wel dat (in onze opzet) alle relevante Vaultwarden-data, inclusief je versleutelde kluisitems, zich in één map bevinden. In ons voorbeeld is dat d:\docker\vaultwarden\vw-data. Je doet er verstandig aan deze map op te nemen in een regelmatig uitgevoerde back-up. Om mogelijke databasecorruptie te voorkomen voer je vanuit je projectmap (hier d:\docker\vaultwarden) eerst het volgende commando uit:

docker compose stop

Nadat de back-up is gemaakt start je de server opnieuw met:

docker compose start

Je kunt dit via Taakplanner ook met een eenvoudig batchscript automatiseren, bijvoorbeeld als volgt:

docker compose -f d:\docker\vaultwarden\compose.yml stop
xcopy d:\docker\vaultwarden\vw-data e:\backups\vaultwarden\ /E /I /Y
docker compose -f d:\docker\vaultwarden\compose.yml start
Een back-up met één dubbelklik.

Vaultwarden installeren op een Synology-NAS

Je kunt Vaultwarden, ook in combinatie met een Cloudflare-tunnel, net zo goed op een NAS installeren. We nemen Synology als voorbeeld.

Als je Vaultwarden al op je pc hebt geïnstalleerd en je alle (kluis)data naar je NAS wilt migreren, voer dan eerst het volgende commando uit:

docker compose stop

Kopieer de volledige mapinhoud (d:\docker\vaultwarden\vw-data) naar een map op je NAS, bijvoorbeeld naar /volume1/toon/docker/vaultwarden/vw-data.

Los van deze eventuele migratie voer je nu de volgende procedure uit.

Maak in Cloudflare een (nieuwe) Cloudflared-tunnel aan (bijvoorbeeld vaultwardennas) en kies vervolgens Docker bij Operating system. Noteer het token uit het docker run-commando.

Creëer nu het volgende compose.yml-bestand en plaats dit in de projectmap op je NAS (bij ons: /volume1/toon/docker/vaultwarden), met aangepaste volumes en tokens:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    ports:
- "8080:80"
    volumes:
      - /volume1/toon/docker/vaultwarden/vw-data:/data
    environment:
      ADMIN_TOKEN: "<mijn_admin_token>"
SIGNUPS_ALLOWED: "false"
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: unless-stopped
    command: tunnel run
    environment:
      TUNNEL_TOKEN: "<mijn_tunnel_token>"
    depends_on:
      - vaultwarden
Het yml-bestand is netjes uitgevoerd binnen het Container Manager-project.

De publieke Cloudflare-route voor je NAS instellen

Zorg dat Container Manager op je NAS geïnstalleerd is en start deze app. Open Project en klik op Maken. Geef een projectnaam op, zoals vaultwarden, en verwijs via Pad instellen naar je projectmap op de NAS, zoals /toon/docker/vaultwarden. Bevestig dat je het bestaande compose.yml-bestand gebruikt en klik op Volgende (twee keer) en daarna op Voltooid. Laat het vinkje staan zodat docker compose up -d automatisch start, de images worden gedownload en de containers worden aangemaakt en gestart.

Voeg tot slot in Cloudflare de 'published application route' (publieke host) toe aan de tunnel en stel deze in op http://vaultwarden:80 (de naam van de service en de interne containerpoort, zoals ingesteld in je compose.yml-bestand). Je Vaultwarden-server is nu bereikbaar op https://<cloudflared_subdomein>.<jouw_domein>.

De route wijst naar de servicenaam en de interne containerpoort.

Veelgestelde vragen

Wat is het voordeel van een zelfgehoste wachtwoordmanager?

Een zelfgehoste wachtwoordmanager geeft je controle over de server, opslaglocatie, toegangsregels en back-ups. Je versleutelde kluis staat niet standaard op de infrastructuur van de aanbieder. Daar staat tegenover dat je zelf verantwoordelijk bent voor updates, bereikbaarheid en herstel. Een oplossing als Vaultwarden is vooral geschikt voor gebruikers die enige ervaring hebben met Docker, netwerken en beveiliging.

Hoe veilig is een wachtwoordkluis op een eigen server?

Een eigen wachtwoordkluis kan veilig zijn wanneer de gegevens client-side worden versleuteld en de server correct wordt onderhouden. Gebruik minimaal 1 sterk en uniek hoofdwachtwoord, activeer tweestapsverificatie en installeer beveiligingsupdates tijdig. Beperk daarnaast het aanvalsoppervlak door geen onnodige routerpoorten te openen. De veiligheid hangt uiteindelijk niet alleen af van de software, maar ook van serverbeheer, toegangscontrole en back-ups.

Welke eisen gelden voor een sterk hoofdwachtwoord?

Een sterk hoofdwachtwoord is lang, uniek en nergens anders in gebruik. Kies bij voorkeur minimaal 14 tot 16 tekens of een willekeurige wachtwoordzin van meerdere woorden. Lengte is doorgaans belangrijker dan het verplicht toevoegen van één hoofdletter of symbool. Bewaar daarnaast een herstelprocedure op een veilige, offline locatie. Verlies van het hoofdwachtwoord kan bij end-to-end-versleutelde kluizen betekenen dat de inhoud niet meer toegankelijk is.

Wat is het verschil tussen een Cloudflare-tunnel en poortdoorverwijzing?

Bij poortdoorverwijzing accepteert je router rechtstreeks inkomende verbindingen op een ingestelde poort. Een Cloudflare-tunnel begint juist met een uitgaande verbinding vanaf je eigen server. Daardoor hoef je meestal geen routerpoort openbaar te maken en blijft je publieke ip-adres beter afgeschermd. Een tunnel vereenvoudigt ook HTTPS, maar maakt je wel afhankelijk van een externe netwerkdienst. Aanvullende authenticatie en goede serverbeveiliging blijven noodzakelijk.

Hoe vaak moet je een wachtwoordkluis back-uppen?

Maak bij voorkeur dagelijks een automatische back-up en bewaar meerdere versies. Volg waar mogelijk de 3-2-1-regel: 3 kopieën, op 2 verschillende opslagtypen, waarvan 1 op een andere locatie. Test minstens enkele keren per jaar of herstel werkelijk lukt. Een back-up is pas betrouwbaar wanneer je weet welke bestanden nodig zijn, de kopie niet beschadigd is en eventuele encryptiesleutels beschikbaar blijven.

Welke alternatieven zijn er voor Vaultwarden?

Bitwarden is een beheerde clouddienst met officiële clients en synchronisatie tussen apparaten. KeePassXC bewaart de kluis lokaal in één versleuteld bestand en werkt ook offline. Passbolt richt zich sterker op teams en gedeelde zakelijke wachtwoorden. De beste keuze hangt af van 3 factoren: hoeveel beheer je zelf wilt uitvoeren, of synchronisatie nodig is en of meerdere gebruikers veilig gegevens moeten delen.