{"id":151,"date":"2026-06-15T16:32:36","date_gmt":"2026-06-15T16:32:36","guid":{"rendered":"https:\/\/shattered.io\/it\/2026\/06\/15\/vaultwarden-bitwarden-self-hosted\/"},"modified":"2026-06-15T16:34:01","modified_gmt":"2026-06-15T16:34:01","slug":"vaultwarden-bitwarden-self-hosted","status":"publish","type":"post","link":"https:\/\/shattered.io\/it\/2026\/06\/15\/vaultwarden-bitwarden-self-hosted\/","title":{"rendered":"Vaultwarden: Bitwarden Self-Hosted in 12 Step [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Affidare tutte le password a un servizio cloud di terze parti significa fidarsi della loro infrastruttura, delle loro policy e della loro sicurezza. <strong>Vaultwarden<\/strong> ribalta questo schema: \u00e8 un server gestore password compatibile con Bitwarden che gira sul tuo hardware, sotto il tuo controllo, con cifratura end-to-end e architettura a conoscenza zero. Scritto in Rust, consuma poche decine di megabyte di RAM e funziona su un Raspberry Pi, un NAS o un piccolo VPS da pochi euro al mese.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questa guida pratica ti porta dall&#8217;installazione a un&#8217;istanza Vaultwarden in produzione, con HTTPS, pannello di amministrazione blindato, autenticazione a due fattori, backup automatici e hardening con fail2ban. Dodici step concreti, comandi copia-incolla testati su Ubuntu 24.04 LTS, oltre a errori comuni e risoluzione dei problemi. Tempo stimato: circa 45 minuti per la configurazione completa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aggiornato al 15 giugno 2026. La versione di riferimento \u00e8 <strong>Vaultwarden 1.36.0<\/strong>, rilasciata a maggio 2026, il progetto open source <code>dani-garcia\/vaultwarden<\/code> che su GitHub supera le 62.000 stelle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"cosa-e-vaultwarden-e-perche-self-hostarlo\">Cosa \u00e8 Vaultwarden e perch\u00e9 self-hostarlo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vaultwarden \u00e8 un&#8217;implementazione alternativa e non ufficiale del server Bitwarden, scritta in <strong>Rust<\/strong>. Nasce nel 2018 con il nome <code>bitwarden_rs<\/code> e viene rinominato in Vaultwarden nel 2023 per evitare confusione con il marchio ufficiale Bitwarden. Il progetto re-implementa l&#8217;API di Bitwarden, quindi funziona con tutti i client ufficiali: applicazioni desktop per Windows, macOS e Linux, app mobile per Android e iOS, estensioni per browser e interfaccia web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La differenza chiave rispetto allo stack ufficiale \u00e8 il peso. Il server Bitwarden self-hosted ufficiale richiede una dozzina di container Docker e circa 2 GB di RAM per funzionare in modo fluido. Vaultwarden gira in un singolo container e a riposo consuma poche decine di megabyte. Questo lo rende ideale per un Raspberry Pi 4 o 5, un NAS Synology o QNAP, o un VPS economico da 1 GB di RAM. Il database predefinito \u00e8 <strong>SQLite<\/strong>, ma sono supportati anche MySQL\/MariaDB e PostgreSQL per scenari multi-utente pi\u00f9 impegnativi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il modello di sicurezza \u00e8 identico a quello di Bitwarden. La cifratura \u00e8 <strong>end-to-end<\/strong>: la chiave di cifratura del vault deriva dalla master password tramite PBKDF2 o, sui client moderni, Argon2id, e il server non vede mai le password in chiaro. \u00c8 un&#8217;architettura a conoscenza zero (zero-knowledge): anche con accesso fisico al database, un attaccante trova solo blob cifrati con AES-256. Vaultwarden supporta organizzazioni, condivisione tramite la funzione Send, allegati cifrati, notifiche in tempo reale via WebSocket e autenticazione a due fattori (TOTP, WebAuthn\/FIDO2, Duo ed email).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Perch\u00e9 self-hostarlo? Tre motivi concreti. Primo, sovranit\u00e0 sui dati: i tuoi segreti restano in Italia o in Europa, sotto il GDPR, su hardware che controlli. Secondo, costo: niente abbonamenti per famiglia o team, paghi solo il server. Terzo, funzionalit\u00e0 premium gratuite: con Vaultwarden ottieni 2FA hardware, vault organizzativi e reportistica sulla salute delle password senza alcun piano a pagamento. Il rovescio della medaglia \u00e8 la responsabilit\u00e0: backup, aggiornamenti e sicurezza dell&#8217;infrastruttura ricadono interamente su di te. Questa guida copre tutti e tre i fronti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vale la pena chiarire a chi conviene questo approccio. Se sei un utente alle prime armi che vuole solo un gestore password senza pensieri, un servizio cloud gestito resta la scelta pi\u00f9 pratica. Vaultwarden brilla invece per chi ha gi\u00e0 un minimo di dimestichezza con Linux e Docker, per le famiglie tecniche, per i professionisti che gestiscono dati sensibili dei clienti e per le piccole organizzazioni che vogliono evitare costi ricorrenti per utente. Il progetto \u00e8 maturo, attivamente mantenuto e adottato da decine di migliaia di amministratori in tutto il mondo: le oltre 62.000 stelle su GitHub raccontano una community solida e una documentazione collaudata. Non \u00e8 un esperimento di nicchia, \u00e8 infrastruttura di produzione su cui molti si appoggiano da anni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"vaultwarden-vs-bitwarden-ufficiale-le-differenze\">Vaultwarden vs Bitwarden ufficiale: le differenze<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prima di mettere mano al terminale, \u00e8 utile capire cosa scegli e a cosa rinunci. Vaultwarden non \u00e8 un fork di Bitwarden, ma una re-implementazione indipendente dell&#8217;API. Per l&#8217;uso quotidiano di una famiglia o di un piccolo team le differenze sono minime, ma ci sono distinzioni importanti su licenza, supporto e funzionalit\u00e0 enterprise.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Caratteristica<\/th><th>Vaultwarden 1.36.0<\/th><th>Bitwarden ufficiale self-hosted<\/th><\/tr><\/thead><tbody>\n<tr><td>Linguaggio<\/td><td>Rust<\/td><td>C# \/ .NET<\/td><\/tr>\n<tr><td>Container Docker<\/td><td>1<\/td><td>~11<\/td><\/tr>\n<tr><td>RAM a riposo<\/td><td>Poche decine di MB<\/td><td>~2 GB consigliati<\/td><\/tr>\n<tr><td>Database<\/td><td>SQLite, MySQL, PostgreSQL<\/td><td>MSSQL (o PostgreSQL su Unified)<\/td><\/tr>\n<tr><td>Licenza<\/td><td>AGPLv3 (open source)<\/td><td>Bitwarden License (source-available)<\/td><\/tr>\n<tr><td>Funzioni premium<\/td><td>Tutte gratuite<\/td><td>Richiedono licenza<\/td><\/tr>\n<tr><td>2FA hardware (FIDO2)<\/td><td>Incluso<\/td><td>Richiede licenza premium<\/td><\/tr>\n<tr><td>Supporto ufficiale<\/td><td>Community<\/td><td>Supporto commerciale<\/td><\/tr>\n<tr><td>Compatibilit\u00e0 client<\/td><td>Client ufficiali Bitwarden<\/td><td>Client ufficiali Bitwarden<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La distinzione di licenza conta. Vaultwarden \u00e8 rilasciato sotto <strong>AGPLv3<\/strong>, una licenza copyleft che impone la pubblicazione del codice sorgente per i servizi esposti in rete. Bitwarden usa una licenza source-available pi\u00f9 restrittiva. Per un uso personale o domestico la differenza \u00e8 irrilevante; per chi rivende il servizio cambia tutto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cosa manca a Vaultwarden? Non implementa alcune funzioni enterprise dell&#8217;ufficiale, come SSO con SAML, criteri di accesso aziendali avanzati e l&#8217;integrazione completa con directory esterne. Per una PMI, una famiglia o un professionista, queste assenze raramente pesano. Per un&#8217;azienda con requisiti di compliance stringenti, il prodotto ufficiale con supporto commerciale resta la scelta sensata. Se stai valutando le alternative cloud, abbiamo confrontato altri gestori in <a href=\"\/it\/proton-pass-vs-1password\/\">Proton Pass vs 1Password<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un punto fondamentale: la sicurezza crittografica di Vaultwarden non \u00e8 inferiore. La cifratura avviene sul client, non sul server, quindi usa le stesse primitive di Bitwarden. La superficie di rischio si sposta sulla tua capacit\u00e0 di gestire correttamente server, HTTPS e backup, non sull&#8217;algoritmo. Questo \u00e8 il vero impegno che ti assumi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequisiti-e-requisiti-di-sistema\">Prerequisiti e requisiti di sistema<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vaultwarden \u00e8 leggero, ma per esporlo in modo sicuro su Internet servono alcuni elementi. Ecco il setup minimo testato per questa guida. Il punto non negoziabile \u00e8 il dominio con HTTPS: i client Bitwarden rifiutano di connettersi a un server senza TLS valido, perch\u00e9 la cifratura del vault avviene solo su connessioni sicure.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Componente<\/th><th>Requisito minimo<\/th><th>Note<\/th><\/tr><\/thead><tbody>\n<tr><td>Sistema operativo<\/td><td>Ubuntu 24.04 LTS \/ Debian 12<\/td><td>Qualsiasi Linux con Docker<\/td><\/tr>\n<tr><td>RAM<\/td><td>1 GB<\/td><td>512 MB sufficienti per pochi utenti<\/td><\/tr>\n<tr><td>Spazio disco<\/td><td>2 GB liberi<\/td><td>Pi\u00f9 spazio per gli allegati<\/td><\/tr>\n<tr><td>Docker Engine<\/td><td>27.x o superiore<\/td><td>Con plugin Compose v2<\/td><\/tr>\n<tr><td>Dominio<\/td><td>vault.tuodominio.it<\/td><td>Record DNS A\/AAAA verso il server<\/td><\/tr>\n<tr><td>Porte<\/td><td>80 e 443 aperte<\/td><td>Per HTTPS e validazione ACME<\/td><\/tr>\n<tr><td>Accesso<\/td><td>SSH con chiave<\/td><td>No password, vedi hardening<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hai bisogno di un nome di dominio e della possibilit\u00e0 di puntare un sottodominio (per esempio <code>vault.tuodominio.it<\/code>) all&#8217;indirizzo IP pubblico del server. Se ospiti su una rete domestica dietro NAT, dovrai aprire le porte 80 e 443 sul router e, idealmente, avere un IP statico o un servizio DNS dinamico. Per il primo accesso al server raccomandiamo SSH con chiave Ed25519: trovi la procedura completa nella nostra guida sulle <a href=\"\/it\/chiavi-ssh-ed25519-hardening-server\/\">chiavi SSH Ed25519 e l&#8217;hardening del server<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per il reverse proxy useremo <strong>Caddy<\/strong>, che ottiene e rinnova automaticamente i certificati TLS da Let&#8217;s Encrypt senza configurazione manuale. In alternativa puoi usare Nginx con Certbot: in quel caso la nostra guida su <a href=\"\/it\/certbot-lets-encrypt-https\/\">Let&#8217;s Encrypt e Certbot<\/a> copre il rilascio dei certificati. Caddy semplifica enormemente il lavoro ed \u00e8 la scelta consigliata per chi parte da zero.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-1-installare-docker-engine-e-compose\">Step 1: Installare Docker Engine e Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vaultwarden viene distribuito come immagine Docker ufficiale (<code>vaultwarden\/server<\/code>), quindi il primo passo \u00e8 installare Docker Engine con il plugin Compose v2. Sul tuo server Ubuntu 24.04, aggiorna i pacchetti e installa Docker dal repository ufficiale, non dalla versione spesso obsoleta nei repository di sistema.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Aggiorna il sistema e installa le dipendenze\nsudo apt update && sudo apt upgrade -y\nsudo apt install -y ca-certificates curl gnupg\n\n# Aggiungi la chiave GPG ufficiale di Docker\nsudo install -m 0755 -d \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | \\\n  sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg\n\n# Aggiungi il repository Docker\necho \"deb [arch=$(dpkg --print-architecture) \\\n  signed-by=\/etc\/apt\/keyrings\/docker.gpg] \\\n  https:\/\/download.docker.com\/linux\/ubuntu \\\n  $(. \/etc\/os-release && echo \"$VERSION_CODENAME\") stable\" | \\\n  sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\n\n# Installa Docker Engine e Compose\nsudo apt update\nsudo apt install -y docker-ce docker-ce-cli containerd.io \\\n  docker-buildx-plugin docker-compose-plugin\n\n# Verifica l'installazione\nsudo docker --version\nsudo docker compose version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se i comandi finali stampano i numeri di versione, Docker \u00e8 pronto. Per evitare di digitare <code>sudo<\/code> a ogni comando, aggiungi il tuo utente al gruppo docker con <code>sudo usermod -aG docker $USER<\/code> e poi riconnettiti via SSH. Attenzione: appartenere al gruppo docker equivale a privilegi di root, quindi limita questo accesso agli amministratori fidati. La guida ufficiale per l&#8217;installazione su Ubuntu \u00e8 disponibile nella <a href=\"https:\/\/docs.docker.com\/engine\/install\/ubuntu\/\" target=\"_blank\" rel=\"noopener\">documentazione Docker<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-2-preparare-le-cartelle-e-le-variabili\">Step 2: Preparare le cartelle e le variabili<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Organizza i file in una struttura ordinata. Vaultwarden salva il database, gli allegati e le chiavi in una cartella dati che dovrai includere nei backup. Creiamo una directory dedicata e un file <code>.env<\/code> per le variabili sensibili, cos\u00ec da tenerle fuori dal file Compose.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Crea la struttura delle cartelle\nmkdir -p ~\/vaultwarden\/vw-data\ncd ~\/vaultwarden\n\n# Crea il file delle variabili d'ambiente\ncat > .env &lt;&lt; 'EOF'\nDOMAIN=https:\/\/vault.tuodominio.it\nSIGNUPS_ALLOWED=true\nINVITATIONS_ALLOWED=true\nWEBSOCKET_ENABLED=true\nSIGNUPS_VERIFY=true\nEOF\n\n# Proteggi il file dalle letture non autorizzate\nchmod 600 .env<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Una nota sulle variabili. <code>DOMAIN<\/code> deve corrispondere esattamente all&#8217;URL pubblico con cui accederai, incluso <code>https:\/\/<\/code>: \u00e8 usato per WebAuthn e per i link nelle email. <code>SIGNUPS_ALLOWED=true<\/code> lo lasciamo attivo solo temporaneamente, per creare il primo account; lo disattiveremo nello Step 8 per impedire registrazioni indesiderate. <code>WEBSOCKET_ENABLED=true<\/code> abilita le notifiche in tempo reale sui client. Dalla versione 1.30 in poi Vaultwarden gestisce i WebSocket internamente sulla stessa porta, quindi non serve pi\u00f9 esporre la porta 3012 separata come nelle vecchie guide.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-3-scrivere-il-file-docker-compose-yml\">Step 3: Scrivere il file docker-compose.yml<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il cuore della configurazione \u00e8 il file Compose. Qui definiamo due servizi: Vaultwarden e Caddy come reverse proxy. Caddy si occupa di TLS automatico, inoltrando il traffico interno verso Vaultwarden sulla porta 80 del container. Crea il file <code>docker-compose.yml<\/code> nella cartella <code>~\/vaultwarden<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  vaultwarden:\n    image: vaultwarden\/server:1.36.0\n    container_name: vaultwarden\n    restart: unless-stopped\n    env_file: .env\n    volumes:\n      - .\/vw-data:\/data\n    networks:\n      - vw-net\n\n  caddy:\n    image: caddy:2\n    container_name: caddy\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"443:443\/udp\"\n    volumes:\n      - .\/Caddyfile:\/etc\/caddy\/Caddyfile:ro\n      - .\/caddy-data:\/data\n      - .\/caddy-config:\/config\n    networks:\n      - vw-net\n    depends_on:\n      - vaultwarden\n\nnetworks:\n  vw-net:<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo fissato l&#8217;immagine alla versione <code>1.36.0<\/code> invece di usare il tag <code>latest<\/code>. \u00c8 una scelta deliberata: bloccare la versione rende gli aggiornamenti prevedibili e controllabili, evitando che un <code>docker compose pull<\/code> tiri una release non testata. Quando vorrai aggiornare, modificherai il numero a mano dopo aver letto le note di rilascio. Nota anche che Vaultwarden non espone porte direttamente all&#8217;esterno: solo Caddy pubblica le porte 80 e 443. Tutto il resto avviene sulla rete interna <code>vw-net<\/code>, riducendo la superficie di attacco.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-4-configurare-caddy-per-lhttps-automatico\">Step 4: Configurare Caddy per l&#8217;HTTPS automatico<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Caddy ottiene e rinnova i certificati Let&#8217;s Encrypt senza intervento manuale, applica TLS 1.3 e imposta header di sicurezza moderni. Crea il file <code>Caddyfile<\/code> nella stessa cartella. \u00c8 volutamente minimale: poche righe fanno il lavoro che con Nginx richiederebbe decine di direttive.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vault.tuodominio.it {\n    # Inoltra il traffico a Vaultwarden sulla rete interna\n    reverse_proxy vaultwarden:80\n\n    # Header di sicurezza\n    header {\n        Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"\n        X-Content-Type-Options \"nosniff\"\n        X-Frame-Options \"DENY\"\n        Referrer-Policy \"same-origin\"\n        -Server\n    }\n\n    # Log degli accessi (utile per fail2ban)\n    log {\n        output file \/data\/access.log\n        format json\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sostituisci <code>vault.tuodominio.it<\/code> con il tuo sottodominio reale. Alla prima esecuzione, Caddy contatta Let&#8217;s Encrypt, supera la sfida HTTP-01 e installa un certificato valido. Da quel momento, l&#8217;header <strong>HSTS<\/strong> impone ai browser di usare solo HTTPS per un anno, mentre <code>X-Frame-Options: DENY<\/code> blocca i tentativi di clickjacking. Il log in formato JSON ci servir\u00e0 pi\u00f9 avanti per fail2ban. Se preferisci affinare la configurazione TLS, il <a href=\"https:\/\/ssl-config.mozilla.org\/\" target=\"_blank\" rel=\"noopener\">generatore di configurazioni SSL di Mozilla<\/a> resta il riferimento per cipher suite e profili moderni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-5-avviare-lo-stack-e-verificare\">Step 5: Avviare lo stack e verificare<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con i tre file pronti (<code>.env<\/code>, <code>docker-compose.yml<\/code>, <code>Caddyfile<\/code>), assicurati che il record DNS del tuo sottodominio punti gi\u00e0 all&#8217;IP del server, altrimenti Caddy non potr\u00e0 ottenere il certificato. Poi avvia tutto in background.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Avvia i container in modalit\u00e0 detached\ndocker compose up -d\n\n# Controlla che entrambi i servizi siano \"running\"\ndocker compose ps\n\n# Segui i log per verificare il rilascio del certificato\ndocker compose logs -f caddy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nei log di Caddy cerca una riga come <code>certificate obtained successfully<\/code>. Se compare, apri il browser su <code>https:\/\/vault.tuodominio.it<\/code>: dovresti vedere la schermata di login di Bitwarden con il lucchetto verde. Premi <kbd>Ctrl+C<\/kbd> per uscire dai log senza fermare i container. Se invece vedi errori ACME, consulta la sezione di risoluzione dei problemi: quasi sempre \u00e8 un problema di DNS o di porte chiuse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta che la pagina di login risponde in HTTPS, hai un server Vaultwarden funzionante ed esposto in sicurezza. Ma non \u00e8 ancora pronto per la produzione: mancano il pannello admin protetto, la chiusura delle registrazioni e i backup. Procediamo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-6-generare-ladmin_token-con-argon2\">Step 6: Generare l&#8217;ADMIN_TOKEN con Argon2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vaultwarden offre un pannello di amministrazione web all&#8217;indirizzo <code>\/admin<\/code> per gestire utenti, organizzazioni e diagnostica. L&#8217;accesso \u00e8 protetto da un token. Le versioni recenti raccomandano di non salvare il token in chiaro, ma di memorizzarne l&#8217;hash <strong>Argon2<\/strong> in formato PHC, cos\u00ec che anche chi legge il file <code>.env<\/code> non possa usarlo direttamente. Vaultwarden include un comando integrato per generarlo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Genera un hash Argon2 PHC del token admin in modo interattivo\ndocker run --rm -it vaultwarden\/server:1.36.0 \\\n  \/vaultwarden hash --preset owasp\n\n# Ti verr\u00e0 chiesto di inserire e confermare una password robusta.\n# L'output sar\u00e0 una stringa come:\n# $argon2id$v=19$m=19456,t=2,p=1$base64salt$base64hash<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Copia l&#8217;intera stringa <code>$argon2id$...<\/code> generata. La master password che inserisci qui \u00e8 la chiave del pannello admin: scegline una lunga e unica, conservala in modo sicuro. Argon2id con il preset OWASP usa parametri di memoria e iterazioni resistenti agli attacchi con GPU e ASIC, lo stesso principio che approfondiamo nella nostra guida sull&#8217;<a href=\"\/it\/sicurezza-delle-password\/\">hashing sicuro delle password<\/a>. Se preferisci, esiste anche il preset <code>bitwarden<\/code>, ma <code>owasp<\/code> \u00e8 il default consigliato.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-7-inserire-il-token-e-ricaricare-lo-stack\">Step 7: Inserire il token e ricaricare lo stack<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ora aggiungiamo l&#8217;hash al file <code>.env<\/code>. C&#8217;\u00e8 un dettaglio cruciale che fa inciampare molti: in un file <code>.env<\/code> letto da Docker Compose, il simbolo <code>$<\/code> viene interpretato come variabile. Devi quindi raddoppiare ogni <code>$<\/code> in <code>$$<\/code>, oppure racchiudere il valore tra apici singoli a seconda di come Compose gestisce il file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Apri il file .env con l'editor\nnano ~\/vaultwarden\/.env\n\n# Aggiungi la riga ADMIN_TOKEN raddoppiando ogni simbolo $\n# Esempio (sostituisci con il TUO hash):\nADMIN_TOKEN='$$argon2id$$v=19$$m=19456,t=2,p=1$$c2FsdA$$aGFzaA'\n\n# Salva (Ctrl+O, Invio) ed esci (Ctrl+X), poi ricarica\ncd ~\/vaultwarden\ndocker compose up -d<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dopo il riavvio, visita <code>https:\/\/vault.tuodominio.it\/admin<\/code>. Inserisci la master password che hai scelto nello Step 6 (non l&#8217;hash) e dovresti entrare nel pannello. Se ricevi un errore di accesso, quasi sempre \u00e8 colpa dei simboli <code>$<\/code> non raddoppiati: torna al file, controlla l&#8217;escape e ricarica. In alternativa, puoi disabilitare del tutto il pannello admin lasciando <code>ADMIN_TOKEN<\/code> vuoto, scelta valida se preferisci gestire tutto da riga di comando.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-8-creare-il-primo-account-e-chiudere-le-registrazioni\">Step 8: Creare il primo account e chiudere le registrazioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Questo \u00e8 l&#8217;ordine corretto: prima crei il tuo account, poi blocchi le registrazioni pubbliche. Apri <code>https:\/\/vault.tuodominio.it<\/code>, clicca su &#8220;Crea account&#8221; e registra la tua utenza principale con una master password forte e univoca. Questa password non \u00e8 recuperabile: se la perdi, perdi l&#8217;accesso al vault, quindi annotala in un luogo sicuro offline.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Subito dopo, disattiva le registrazioni per impedire che estranei creino account sul tuo server. Modifica il file <code>.env<\/code> impostando <code>SIGNUPS_ALLOWED=false<\/code> e ricarica lo stack. D&#8217;ora in poi i nuovi utenti potranno entrare solo tramite invito dal pannello admin o da un&#8217;organizzazione.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Modifica .env: disattiva le registrazioni aperte\nsed -i 's\/SIGNUPS_ALLOWED=true\/SIGNUPS_ALLOWED=false\/' ~\/vaultwarden\/.env\n\n# Per accettare inviti solo su domini fidati, puoi aggiungere:\necho \"SIGNUPS_DOMAINS_WHITELIST=tuodominio.it\" >> ~\/vaultwarden\/.env\n\n# Applica le modifiche\ncd ~\/vaultwarden && docker compose up -d<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per aggiungere familiari o colleghi, vai nel pannello <code>\/admin<\/code>, sezione utenti, e usa &#8220;Invite User&#8221;: riceveranno un&#8217;email per impostare la propria master password. In alternativa, crea un&#8217;organizzazione e invita i membri da l\u00ec, cos\u00ec potrai condividere collezioni di credenziali in modo strutturato. Ricorda: ogni utente ha una propria master password e un proprio vault cifrato; nemmeno tu, come amministratore, puoi leggere le loro password.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-9-installare-e-configurare-i-client-bitwarden\">Step 9: Installare e configurare i client Bitwarden<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il bello di Vaultwarden \u00e8 che usi le app ufficiali Bitwarden, senza software speciale. L&#8217;unico passaggio differente \u00e8 indicare al client l&#8217;URL del tuo server invece di quello cloud di Bitwarden. Funziona con l&#8217;estensione per Chrome, Firefox, Edge e Safari, con le app desktop e mobile.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Estensione browser:<\/strong> installa Bitwarden dallo store ufficiale del browser, poi nella schermata di login clicca sull&#8217;icona dell&#8217;ingranaggio in alto a sinistra e nel campo &#8220;URL server&#8221; inserisci <code>https:\/\/vault.tuodominio.it<\/code>.<\/li>\n<li><strong>App desktop:<\/strong> stessa procedura, impostazioni regione\/server prima del login.<\/li>\n<li><strong>App mobile (Android\/iOS):<\/strong> nella schermata iniziale tocca l&#8217;ingranaggio, scegli &#8220;Self-hosted&#8221; e inserisci l&#8217;URL del server.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dopo aver impostato l&#8217;URL, accedi con email e master password. Il client scarica il vault cifrato e lo decifra localmente con la chiave derivata dalla tua master password. Da questo momento hai il riempimento automatico dei moduli, il generatore di password e la sincronizzazione tra dispositivi. Verifica che la sincronizzazione funzioni creando una voce di prova sul browser e controllando che compaia sul telefono entro pochi secondi: \u00e8 il segnale che i WebSocket lavorano correttamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un dettaglio operativo importante riguarda l&#8217;iterazione di derivazione della chiave (KDF). Nelle impostazioni di sicurezza del vault web puoi scegliere tra PBKDF2 e Argon2id e regolarne i parametri. Per i nuovi vault, Argon2id \u00e8 la scelta consigliata: rende molto pi\u00f9 costoso un eventuale attacco a forza bruta sulla master password, anche se un attaccante dovesse impossessarsi del database. Se migri da un vecchio account con PBKDF2 e un numero di iterazioni basso, aumentalo: i client moderni gestiscono la transizione in modo trasparente al primo login. Questo \u00e8 uno di quei dettagli che distingue un&#8217;installazione superficiale da una blindata, e non costa nulla configurarlo bene fin da subito.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-10-attivare-lautenticazione-a-due-fattori\">Step 10: Attivare l&#8217;autenticazione a due fattori<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La master password protegge la cifratura del vault, ma il login al server merita un secondo fattore. Vaultwarden supporta TOTP (app come Aegis o gli autenticatori che abbiamo confrontato in <a href=\"\/it\/totp-2fa-nodejs\/\">la nostra guida sul TOTP<\/a>), chiavi hardware WebAuthn\/FIDO2, Duo ed email. Configurarlo richiede meno di due minuti dal vault web.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Accedi al vault web e vai su <strong>Impostazioni \u2192 Sicurezza \u2192 Login a due fattori<\/strong>.<\/li>\n<li>Per <strong>TOTP<\/strong>: scansiona il QR code con la tua app autenticatore, inserisci il codice a 6 cifre per confermare e salva i codici di recupero.<\/li>\n<li>Per <strong>FIDO2\/WebAuthn<\/strong>: collega una chiave hardware (YubiKey, Nitrokey o un&#8217;altra chiave compatibile) e registrala. \u00c8 il metodo pi\u00f9 resistente al phishing.<\/li>\n<li>Conserva sempre il <strong>codice di recupero<\/strong> 2FA offline: senza, un secondo fattore perso pu\u00f2 bloccarti fuori dall&#8217;account.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un&#8217;attenzione importante: il 2FA su Vaultwarden protegge l&#8217;autenticazione, ma se perdi sia il dispositivo 2FA sia i codici di recupero, dovrai disabilitare il secondo fattore di quell&#8217;utente dal pannello <code>\/admin<\/code>. Per questo il pannello admin va a sua volta blindato con un token Argon2 robusto, come fatto nello Step 6. La difesa \u00e8 a strati: ogni livello copre i punti deboli dell&#8217;altro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-11-configurare-i-backup-automatici-del-database\">Step 11: Configurare i backup automatici del database<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Questo \u00e8 lo step che separa un esperimento da un servizio affidabile. Vaultwarden non ha uno strumento di backup integrato, quindi devi predisporlo tu. Il database SQLite \u00e8 in uso mentre il server gira, perci\u00f2 non basta copiare il file: va usato il comando <code>.backup<\/code> di SQLite, che produce una copia coerente anche con il database aperto. Includi anche le cartelle <code>attachments<\/code>, <code>sends<\/code> e i file chiave.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# ~\/vaultwarden\/backup-vw.sh\nset -euo pipefail\nDATA_DIR=\"$HOME\/vaultwarden\/vw-data\"\nDEST=\"$HOME\/vaultwarden\/backups\"\nSTAMP=$(date +%Y%m%d-%H%M%S)\nmkdir -p \"$DEST\"\n\n# Backup coerente del database SQLite tramite il container\ndocker exec vaultwarden \\\n  sqlite3 \/data\/db.sqlite3 \".backup '\/data\/db-backup.sqlite3'\"\n\n# Crea un archivio con db, allegati, sends e chiavi\ntar -czf \"$DEST\/vw-$STAMP.tar.gz\" -C \"$DATA_DIR\" \\\n  db-backup.sqlite3 attachments sends \\\n  rsa_key.pem rsa_key.pub.pem config.json 2>\/dev\/null || true\n\n# Mantieni solo gli ultimi 14 backup\nls -1t \"$DEST\"\/vw-*.tar.gz | tail -n +15 | xargs -r rm --\necho \"Backup completato: vw-$STAMP.tar.gz\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Rendi lo script eseguibile con <code>chmod +x ~\/vaultwarden\/backup-vw.sh<\/code> e poi pianificalo. Il modo pi\u00f9 pulito su un sistema systemd \u00e8 un timer; in alternativa va benissimo una voce cron. Ecco la riga cron per un backup giornaliero alle 3 del mattino:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Apri il crontab dell'utente\ncrontab -e\n\n# Aggiungi questa riga per un backup giornaliero alle 03:00\n0 3 * * * \/home\/$USER\/vaultwarden\/backup-vw.sh >> \/home\/$USER\/vaultwarden\/backup.log 2>&1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Un backup che resta sullo stesso server non \u00e8 un backup: se il disco muore, perdi tutto. Copia gli archivi <code>.tar.gz<\/code> su una destinazione esterna (un altro server, uno storage cifrato, un cloud) usando strumenti come rsync o rclone con cifratura. E soprattutto, prova periodicamente a ripristinare un backup su un server di test: un backup mai testato \u00e8 solo una speranza.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-12-hardening-con-fail2ban-e-aggiornamenti\">Step 12: Hardening con fail2ban e aggiornamenti<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esporre un servizio su Internet attira tentativi di accesso automatici. <strong>fail2ban<\/strong> legge i log e banna gli indirizzi IP che falliscono ripetutamente il login. Vaultwarden scrive eventi di login falliti nei propri log, che possiamo intercettare. Installa fail2ban e crea un filtro dedicato.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Installa fail2ban\nsudo apt install -y fail2ban\n\n# Filtro: \/etc\/fail2ban\/filter.d\/vaultwarden.conf\nsudo tee \/etc\/fail2ban\/filter.d\/vaultwarden.conf &lt;&lt; 'EOF'\n[Definition]\nfailregex = ^.*Username or password is incorrect\\. Try again\\. IP: &lt;ADDR&gt;.*$\nignoreregex =\nEOF\n\n# Jail: \/etc\/fail2ban\/jail.d\/vaultwarden.local\nsudo tee \/etc\/fail2ban\/jail.d\/vaultwarden.local &lt;&lt; 'EOF'\n[vaultwarden]\nenabled = true\nfilter = vaultwarden\nlogpath = \/home\/USER\/vaultwarden\/vw-data\/vaultwarden.log\nmaxretry = 5\nbantime = 3600\nfindtime = 600\naction = iptables-allports\nEOF\n\n# Riavvia fail2ban\nsudo systemctl restart fail2ban\nsudo fail2ban-client status vaultwarden<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per far funzionare il filtro, abilita il logging su file di Vaultwarden aggiungendo <code>LOG_FILE=\/data\/vaultwarden.log<\/code> al file <code>.env<\/code> e ricaricando lo stack. Sostituisci <code>USER<\/code> con il tuo nome utente reale. Dopo 5 tentativi falliti in 10 minuti, l&#8217;IP viene bannato per un&#8217;ora. Configura anche un firewall di base con UFW, aprendo solo le porte 22 (SSH), 80 e 443, e abilita gli aggiornamenti automatici di sicurezza del sistema con <code>unattended-upgrades<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per aggiornare Vaultwarden quando esce una nuova versione, leggi prima le note di rilascio su GitHub, poi modifica il tag immagine nel <code>docker-compose.yml<\/code> (per esempio da <code>1.36.0<\/code> alla nuova versione), esegui un backup e infine <code>docker compose pull && docker compose up -d<\/code>. Lo stesso vale per Caddy. Mantenere aggiornati container e sistema operativo \u00e8 la singola abitudine che pi\u00f9 riduce il rischio nel tempo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"errori-comuni-da-evitare\">Errori comuni da evitare<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cinque trappole in cui cadono quasi tutti i nuovi amministratori Vaultwarden. Conoscerle in anticipo ti risparmia ore di debug.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Simboli <code>$<\/code> non raddoppiati nell&#8217;ADMIN_TOKEN.<\/strong> In un file <code>.env<\/code> con Docker Compose ogni <code>$<\/code> dell&#8217;hash Argon2 va scritto <code>$$<\/code>, altrimenti l&#8217;autenticazione admin fallisce in modo silenzioso. \u00c8 l&#8217;errore numero uno.<\/li>\n<li><strong>Esporre Vaultwarden senza HTTPS.<\/strong> I client Bitwarden rifiutano connessioni non cifrate. Niente reverse proxy con TLS valido significa niente login. Mai esporre la porta del container direttamente su Internet.<\/li>\n<li><strong>Lasciare <code>SIGNUPS_ALLOWED=true<\/code> in produzione.<\/strong> Con le registrazioni aperte, chiunque trovi l&#8217;URL pu\u00f2 creare un account sul tuo server. Disattivale subito dopo aver creato la tua utenza.<\/li>\n<li><strong>Backup del file SQLite a caldo.<\/strong> Copiare <code>db.sqlite3<\/code> mentre il server \u00e8 attivo produce file corrotti. Usa sempre il comando <code>.backup<\/code> di SQLite, come nello script dello Step 11.<\/li>\n<li><strong>DOMAIN configurato male.<\/strong> Se la variabile <code>DOMAIN<\/code> non corrisponde all&#8217;URL reale (incluso <code>https:\/\/<\/code>), WebAuthn e gli inviti via email smettono di funzionare. Deve essere identica al carattere.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"risoluzione-dei-problemi-piu-frequenti\">Risoluzione dei problemi pi\u00f9 frequenti<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando qualcosa non va, il primo comando da eseguire \u00e8 sempre <code>docker compose logs vaultwarden<\/code> e <code>docker compose logs caddy<\/code>. Quasi ogni problema lascia una traccia chiara nei log. Ecco i casi pi\u00f9 comuni e come risolverli.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Sintomo<\/th><th>Causa probabile<\/th><th>Soluzione<\/th><\/tr><\/thead><tbody>\n<tr><td>Caddy non ottiene il certificato<\/td><td>DNS non propagato o porte 80\/443 chiuse<\/td><td>Verifica record A\/AAAA e firewall; testa con dig<\/td><\/tr>\n<tr><td>Login admin fallisce<\/td><td>Simboli $ non raddoppiati<\/td><td>Riscrivi ADMIN_TOKEN con $$ ed esegui up -d<\/td><\/tr>\n<tr><td>Client dice &#8220;server non raggiungibile&#8221;<\/td><td>URL server errato nel client<\/td><td>Inserisci https:\/\/ e il dominio esatto<\/td><\/tr>\n<tr><td>Sincronizzazione lenta o assente<\/td><td>WebSocket non abilitati<\/td><td>Imposta WEBSOCKET_ENABLED=true e ricarica<\/td><\/tr>\n<tr><td>Errore 502 Bad Gateway<\/td><td>Container vaultwarden non avviato<\/td><td>Controlla docker compose ps e i log<\/td><\/tr>\n<tr><td>Email di invito non arrivano<\/td><td>SMTP non configurato<\/td><td>Aggiungi le variabili SMTP_* nel file .env<\/td><\/tr>\n<tr><td>&#8220;An error has occurred&#8221; al login<\/td><td>DOMAIN diverso dall&#8217;URL reale<\/td><td>Allinea DOMAIN all&#8217;indirizzo pubblico<\/td><\/tr>\n<tr><td>fail2ban non banna nulla<\/td><td>LOG_FILE non impostato<\/td><td>Aggiungi LOG_FILE=\/data\/vaultwarden.log<\/td><\/tr>\n<tr><td>WebAuthn\/FIDO2 non si registra<\/td><td>HTTPS o DOMAIN non validi<\/td><td>WebAuthn richiede TLS e dominio corretto<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Per i problemi di certificato, il test pi\u00f9 rapido \u00e8 <code>dig vault.tuodominio.it<\/code> da una macchina esterna: se non restituisce l&#8217;IP corretto, il DNS \u00e8 il colpevole. Per gli errori 502, ricorda che Caddy inoltra a <code>vaultwarden:80<\/code> sulla rete interna: se il container Vaultwarden \u00e8 in crash loop, Caddy risponde 502. Risolvi prima il container, poi il proxy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"consigli-avanzati-per-amministratori\">Consigli avanzati per amministratori<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta che il setup di base funziona, alcuni accorgimenti portano Vaultwarden a livello professionale. Sono opzionali, ma fanno la differenza per un&#8217;istanza che ospita dati critici di una famiglia o di un team.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"configurare-linvio-email-smtp\">Configurare l&#8217;invio email SMTP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Senza SMTP, inviti, verifiche email e avvisi di nuovo dispositivo non funzionano. Aggiungi al file <code>.env<\/code> le variabili <code>SMTP_HOST<\/code>, <code>SMTP_PORT<\/code>, <code>SMTP_SECURITY<\/code> (di solito <code>starttls<\/code>), <code>SMTP_FROM<\/code>, <code>SMTP_USERNAME<\/code> e <code>SMTP_PASSWORD<\/code>. Usa un provider transazionale o un mailserver dedicato. Una volta attivo, potrai imporre la verifica email e usare il 2FA via email come ulteriore opzione.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"passare-a-postgresql-per-piu-utenti\">Passare a PostgreSQL per pi\u00f9 utenti<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">SQLite regge bene fino a qualche decina di utenti attivi. Oltre, o se vuoi backup e replica pi\u00f9 robusti, conviene migrare a PostgreSQL impostando <code>DATABASE_URL=postgresql:\/\/utente:password@db\/vaultwarden<\/code> e aggiungendo un container Postgres allo stack Compose. Esegui la migrazione dei dati con attenzione e dopo un backup completo. Per la maggior parte degli utenti domestici, comunque, SQLite resta la scelta pi\u00f9 semplice e affidabile.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"monitoraggio-e-accesso-remoto-sicuro\">Monitoraggio e accesso remoto sicuro<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Considera di mettere il pannello <code>\/admin<\/code> dietro una VPN invece di esporlo pubblicamente: la nostra guida su come <a href=\"\/it\/configurare-server-wireguard-vpn\/\">configurare un server WireGuard<\/a> mostra come creare un tunnel cifrato verso il server. Aggiungi un endpoint di health check monitorato da un servizio di uptime esterno, cos\u00ec sai immediatamente se il server cade. Infine, imposta <code>SHOW_PASSWORD_HINT=false<\/code> per non rivelare suggerimenti che potrebbero aiutare un attaccante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un&#8217;ultima raccomandazione operativa: documenta la tua configurazione. Tieni una copia cifrata del file <code>docker-compose.yml<\/code>, del <code>Caddyfile<\/code> e di un <code>.env<\/code> di esempio (senza segreti reali) in un posto separato dal server. Annota la versione installata, la data dell&#8217;ultimo aggiornamento e dove finiscono i backup. Quando, tra sei mesi, dovrai migrare a un nuovo server o ripristinare dopo un guasto, questa documentazione trasforma un&#8217;emergenza stressante in una procedura di routine. La differenza tra un hobbista e un amministratore affidabile non \u00e8 il software, \u00e8 il metodo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"domande-frequenti-su-vaultwarden\">Domande frequenti su Vaultwarden<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vaultwarden-e-sicuro-quanto-bitwarden-ufficiale\">Vaultwarden \u00e8 sicuro quanto Bitwarden ufficiale?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dal punto di vista crittografico s\u00ec: la cifratura del vault avviene sul client con le stesse primitive (AES-256, derivazione della chiave con PBKDF2 o Argon2id), e il server non vede mai i dati in chiaro. La differenza sta nella responsabilit\u00e0: con Vaultwarden la sicurezza dell&#8217;infrastruttura (HTTPS, backup, aggiornamenti, hardening) dipende da te. Configurato bene, come in questa guida, offre un livello di protezione paragonabile.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"posso-usare-le-app-ufficiali-bitwarden-con-vaultwarden\">Posso usare le app ufficiali Bitwarden con Vaultwarden?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ec. Vaultwarden implementa l&#8217;API di Bitwarden, quindi tutte le app ufficiali (estensioni browser, desktop, mobile e vault web) funzionano. Devi solo indicare l&#8217;URL del tuo server self-hosted nelle impostazioni del client prima del login, come spiegato nello Step 9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quanto-costa-ospitare-vaultwarden\">Quanto costa ospitare Vaultwarden?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pochissimo. Vaultwarden gira su un VPS da 1 GB di RAM, che parte da circa 3-5 euro al mese presso provider europei, oppure gratis su un Raspberry Pi o un NAS che gi\u00e0 possiedi. L&#8217;unico altro costo \u00e8 il nome di dominio, intorno ai 10-15 euro l&#8217;anno. Niente abbonamenti per utente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"cosa-succede-se-perdo-la-master-password\">Cosa succede se perdo la master password?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La master password non \u00e8 recuperabile per design: \u00e8 la base della cifratura zero-knowledge. Se la perdi, perdi l&#8217;accesso al vault e i dati restano cifrati in modo irreversibile. Per questo \u00e8 essenziale conservarla in modo sicuro offline e impostare un metodo di emergenza prima che serva.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vaultwarden-supporta-le-passkey\">Vaultwarden supporta le passkey?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ec, tramite i client Bitwarden recenti puoi salvare e usare passkey nel vault, e accedere a Vaultwarden con chiavi FIDO2\/WebAuthn come secondo fattore. \u00c8 necessario che il server sia raggiungibile via HTTPS con un dominio valido, perch\u00e9 WebAuthn richiede un&#8217;origine sicura.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"devo-aggiornare-vaultwarden-manualmente\">Devo aggiornare Vaultwarden manualmente?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ec, e ti consigliamo di farlo in modo controllato. Avendo fissato il tag versione nel file Compose, gli aggiornamenti non avvengono da soli: leggi le note di rilascio, esegui un backup, cambia il numero di versione e lancia <code>docker compose pull &amp;&amp; docker compose up -d<\/code>. \u00c8 pi\u00f9 sicuro che inseguire automaticamente il tag <code>latest<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"posso-ospitare-vaultwarden-dietro-cloudflare\">Posso ospitare Vaultwarden dietro Cloudflare?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ec. Cloudflare pu\u00f2 fare da proxy davanti a Caddy, aggiungendo protezione DDoS e nascondendo l&#8217;IP del server. Attenzione per\u00f2 alla cifratura: imposta la modalit\u00e0 SSL su &#8220;Full (strict)&#8221; affinch\u00e9 il traffico resti cifrato fino al tuo server, e ricorda che i WebSocket vanno abilitati anche lato Cloudflare.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vaultwarden-e-legale-e-conforme-al-gdpr\">Vaultwarden \u00e8 legale e conforme al GDPR?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vaultwarden \u00e8 software open source AGPLv3, perfettamente legale da usare. Self-hostarlo su server europei ti aiuta anzi con la conformit\u00e0 GDPR, perch\u00e9 mantieni i dati sotto la tua giurisdizione e il tuo controllo. Resti tu il titolare del trattamento, quindi le responsabilit\u00e0 su sicurezza e accessi sono a tuo carico.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusione-il-controllo-vale-lo-sforzo\">Conclusione: il controllo vale lo sforzo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In dodici step hai costruito un gestore password self-hosted completo: container Docker isolato, HTTPS automatico con Caddy, pannello admin protetto da Argon2, registrazioni chiuse, 2FA hardware, backup giornalieri e fail2ban a guardia dei login. Vaultwarden 1.36.0 ti d\u00e0, gratis e sul tuo hardware, funzionalit\u00e0 che altrove richiedono abbonamenti, con la stessa cifratura zero-knowledge di Bitwarden ufficiale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il prezzo \u00e8 la responsabilit\u00e0. Un server self-hosted \u00e8 sicuro quanto la sua manutenzione: aggiorna i container, verifica i backup ripristinandoli, tieni d&#8217;occhio i log. Fatto questo, hai un vault che nessun cambio di policy aziendale, nessuna acquisizione e nessun datacenter lontano pu\u00f2 toccare. I tuoi segreti restano tuoi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"approfondimenti-correlati\">Approfondimenti correlati<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/it\/proton-pass-vs-1password\/\">Proton Pass vs 1Password: confronto tra gestori password<\/a><\/li>\n<li><a href=\"\/it\/chiavi-ssh-ed25519-hardening-server\/\">Chiavi SSH Ed25519: hardening del server in 12 step<\/a><\/li>\n<li><a href=\"\/it\/certbot-lets-encrypt-https\/\">Let&#8217;s Encrypt e Certbot: HTTPS gratis in 10 step<\/a><\/li>\n<li><a href=\"\/it\/configurare-server-wireguard-vpn\/\">Server WireGuard VPN su Ubuntu in 12 step<\/a><\/li>\n<li><a href=\"\/it\/totp-2fa-nodejs\/\">TOTP 2FA in Node.js: un autenticatore in 12 step<\/a><\/li>\n<li><a href=\"\/it\/sicurezza-delle-password\/\">Sicurezza delle password: lunghezza, hashing e secondo fattore<\/a><\/li>\n<li><a href=\"\/it\/security\/\">Tutte le guide sulla sicurezza informatica<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fonti-e-risorse-esterne\">Fonti e risorse esterne<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/dani-garcia\/vaultwarden\" target=\"_blank\" rel=\"noopener\">Repository ufficiale Vaultwarden su GitHub<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dani-garcia\/vaultwarden\/wiki\" target=\"_blank\" rel=\"noopener\">Wiki ufficiale di Vaultwarden (documentazione)<\/a><\/li>\n<li><a href=\"https:\/\/hub.docker.com\/r\/vaultwarden\/server\" target=\"_blank\" rel=\"noopener\">Immagine Docker ufficiale vaultwarden\/server<\/a><\/li>\n<li><a href=\"https:\/\/bitwarden.com\/help\/\" target=\"_blank\" rel=\"noopener\">Centro assistenza Bitwarden (client compatibili)<\/a><\/li>\n<li><a href=\"https:\/\/ssl-config.mozilla.org\/\" target=\"_blank\" rel=\"noopener\">Mozilla SSL Configuration Generator<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Affidare tutte le password a un servizio cloud di terze parti significa fidarsi della loro infrastruttura, delle loro policy e della loro sicurezza. Vaultwarden ribalta questo schema: \u00e8 un server\u2026<\/p>\n","protected":false},"author":5,"featured_media":152,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-151","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security"],"_links":{"self":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/comments?post=151"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/151\/revisions"}],"predecessor-version":[{"id":153,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/151\/revisions\/153"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media\/152"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media?parent=151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/categories?post=151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/tags?post=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}