Password manager self-hosted: come farlo davvero in sicurezza con Vaultwarden (guida pratica)

Guida pratica per configurare un password manager self-hosted con Vaultwarden in modo sicuro: installazione su Linux, HTTPS, accesso via VPN, hardening, backup e monitoraggio continuo.

La gestione delle credenziali è uno dei punti più critici della sicurezza informatica moderna. Ogni impresa, dal professionista indipendente alla PMI fino alle realtà più strutturate, si trova oggi a dover custodire un numero crescente di password, chiavi API, token e segreti operativi. L’idea di ospitare in locale un password manager nasce da esigenze precise: controllo dei dati, conformità normativa, riduzione della dipendenza da terze parti e integrazione con l’infrastruttura esistente.

Tuttavia, ciò che spesso viene sottovalutato è che un password manager rappresenta uno dei sistemi più sensibili dell’intero perimetro aziendale. In caso di compromissione, l’impatto non è limitato a un singolo servizio ma può propagarsi a tutta l’organizzazione.

Installare e configurare un password manager in self-hosting significa farsi carico dell’intera catena di fiducia: infrastruttura, accessi, aggiornamenti e monitoraggio. Nulla vieta, seguendo una serie di passaggi ben precisi, predisporre un sistema simile anche in ufficio o a casa. Con la possibilità di accedere al contenuto del password manager anche a distanza, in totale sicurezza.

Scelta della soluzione: Vaultwarden o Bitwarden

La prima decisione riguarda la piattaforma da utilizzare. Vaultwarden rappresenta una reimplementazione leggera e compatibile con l’ecosistema Bitwarden. È ideale per ambienti piccoli o medi, richiede poche risorse e può essere installato in pochi minuti tramite Docker.

Bitwarden self-hosted ufficiale, invece, è pensato per contesti aziendali strutturati, con funzionalità avanzate di auditing, gestione utenti, integrazione SSO e supporto commerciale. L’architettura di sicurezza resta simile per entrambe le soluzioni.

Per questa guida adottiamo Vaultwarden come soluzione di riferimento perché consente di realizzare rapidamente un ambiente self-hosted leggero, completamente compatibile con Bitwarden e sufficientemente flessibile per illustrare in modo pratico tutte le principali configurazioni di sicurezza, senza la necessità di un’infrastruttura enterprise complessa.

Architettura di riferimento per un password manager sicuro e self-hosted

Una configurazione realmente sicura non espone direttamente il password manager su Internet. La struttura consigliata è composta da:

  • server Linux dedicato;
  • container Docker isolato per il password manager;
  • reverse proxy con TLS;
  • accesso consentito solo tramite VPN o Zero Trust;
  • backup cifrati e replicati off-site.

Il servizio applicativo collegato al funzionamento del password manager deve essere accessibile solo in locale (localhost) e non esposto direttamente sulla rete pubblica.

Come installare Vaultwarden su server Linux

Prima di procedere con l’installazione di Vaultwarden è necessario predisporre un ambiente server adeguato, stabile e soprattutto sicuro.

La qualità della configurazione iniziale incide direttamente sulla robustezza dell’intero sistema. L’obiettivo è creare una base pulita, aggiornata e protetta, su cui eseguire il servizio in modo isolato. Ciò significa partire da un sistema operativo aggiornato, limitare i servizi esposti, configurare correttamente il firewall e predisporre gli strumenti necessari alla gestione dei container.

Una preparazione accurata del server consente non solo di ridurre la superficie d’attacco, ma anche di semplificare la gestione futura degli aggiornamenti, dei backup e delle operazioni di manutenzione.

Nei passaggi successivi vedremo quindi come configurare l’ambiente Linux, installare Docker e impostare i primi controlli di sicurezza fondamentali prima di distribuire Vaultwarden.

Preparazione del server

Prima di cimentarsi con la configurazione del password manager, è bene attrezzarsi con un server Linux aggiornato (ad esempio Ubuntu 24.04 LTS), con firewall attivo e accesso SSH limitato.

Per l’installazione dei componenti di base, si può procedere come segue:

apt update && apt upgrade -y
apt install docker.io docker-compose ufw -y

I comandi che seguono abilitano il firewall e consentono tutto il traffico SSH da e verso il server:

ufw allow OpenSSH
ufw enable

