Vaultwarden para a família: HTTPS, convites e backup

O Vaultwarden é o cofre de senhas da minha família. O que é obrigatório num servidor assim: HTTPS, cadastro fechado, /admin protegido e backup.

Publicado
Leitura
5 min
Neste post

Aqui em casa, o Vaultwarden é o cofre de senhas da família. O meu primeiro Vaultwarden veio de um script do community-scripts.

Justamente por guardar as senhas de todo mundo, ele é o serviço que mais exige cuidado. Neste post junto o que considero obrigatório num Vaultwarden de família: HTTPS, cadastro fechado, painel de administração protegido e backup do jeito certo, tudo conferido na documentação oficial do projeto.

O que é o Vaultwarden #

O Vaultwarden é uma implementação alternativa do servidor do Bitwarden, escrita em Rust e muito mais leve que o servidor oficial. Ele é compatível com os aplicativos oficiais do Bitwarden: a extensão do navegador, os apps de celular e o cofre web funcionam apontando para o seu servidor.

Para uma família, isso quer dizer que cada pessoa usa os mesmos apps que usaria com o Bitwarden, e as senhas ficam no seu homelab. Um container LXC pequeno dá conta com folga.

HTTPS não é opcional #

A primeira coisa que pega quem instala o Vaultwarden: o cofre web não funciona sem HTTPS na maioria dos navegadores. A documentação explica o motivo: o cofre usa as APIs de criptografia do navegador, que só ficam disponíveis em conexões seguras.

O caminho recomendado pela documentação é colocar o Vaultwarden atrás de um proxy reverso que cuida do HTTPS. No meu homelab, as aplicações que precisam ser acessadas de fora são publicadas pelo Cloudflare Tunnel, que entrega o endereço com HTTPS sem abrir portas no roteador. Para quem prefere um proxy dentro de casa, a documentação cita o Caddy como uma boa opção para começar, porque ele obtém certificados sozinho.

Cadastro fechado e convites #

Por padrão, qualquer pessoa que chega na página do seu Vaultwarden pode criar uma conta. Num servidor de família, isso precisa ser desligado. A documentação mostra como, com uma variável de ambiente:

SIGNUPS_ALLOWED=false

Com o cadastro fechado, o administrador ainda pode convidar pessoas pelo painel de administração. Assim cada membro da família entra por convite, e ninguém de fora consegue se cadastrar. A documentação lembra um detalhe: quem foi convidado pode acessar a página /#/signup e se cadastrar com o e-mail do convite, mesmo que o link de criar conta não apareça.

O painel de administração #

O painel de administração (em /admin) só existe se você definir um token, na variável ADMIN_TOKEN. Quem souber o token tem acesso total ao painel, então ele precisa ser tratado como uma senha de root.

A documentação recomenda não guardar o token em texto puro, e sim um hash Argon2 gerado pelo próprio Vaultwarden:

vaultwarden hash

O comando pede a senha duas vezes e devolve uma string que começa com $argon2id$. É essa string que vai no ADMIN_TOKEN; para entrar no painel, você usa a senha que digitou, não o hash.

Backup do jeito certo #

Perder o cofre da família seria um dos piores cenários do homelab, e eu já sei o que é perder tudo. Pela documentação do Vaultwarden, os arquivos que importam ficam na pasta data:

Arquivo ou pastaPrecisa de backup?
db.sqlite3Sim: guarda quase tudo
attachments/Sim: os anexos não ficam no banco
config.jsonRecomendado, se você configura pelo painel (tem dados sensíveis)
rsa_key*Recomendado: assinam os logins (a chave privada é sensível)
sends/Opcional
icon_cache/Não precisa: é só cache de ícones

Copiar o db.sqlite3 com o serviço rodando pode pegar o banco no meio de uma escrita. A documentação recomenda o comando .backup do SQLite, que faz uma cópia consistente mesmo com o banco em uso:

sqlite3 /caminho/data/db.sqlite3 ".backup '/caminho/backups/db-$(date '+%Y%m%d-%H%M').sqlite3'"

No meu caso, o container inteiro entra no vzdump da noite, como os outros. A rotina está no post sobre backup com vzdump. Uma cópia do banco com o .backup, antes do vzdump, é uma camada a mais que vale a pena para um serviço tão importante.

Na hora de restaurar, a documentação pede atenção a um detalhe: pare o Vaultwarden antes e, se for restaurar um arquivo gerado pelo .backup, apague o db.sqlite3-wal que estiver na pasta. Um arquivo WAL antigo pode corromper o banco restaurado.

Para a família usar de verdade #

A parte técnica é metade do trabalho. A outra metade é a família usar. O que ajuda:

  • Instalar a extensão do navegador e o app do celular de cada pessoa, já apontando para o seu servidor.
  • Segundo fator em todas as contas, configurado no próprio cofre.
  • Explicar a senha mestra: sem ela, nem o administrador consegue abrir o cofre de ninguém. Vale combinar onde guardar uma cópia em papel.

Resumindo #

  • Vaultwarden é um servidor compatível com os apps do Bitwarden, leve o bastante para um LXC pequeno.
  • HTTPS é obrigatório para o cofre web; use proxy reverso ou o Cloudflare Tunnel.
  • Feche o cadastro com SIGNUPS_ALLOWED=false e convide a família pelo painel.
  • Proteja o /admin com um token em hash Argon2 gerado por vaultwarden hash.
  • Faça backup com .backup do SQLite, inclua attachments/ e as chaves, e teste a restauração.

Um cofre de senhas da família pede mais cuidado que qualquer outro serviço do homelab. Com esses cuidados, ele vira uma das coisas mais úteis que dá para hospedar em casa.

Fontes e documentação