Et passordhvelv med godt over to tusen oppføringer lå hos en ekstern leverandør, mot en fast månedlig regning. Ønsket var greit nok: behold de samme klientene og de samme funksjonene, men flytt dataene hjem på egen maskin og bli kvitt abonnementet. Svaret ble selvhostet Vaultwarden.
Vaultwarden er en lettvekts serverimplementasjon som snakker Bitwarden-protokollen. Poenget er at alle de offisielle Bitwarden-klientene (desktop, mobil, nettleser, CLI) fungerer helt uendret. Premiumfunksjoner som TOTP og filvedlegg følger med uten lisens. Og selve serveren? En enkelt binærfil med en SQLite-database ved siden av. Ikke stort mer.
Reverse proxy og HTTPS

Vaultwarden serverer selve hvelvet på en vanlig HTTP-port, men sanntids-synkingen mellom enhetene går over en egen WebSocket-hub (notifications-hub) på en intern port. Her er det lett å snuble: reverse proxyen må både terminere HTTPS og slippe WebSocket-oppgraderingen gjennom. Glemmer du det siste, får du ikke push-oppdateringer når en oppføring endres på en annen enhet, og du sitter og lurer på hvorfor telefonen henger etter.
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://localhost:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Migrering

Selve flyttingen gikk via en kryptert JSON-eksport fra det gamle hvelvet, som så ble importert i Vaultwarden. Én ting å være klar over: eksportfila ligger i klartekst mens importen står på. Slett den med én gang du er ferdig. Blir den liggende igjen på disk, har du i praksis hele hvelvet ditt liggende åpent i ren tekst.
shred -u vault-export.json
Til bulk-arbeidet og verifiseringen brukte jeg bw CLI. Trikset etterpå er enkelt: tell antall oppføringer etter import og hold det opp mot kilden. Er tallene like, stemmer migreringen.
export BW_SERVER=https://vault.eksempel.no
bw login
bw sync
bw list items | jq length
De vel to tusen oppføringene kom over uten tap. TOTP-koder og vedlegg fulgte pent med i eksporten.
Backup er nå ditt ansvar
Så snart leverandøren ikke lenger passer på dataene dine, er sikkerhetskopi plutselig ditt problem. Hele tilstanden bor i datamappa: SQLite-fila, RSA-nøklene og vedleggene. Ta en kryptert kopi og legg den et annet sted enn selve serveren, av åpenbare grunner.
tar czf - /data | \
gpg --symmetric --cipher-algo AES256 \
> vw-backup-$(date +%F).tar.gz.gpg
Sett dette opp som en fast jobb og send resultatet offsite. Mister du datamappa uten backup, mister du alt sammen, og denne gangen finnes det ingen leverandør å ringe.
Oppsummert
- Vaultwarden gir deg full Bitwarden-kompatibilitet, men med dataene på egen maskin.
- Husk å slippe WebSocket gjennom proxyen, ellers ryker sanntids-synkingen.
- Slett den ukrypterte eksportfila i det sekundet importen er ferdig.
- Verifiser med bw CLI ved å telle oppføringer mot kilden.
- Kryptert, offsite backup av datamappa er ikke noe du kan hoppe over.