Predisposizione del servizio Vaultwarden tramite container

Una volta predisposto il server Linux, si può procedere con la distribuzione vera e propria di Vaultwarden. In questa fase si avvia il servizio all’interno di un container isolato, configurato per essere raggiungibile solo localmente e pronto per essere esposto in modo controllato tramite reverse proxy.

Il dominio assegnato all’istanza di Vaultwarden può essere locale (ad esempio vault.local), dal momento che non esponiamo nulla sulla rete Internet: i certificati possono essere autofirmati o generati tramite una Certification Authority interna.

L’uso di un dominio pubblico diventa necessario solo nel caso in cui si vogliano utilizzare certificati pubblici (come Let’s Encrypt) o rendere il servizio accessibile direttamente da Internet. In alternativa, è possibile ottenere certificati validi anche senza esporre il server, utilizzando la validazione DNS challenge.

La scelta dipende quindi dal modello di accesso previsto: per ambienti chiusi o professionali, l’accesso esclusivamente tramite VPN con certificati interni rappresenta generalmente l’opzione più sicura.

Preparazione del container Docker

Come primo passo, si può creare la cartella di riferimento:

mkdir /opt/vaultwarden
cd /opt/vaultwarden

si può creare un file docker-compose.yml contenente quanto segue:

version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=false
      - ADMIN_TOKEN=TOKEN_FORTE
      - DOMAIN=https://vault.local
    volumes:
      - ./data:/data
    ports:
      - "127.0.0.1:8080:80"

Per poi avviare il container:

docker compose up -d

Il container Vaultwarden espone un servizio Web sulla porta 80. Si potrebbe teoricamente esporre direttamente quella porta ma ciò crea diversi problemi: niente gestione TLS avanzata, niente gestione centralizzata certificati, niente header di sicurezza, niente reverse proxy, niente controllo accessi a monte.

La configurazione proposta in questa guida estende le indicazioni ufficiali di Vaultwarden introducendo controlli aggiuntivi (VPN, certificati interni, isolamento del servizio) con l’obiettivo di adattare l’installazione a contesti professionali dove la protezione delle credenziali richiede un livello di sicurezza superiore rispetto a un’installazione base.

Configurazione HTTPS con certificati interni

Per garantire comunicazioni HTTPS sicure senza esporre il servizio su Internet, è necessario disporre di certificati TLS affidabili anche all’interno della rete privata.

In assenza di un’autorità di certificazione pubblica, la soluzione più corretta è creare una Certification Authority interna (CA), che permetta di emettere e firmare certificati validi per i servizi aziendali.

Questa CA interna diventa il punto di fiducia per tutti i dispositivi autorizzati: installando il certificato della CA sui client, ogni connessione verso il password manager sarà riconosciuta come sicura senza generare avvisi o errori.

I seguenti comandi permettono di creare una CA e di creare un certificato per il server:

openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt

openssl genrsa -out vault.local.key 2048
openssl req -new -key vault.local.key -out vault.local.csr
openssl x509 -req -in vault.local.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out vault.local.crt -days 825 -sha256

Configurazione NGINX con TLS interno

Una volta generati i certificati firmati dalla Certification Authority interna, è necessario configurare il reverse proxy per gestire in modo corretto il traffico HTTPS verso Vaultwarden. In questa fase il Web server NGINX svolge un ruolo centrale: gestisce la connessione TLS, applica le impostazioni di sicurezza e inoltra le richieste al servizio in esecuzione in locale.

L’obiettivo è garantire che tutte le comunicazioni tra client e password manager avvengano su canale cifrato e autenticato, pur rimanendo all’interno della rete privata o della VPN. Configurare NGINX con TLS interno consente inoltre di centralizzare la gestione dei certificati, semplificare il rinnovo e introdurre eventuali controlli aggiuntivi, come header di sicurezza e restrizioni sugli accessi.

Si parte ovviamente con l’installazione di NGINX:

sudo apt install nginx -y

Per poi proseguire con l’impostazione del seguente virtual host:

