⌂ Self-hosting

Vaultwarden: ospitare in casa il gestore di password

Vaultwarden è un server compatibile con i client Bitwarden: come installarlo, chiudere le registrazioni, proteggere il pannello e fare backup sicuri.

Ospitare il proprio gestore di password è una delle decisioni più delicate del self-hosting: il servizio custodisce le chiavi di tutto il resto. Vaultwarden è una reimplementazione leggera, scritta in Rust, del server di Bitwarden. È compatibile con le app ufficiali di Bitwarden per browser, desktop e telefono, ma consuma una frazione delle risorse del server originale e gira comodamente anche su un piccolo computer a scheda singola.

Perché il rischio è minore di quanto sembri

Il modello di sicurezza di Bitwarden si basa sulla cifratura lato client: la cassaforte viene cifrata sul dispositivo con una chiave derivata dalla password principale, e il server riceve solo dati già cifrati. Anche chi ottenesse una copia del database vedrebbe blocchi illeggibili, a patto che la password principale sia lunga e unica.

Questo non rende il server irrilevante. Chi lo controlla potrebbe, in teoria, servire un'interfaccia web modificata per catturare la password. Per questo la sicurezza del sistema che ospita Vaultwarden e l'uso preferibile delle app installate, invece della cassaforte web, restano importanti.

Installazione

Vaultwarden si distribuisce come immagine Docker unica. Un esempio essenziale:

services:
  vaultwarden:
    image: vaultwarden/server:1.32.0
    environment:
      DOMAIN: "<indirizzo completo del servizio, con https>"
      SIGNUPS_ALLOWED: "false"
      ADMIN_TOKEN: "<hash argon2 generato con vaultwarden hash>"
    volumes:
      - ./vw-data:/data
    restart: unless-stopped

Tre aspetti vanno compresi fin dall'inizio:

  1. HTTPS è obbligatorio. La cassaforte web usa le funzioni crittografiche del browser, che funzionano solo in un contesto sicuro. Davanti a Vaultwarden serve quindi un reverse proxy con un certificato valido.
  2. La variabile DOMAIN deve corrispondere esattamente all'indirizzo usato, altrimenti allegati e alcune funzioni di accesso non funzionano.
  3. La versione va fissata invece di usare un tag generico, per aggiornare consapevolmente.

Chiudere la porta d'ingresso

Un server con registrazioni aperte permette a chiunque lo raggiunga di creare un account. La procedura corretta è:

  • creare gli account necessari, oppure inviare gli inviti dal pannello di amministrazione;
  • impostare SIGNUPS_ALLOWED=false;
  • se servono nuovi utenti in futuro, usare gli inviti, che richiedono la configurazione di un server di posta in uscita (SMTP).

Il pannello di amministrazione

Il pannello /admin consente di gestire utenti, organizzazioni e impostazioni. È protetto dal valore ADMIN_TOKEN, che non va salvato in chiaro: il comando integrato vaultwarden hash genera un hash Argon2 da inserire nella configurazione. Una buona pratica è disattivare del tutto il pannello quando non serve, rimuovendo la variabile, oppure renderlo raggiungibile solo dalla rete locale tramite una regola del reverse proxy.

Secondo fattore e accesso

Vaultwarden supporta i metodi di autenticazione a due fattori dei client Bitwarden: codici TOTP da un'app di autenticazione, chiavi di sicurezza FIDO2/WebAuthn e codici via email. Per un gestore di password conviene una chiave fisica o almeno un TOTP, conservando i codici di recupero su carta in un luogo sicuro.

Sul fronte dell'esposizione, ci sono due approcci:

Approccio Vantaggi Svantaggi
Solo VPN / rete privata superficie d'attacco minima serve la VPN attiva per sincronizzare
Pubblico dietro reverse proxy sincronizzazione ovunque servono aggiornamenti puntuali e protezione dai tentativi ripetuti

È utile sapere che i client mantengono una copia cifrata della cassaforte: se il server non è raggiungibile, le password già sincronizzate restano consultabili. Le modifiche vengono inviate alla riconnessione. Questo rende l'approccio «solo VPN» più pratico di quanto si immagini.

Backup: la parte che non si può sbagliare

La cartella /data contiene tutto: il database (SQLite per impostazione predefinita), gli allegati, le chiavi RSA del server e la configurazione. Copiare il file SQLite mentre il servizio scrive può produrre una copia corrotta; è meglio usare il comando di backup di SQLite:

sqlite3 vw-data/db.sqlite3 ".backup '/backup/vw-$(date +%F).sqlite3'"

Insieme al dump vanno salvati la cartella attachments, i file rsa_key* e config.json se presente. Le copie vanno cifrate e conservate anche fuori casa.

C'è poi un secondo livello di sicurezza indipendente dal server: l'esportazione cifrata della cassaforte dal client, da fare periodicamente e conservare su un supporto offline. Se il server andasse perso del tutto, quel file permetterebbe di importare le password in qualsiasi installazione nuova.

Un piano per l'emergenza

Un gestore di password ospitato in casa crea una dipendenza: se il server si guasta mentre si è in viaggio, o se chi lo amministra non è disponibile, la famiglia deve comunque poter accedere. Conviene preparare un foglio, conservato in un luogo sicuro, con le istruzioni per ripristinare il backup e le credenziali di emergenza, e valutare la funzione di accesso di emergenza tra utenti offerta dai client.

In sintesi

  • Vaultwarden è compatibile con le app Bitwarden e consuma pochissime risorse.
  • La cifratura avviene sul dispositivo, ma il server va comunque protetto con cura.
  • Registrazioni chiuse, pannello di amministrazione con hash Argon2 e HTTPS sono obbligatori.
  • Il backup deve usare il comando di SQLite e includere allegati e chiavi.
  • Un'esportazione cifrata offline e istruzioni di emergenza completano la sicurezza.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche