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
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 pasta | Precisa de backup? |
|---|---|
db.sqlite3 | Sim: guarda quase tudo |
attachments/ | Sim: os anexos não ficam no banco |
config.json | Recomendado, 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=falsee convide a família pelo painel. - Proteja o
/admincom um token em hash Argon2 gerado porvaultwarden hash. - Faça backup com
.backupdo SQLite, incluaattachments/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.