server {
    listen 443 ssl;
    server_name vault.local;

    ssl_certificate /etc/nginx/certs/vault.local.crt;
    ssl_certificate_key /etc/nginx/certs/vault.local.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Configurazione del virtual host

L’impostazione del virtual host, su Ubuntu (Debian e derivate), si concretizza con la creazione di un file di configurazione in sites-available, abilitandolo con un link simbolico in sites-enabled. Quanto proposto al paragrafo precedente va incollato nel file aperto con l’editor di testo:

sudo nano /etc/nginx/sites-available/vaultwarden

Successivamente si può applicare il virtual host e disattivare la configurazione di default:

sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/vaultwarden

sudo rm /etc/nginx/sites-enabled/default

I certificati generati in precedenza vanno posizionati nella cartella seguente:

sudo mkdir -p /etc/nginx/certs
sudo chmod 700 /etc/nginx/certs

Come ultimo passo, è indispensabile disporre il riavvio di NGINX:

systemctl restart nginx

Distribuzione del certificato CA ai client

Per evitare errori HTTPS, è necessario installare ca.crt su tutti i dispositivi che si collegano con il password manager:

  • Windows. Premere Windows+R, digitare certmgr.msc quindi accedere alla sezione Autorità di certificazione radice attendibili.
  • macOS. Portachiavi di sistema.
  • Linux. Il certificato della CA va copiato nella directory di sistema /usr/local/share/ca-certificates/ e poi registrato con il comando update-ca-certificates, che aggiorna l’elenco delle autorità attendibili del sistema.
  • Dispositivi mobili. Importazione manuale del certificato.

Accesso remoto sicuro tramite VPN

Dopo aver configurato il password manager in ambiente locale e protetto con certificato TLS interno, è necessario definire come gli utenti autorizzati possano accedervi anche dall’esterno della rete aziendale o domestica. Esporre direttamente il servizio su Internet aumenterebbe significativamente la superficie d’attacco, rendendo il sistema più vulnerabile a scansioni automatiche e tentativi di intrusione.

Per questo motivo, l’approccio più sicuro consiste nell’utilizzare una Virtual Private Network (VPN), che crea un canale cifrato tra i dispositivi degli utenti e la rete in cui risiede Vaultwarden. In questo modo il servizio resta accessibile solo a client autenticati e autorizzati, mantenendo l’infrastruttura isolata dalla rete pubblica.

L’installazione di WireGuard è molto semplice:

sudo apt install wireguard -y

Si deve quindi procedere con la generazione delle chiavi (operazione da effettuare anche sui client):

wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub

Nel file di configurazione di WireGuard ( sudo nano /etc/wireguard/wg0.conf ) si deve inserire quanto segue:

[Interface]
PrivateKey = CHIAVE_SERVER
Address = 10.10.0.1/24
ListenPort = 51820

# client autorizzato
[Peer]
PublicKey = CHIAVE_PUBBLICA_CLIENT
AllowedIPs = 10.10.0.2/32

Dopo aver avviato WireGuard e aggiornato la configurazione del firewall ufw, Vaultwarden diventa accessibile via VPN su vault.local:

wg-quick up wg0
systemctl enable wg-quick@wg0

ufw allow 51820/udp

Hardening della sicurezza

Messo in funzione il password manager, la fase più importante è il rafforzamento delle misure di sicurezza operative. Un password manager contiene l’intero patrimonio di credenziali: per questo motivo ogni impostazione deve essere configurata in modo restrittivo, riducendo al minimo la superficie d’attacco e limitando gli accessi ai soli utenti autorizzati.

La creazione libera di account è una delle principali fonti di rischio. Vaultwarden deve essere configurato in modo da impedire qualsiasi registrazione autonoma, consentendo l’accesso solo agli utenti invitati esplicitamente dall’amministratore.

Gli account devono essere creati esclusivamente tramite invito manuale. In questo modo l’amministratore mantiene il controllo su chi può accedere al sistema, a quali organizzazioni e collezioni appartiene, quali privilegi operativi possiede.

Ogni account deve essere protetto con MFA (Multi-Factor Authentication). Le opzioni più robuste supportate da Vaultwarden includono:

  • TOTP (app autenticatore)
  • FIDO2 / WebAuthn (chiavi hardware)
  • YubiKey o dispositivi equivalenti

L’autenticazione a due fattori riduce drasticamente il rischio di compromissione in caso di furto della password master.

Password master robuste e uniche

La sicurezza del vault ovvero del contenuto del password manager dipende direttamente dalla qualità della password master. È indispensabile imporre:

  • lunghezza elevata (almeno 16–20 caratteri);
  • utilizzo di passphrase lunghe anziché password corte complesse;
  • unicità assoluta (mai riutilizzata su altri servizi).

Backup e disaster recovery

La protezione dei dati di Vaultwarden non può basarsi su copie locali salvate nello stesso server: un guasto hardware, un attacco ransomware o un errore umano comprometterebbero contemporaneamente sistema e backup. Per questo motivo è necessario adottare una strategia intelligente che preveda la creazione di copie su un sistema separato.

Un approccio pratico consiste nell’inviare direttamente l’archivio verso un server di backup tramite SSH cifrato. Esempio:

#!/bin/bash

DATA=$(date +%F)
BACKUP_FILE="vaultwarden_$DATA.tar.gz"

tar -czf - /opt/vaultwarden/data \
| ssh backup@server-remoto "cat > /backup/$BACKUP_FILE"

Per proteggere ulteriormente i dati si dovrebbe abilitare la cifratura GPG dei dati di backup:

tar -czf - /opt/vaultwarden/data \
| gpg --encrypt --recipient backup@azienda.it \
| ssh backup@server-remoto "cat > /backup/vaultwarden_$(date +%F).tar.gz.gpg"

In questo modo, anche se il server remoto fosse compromesso, i dati restano cifrati e inutilizzabili da parte di qualsivoglia malintenzionato.

L’operazione di backup può essere quindi automatizzata con l’uso di crontab.

Note finali

La configurazione descritta in questa guida rappresenta una base solida e già adeguata per un utilizzo professionale, ma può essere ulteriormente raffinata in funzione del livello di maturità dell’infrastruttura e dei requisiti di sicurezza richiesti. In contesti più evoluti, ad esempio, si può integrare Vaultwarden con un sistema di autenticazione centralizzato (SSO o directory aziendale), introdurre controlli di accesso basati su ruoli più granulari e adottare soluzioni di gestione delle identità più strutturate.

Un ulteriore miglioramento riguarda il perimetro di rete: è possibile affiancare alla VPN meccanismi di accesso Zero Trust, limitare l’accesso al reverse proxy tramite allowlist di indirizzi IP, oppure introdurre sistemi di Web Application Firewall per aumentare la protezione a livello applicativo. Anche la gestione dei certificati può essere automatizzata utilizzando una Certification Authority interna con rinnovo automatico e distribuzione centralizzata sui client.

Sul piano operativo, è consigliabile formalizzare procedure di gestione degli utenti (onboarding e revoca accessi), definire policy di rotazione delle credenziali più critiche e testare periodicamente i piani di backup e ripristino per verificare che i dati possano essere recuperati in modo affidabile.

Sono miglioramenti non obbligatori per tutte le realtà, ma rappresentano l’evoluzione naturale di un’implementazione già sicura verso un modello di gestione delle credenziali sempre più maturo, strutturato e robusto.

Conclusioni

Il self-hosting di un password manager rappresenta una scelta che consente di mantenere il pieno controllo sui dati e sull’infrastruttura, ma richiede disciplina e attenzione costante.

L’architettura illustrata — basata su isolamento del servizio, accesso tramite VPN, certificati interni e hardening delle configurazioni — permette di ridurre in modo significativo la superficie d’attacco e assicura un elevato livello di protezione delle credenziali.

Accanto a questi aspetti, non deve essere trascurato il tema del logging e del monitoraggio continuo. Registrare gli accessi, tracciare le operazioni critiche e analizzare eventuali anomalie consente di individuare tempestivamente comportamenti sospetti o tentativi di intrusione. L’integrazione dei log di Vaultwarden, del reverse proxy e della VPN in un sistema centralizzato di raccolta e analisi (anche semplice, in contesti ridotti) rafforza ulteriormente la capacità di difesa.

Un password manager self-hosted, se progettato e gestito correttamente, diventa quindi un elemento solido dell’infrastruttura di sicurezza: uno strumento affidabile che protegge le credenziali nel tempo, garantendo al contempo controllo, riservatezza e continuità operativa.

Questo articolo contiene link di affiliazione: acquisti o ordini effettuati tramite tali link permetteranno al nostro sito di ricevere una commissione nel rispetto del codice etico. Le offerte potrebbero subire variazioni di prezzo dopo la pubblicazione.

Ti consigliamo anche

Link copiato negli appunti