
Negli ultimi anni la gestione delle password è diventata un tema centrale per chiunque si occupi di sicurezza informatica, sia in ambito personale che professionale.
Tra i tanti password manager disponibili, Bitwarden si è affermato come una delle soluzioni open source più apprezzate, grazie alla sua compatibilità multipiattaforma e alle funzionalità avanzate di condivisione e organizzazione dei dati.
Per chi, come me, preferisce mantenere il pieno controllo dei propri dati attraverso soluzioni self-hosted, Vaultwarden rappresenta l’alternativa ideale: si tratta di un’implementazione non ufficiale del server Bitwarden, scritta in Rust, estremamente leggera e perfettamente compatibile con tutti i client ufficiali (estensioni browser, app mobile, desktop).
Questo la rende una scelta particolarmente indicata per ambienti homelab, dove risorse hardware contenute e semplicità di gestione sono priorità assolute.
In questa guida vedremo passo per passo come installare e configurare Vaultwarden su Ubuntu Server 26.04, utilizzando Docker e Docker Compose per un deployment pulito e facilmente riproducibile.
Affronteremo l’installazione del container, la configurazione delle variabili d’ambiente essenziali, l’impostazione di un reverse proxy per l’accesso sicuro via HTTPS, e la gestione dei certificati in un contesto di laboratorio locale. Al termine della guida avrete un’istanza di Vaultwarden pienamente funzionante, pronta per essere utilizzata come gestore password centralizzato per la vostra infrastruttura.
AGGIORNAMENTO DEL SISTEMA E PREREQUISITI
Eseguire i comandi:
|
0
1
2
|
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl
|
INSTALLAZIONE DI DOCKER
Ubuntu 26.04 supporta nativamente il repository ufficiale Docker. Docker CE 29.4.0 supporta Ubuntu 26.04 nativamente dal giorno del rilascio, senza bisogno di workaround o pinning a codename precedenti.
Installare la chiave GPG ufficiale Docker con i comandi:
|
0
1
2
3
4
|
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
Confiugurare il repository (formato DEB822) con i comandi:
|
0
1
2
3
4
5
6
7
|
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
|
Quindi eseguire i comandi:
|
0
1
2
|
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
NOTA BENE: se ricevi un 404 sull’apt update (repository Docker non ancora popolato per resolute), puoi sostituire temporaneamente il codename con noble (Ubuntu 24.04), dato che i pacchetti sono compatibili a livello binario. In tal caso modifica il file docker.sources cambiando Suites: resolute in Suites: noble. Margrop Blog
Verificare l’installazione con i seguenti comandi:
|
0
1
2
|
sudo systemctl enable --now docker
sudo docker run --rm hello-world
|
Aggiungere il tuo utente al gruppo docker se vuoi eseguire comandi senza sudo con il comando:
|
0
1
2
|
sudo usermod -aG docker $USER
newgrp docker
|
STRUTTURA DIRECTORY PER VAULTWARDEN
Creare le cartelle con il comando:
|
0
1
2
|
sudo mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden
|
CREAZIONE DEL FILE DOCKER-COMPOSE
Creare il file docker-compose.yml con il comando:
|
0 |
sudo nano /opt/vaultwarden/docker-compose.yml
|
Quindi incollare il seguente contenuto:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.tuodominio.it"
SIGNUPS_ALLOWED: "false" # metti a true solo per il primo utente, poi disattiva
WEBSOCKET_ENABLED: "true"
ADMIN_TOKEN: "GENERA_UN_TOKEN_FORTE_QUI"
LOG_FILE: "/data/vaultwarden.log"
TZ: "Europe/Rome"
volumes:
- /opt/vaultwarden/data:/data
ports:
- "192.168.80.34:8080:80" # bind solo su localhost, esposto poi via NPM
|
Salvare e chiudere il file di configurazione
Generare un ADMIN_TOKEN sicuro (per accedere al pannello admin di Vaultwarden) con il comando:
|
0 |
openssl rand -base64 48
|
Incollare il risultato al posto di GENERA_UN_TOKEN_FORTE_QUI.
AVVIO DEL CONTAINER
Eseguire i comandi di seguito per avviare il container:
|
0
1
2
|
cd /opt/vaultwarden
sudo docker compose up -d
|
Verificare il container con il comando:
|
0 |
sudo docker compose logs -f
|
Se è tutto OK dovremmo visualizzare il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
vaultwarden | /--------------------------------------------------------------------\
vaultwarden | | Starting Vaultwarden |
vaultwarden | | Version 1.36.0 |
vaultwarden | |--------------------------------------------------------------------|
vaultwarden | | This is an *unofficial* Bitwarden implementation, DO NOT use the |
vaultwarden | | official channels to report bugs/features, regardless of client. |
vaultwarden | | Send usage/configuration questions or feature requests to: |
vaultwarden | | https://github.com/dani-garcia/vaultwarden/discussions or |
vaultwarden | | https://vaultwarden.discourse.group/ |
vaultwarden | | Report suspected bugs/issues in the software itself at: |
vaultwarden | | https://github.com/dani-garcia/vaultwarden/issues/new |
vaultwarden | \--------------------------------------------------------------------/
vaultwarden |
vaultwarden | [NOTICE] You are using a plain text `ADMIN_TOKEN` which is insecure.
vaultwarden | Please generate a secure Argon2 PHC string by using `vaultwarden hash` or `argon2`.
vaultwarden | See: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token
vaultwarden |
vaultwarden | [2026-07-12 00:02:59.873][vaultwarden::auth][INFO] Private key 'data/rsa_key.pem' created correctly
vaultwarden | [2026-07-12 00:02:59.975][start][INFO] Rocket has launched from http://0.0.0.0:80
|
CONFIGURAZIONE REVERSE PROXY (NGINX PROXY MANAGER)
In questo tutorial utlizzerò come Reverse Proxy NPM
Creare un nuovo Proxy Host con queste info:
Domain: vault.lab.prv
Scheme: http
Forward Hostname/IP: IP del server dove gira Vaultwarden
Forward Port: 8080
Abilitare Websockets Support (fondamentale per la sync in tempo reale)
Tab SSL: richiedi certificato Let’s Encrypt, forza HTTPS.
ATTENZIONE: Vaultwarden richiede HTTPS per funzionare correttamente con le app client (browser extension, mobile), quindi il certificato non è opzionale.
PRIMO ACCESSO TRAMITE WEB GUI E CREAZIONE UTENTE
Aprire un qualsiasi browser e richiamare https://vault.lab.prv
Cliccare su Crea Account
Inserire l’indirizzo email e il nome quindi cliccare Continua
Inserire la Password quindi cliccare Create Account
Installare l’estensione o cliccare Più tardi per installarla in seguito
Cliccare Vai a Bitwarden WEB
Se è andato tutto a buon fine dovremmo visualizzare la Dashboard di Vaultwarden come mostrato nell’immagine sovrastante
Dopo aver creato l’utente admin disattivare la possibilità di registrare utenti modificando all’interno del file docker-compose.yml il seguente valore:
|
0 |
SIGNUPS_ALLOWED: "false"
|
Salvare e chiudere il file YAML
Quindi eseguire il comando:
|
0 |
sudo docker compose up -d
|
ACCESSO AL PANNELLO DI AMMINISTRAZIONE
Raggiungibile su https://vault.lab.prv/admin richiede il token generato in precedenza.
Inserire il Token quindi cliccare Enter
Se è tutto OK dovremmo accedere all’interfaccia Admin di Vaultwarden
Dal tab Users è possibile aggiungere gli utenti
Dal Tab Diagnostic è possibile vedere tutte le informazioni relative al server Vault
BACKUP
Il volume /opt/vaultwarden/data contiene tutto (database SQLite, attachments, config).
Backup consigliato con il comando:
|
0 |
sudo tar czf vaultwarden-backup-$(date +%F).tar.gz /opt/vaultwarden/data
|
Puoi integrarlo facilmente nel tuo stack Veeam/backup esistentem o schedularlo con un cron job verso il NAS.
AGGIORNAMENTI DI VAULTWARDEN
Per eseguire gli aggiornamenti di VaultWarden eseguire i comandi:
|
0
1
2
3
4
|
cd /opt/vaultwarden
sudo docker compose pull
sudo docker compose up -d
|
FUNZIONALITA’ PRINCIPALI
Gestione password e vault
- Password, note sicure, identità, carte di credito
- Cartelle e organizzazione vault
- Generatore di password/passphrase integrato
- Ricerca full-text nel vault
- Allegati ai singoli item (es. PDF, chiavi SSH)
Sincronizzazione multi-dispositivo
- Estensioni browser (Chrome, Firefox, Edge, Safari, Brave)
- App mobile (iOS/Android)
- App desktop (Windows/Mac/Linux)
- CLI ufficiale Bitwarden
- Sync in tempo reale via WebSocket (quello che abbiamo abilitato con WEBSOCKET_ENABLED)
Organizzazioni e condivisione (gratis su Vaultwarden, a pagamento su Bitwarden ufficiale)
- Creazione organizzazioni multiple
- Condivisione password tra utenti/gruppi
- Collections con permessi granulari
- Questo è uno dei motivi principali per cui la gente sceglie Vaultwarden: su Bitwarden cloud le organizzazioni richiedono piano a pagamento, qui sono gratuite
Autenticazione a due fattori (2FA)
- TOTP (Google Authenticator, Authy, ecc.)
- WebAuthn/FIDO2 (chiavi hardware tipo YubiKey)
- Duo (con configurazione aggiuntiva)
- Email 2FA
- Yubikey OTP
Bitwarden Send
- Condivisione sicura e temporanea di testo/file con link, scadenza automatica, password opzionale
Pannello admin (/admin)
- Gestione utenti (creazione, disabilitazione, eliminazione)
- Statistiche generali istanza
- Configurazione SMTP per invii email (inviti, reset password)
- Diagnostica (test connessione, versione, ecc.)
- Backup/export diagnostica
Import/Export
- Import da centinaia di altri password manager (LastPass, 1Password, KeePass, Chrome, ecc.)
- Export in formati cifrati o JSON/CSV
Emergency Access
- Designazione di un contatto di emergenza che può richiedere accesso al vault dopo un periodo di attesa configurabile
PRO E CONTRO
PRO
- Leggerissimo: Un singolo binario Rust, consumo RAM/CPU minimo — perfetto per homelab, gira bene anche su Raspberry Pi
- Compatibilità client al 100%: Usa le stesse app/estensioni ufficiali Bitwarden, nessuna app custom da installareù
- Funzionalità premium gratis: Organizzazioni, 2FA avanzato, Send: tutto ciò che su Bitwarden cloud richiede abbonamento qui è gratuito
- Self-hosted: controllo totale datiNessun dato transita su server terzi, importante per compliance/privacy
- Community attiva: Sviluppo costante, rilasci frequenti, ben documentato
- Facile da backuppare: Tutto in un volume/cartella (SQLite di default), backup semplice da integrare in Veeam o script cron
- Basso attack surface: Codice compatto rispetto al server ufficiale Bitwarden (che è containerizzato in decine di microservizi via bitwarden/self-host)
CONTRO
- Non ufficiale/non supportato da Bitwarden Inc.: Se qualcosa si rompe, supporto solo community (GitHub issues, Discord), nessun SLA
- Rischio di rottura compatibilità: Bitwarden Inc. può cambiare API client senza preavviso; Vaultwarden deve rincorrere gli aggiornamenti a volte con ritardo di giorni/settimane
- SQLite come DB di default: Va benissimo per uso personale/piccolo team, ma non scala bene per centinaia di utenti simultanei (puoi comunque passare a MySQL/PostgreSQL se serve)
- Nessuna interfaccia “enterprise”: Manca SSO/SAML nativo enterprise-grade (esiste supporto limitato, non paragonabile a Bitwarden Enterprise)
- Responsabilità di gestione tutta tua: Backup, certificati, aggiornamenti, sicurezza del server: nessuno lo fa per te (a differenza di Bitwarden cloud)
- Alcune funzionalità arrivano in ritardo: Feature nuove lato client Bitwarden a volte non sono supportate lato server finché la community non le implementa
- Termini di servizio “grigi”: Bitwarden Inc. non garantisce che i client ufficiali continueranno a funzionare con implementazioni terze in futuro (per ora nessun blocco, ma è un rischio teorico da tenere presente)
- Single point of failure: Se il tuo server va giù, perdi accesso al vault (mitigabile con backup + export periodici offline)
CONSIDERAZIONI FINALI
- Per uso personale/homelab: scelta quasi obbligata, SQLite basta e avanza
- Se in futuro pensi di offrirlo a clienti come servizio gestito: valuta il passaggio a PostgreSQL come backend (più robusto per multi-tenant) e assicurati SLA chiari con i clienti sul fatto che non è supporto ufficiale Bitwarden
- Backup: essendo SQLite, è un singolo file perfetto per backup incrementali veloci, ma verifica sempre la consistenza (evita backup “a caldo” senza dump, meglio uno stop breve o sqlite3 .backup)

0 commenti