Vaultwarden no VPS: Guia de Instalação Segura

10 min de leitura Segurança e Infraestrutura

Por que escolher o Vaultwarden para sua VPS?

A gestão segura de senhas é um pilar fundamental da infraestrutura de TI moderna. Embora soluções em nuvem sejam populares, a necessidade de controle total sobre os dados sensíveis, conformidade com regulamentações de soberania de dados e a redução de custos operacionais têm impulsionado a migração para soluções self-hosted (hospedagem própria). Neste cenário, o Vaultwarden destaca-se como a alternativa de código aberto mais robusta e eficiente ao Bitwarden original.

O Vaultwarden é uma implementação em Rust da API do servidor Bitwarden. Isso significa que ele é totalmente compatível com todos os clientes oficiais do Bitwarden (desktop, mobile, navegador) sem necessidade de modificações. A grande vantagem técnica reside no consumo de recursos: enquanto o servidor original exige .NET e consome significativamente mais memória RAM e CPU, o Vaultwarden opera com uma pegada mínima, tornando-o ideal para VPS de entrada (1GB RAM ou menos) em provedores como DigitalOcean, Linode, Vultr ou AWS EC2 t2/t3 micro instances.

Diferente de outras ferramentas de autenticação e segredos listadas nas pesquisas recentes, como Authelia 2fa servidor, Keycloak self-hosted tutorial ou Authentik vps instalação, o Vaultwarden foca especificamente no cofre de senhas (Password Manager). Ferramentas como Psono VPS ou Teampass servidor senhas oferecem funcionalidades empresariais complexas, mas muitas vezes exigem stacks maiores (PHP/MySQL) e curvas de aprendizado mais íngremes. O Vaultwarden entrega a experiência Bitwarden nativa com a leveza necessária para ambientes restritos.

Pré-requisitos e Preparação do Ambiente

Antes de iniciar a instalação, certifique-se de que sua VPS atenda aos seguintes requisitos mínimos:

  • Sistema Operacional: Ubuntu 20.04 LTS ou superior (recomendado), Debian 11/12.
  • Usuário com privilégios sudo.
  • Docker e Docker Compose instalados.
  • Um domínio configurado apontando para o IP da sua VPS (ex: seguranca.seudominio.com).
  • Firewall configurado (UFW ou iptables) liberando apenas as portas 80 (HTTP) e 443 (HTTPS).

Se você ainda não possui Docker instalado, execute os seguintes comandos para preparar o ambiente:

sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

Passo 1: Estruturação de Diretórios e Permissões

A boa prática em administração de sistemas dictates que devemos isolar os dados da aplicação. Criaremos um diretório dedicado para o Vaultwarden, garantindo que os dados persistam mesmo se o container for recriado.

sudo mkdir -p /opt/vaultwarden/data
sudo useradd -r -s /usr/sbin/nologin vaultwarden
sudo chown -R vaultwarden:vaultwarden /opt/vaultwarden

Neste exemplo, criamos um usuário de sistema vaultwarden sem acesso ao shell para fins de segurança (princípio do menor privilégio) e definimos a propriedade dos dados.

Passo 2: Configuração do Docker Compose

Crie um arquivo chamado docker-compose.yml dentro de /opt/vaultwarden/. Este arquivo orquestrará o container e as variáveis de ambiente necessárias para a segurança.

cd /opt/vaultwarden
nano docker-compose.yml

Insira o seguinte conteúdo. Note a importância das variáveis de ambiente SIGNUPS_ALLOWED e ADMIN_TOKEN:

version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    ports:
      - "8080:80"
    environment:
      SIGNUPS_ALLOWED: "false"
      ADMIN_TOKEN: "seu_token_super_secreto_aqui"
      DATABASE_URL: "/data/db.sqlite3"
      WEB_VAULT_ENABLED: "true"
    volumes:
      - ./data:/data
    networks:
      - webnet

networks:
  webnet:
    driver: bridge

Atenção Crítica:

  • ADMIN_TOKEN: Este token é a chave mestra para acessar o painel de administração. Perda deste token significa perda total do acesso administrativo ao cofre. Armazene-o em um local seguro offline.
  • SIGNUPS_ALLOWED: "false": Em produção, desative inscrições públicas. Você deve convidar usuários via email ou gerenciar manualmente para evitar que desconhecidos ocupem sua infraestrutura.

Passo 3: Inicialização do Serviço

Agora, inicie o serviço utilizando o Docker Compose:

docker compose up -d

Verifique se o container está rodando corretamente:

docker ps | grep vaultwarden

O output deve indicar que o status é "Up". Você pode testar a conectividade básica acessando http://ip-da-sua-vps:8080. Você verá uma página simples indicando que o servidor está respondendo, mas ainda não está protegido por HTTPS.

Passo 4: Configuração de Reverse Proxy e HTTPS (Certbot)

Nunca expose o Vaultwarden diretamente na porta 8080 para a internet. Utilize um Reverse Proxy (Nginx ou Traefik) para gerenciar o tráfego e implementar certificados TLS (Let's Encrypt). Para este tutorial, utilizaremos o Nginx com Certbot.

Instale o Nginx e o Certbot:

sudo apt install nginx certbot python3-certbot-nginx -y

Gere um certificado SSL para seu domínio (substitua seguranca.seudominio.com):

sudo certbot --nginx -d seguranca.seudominio.com

O Certbot irá modificar automaticamente a configuração do Nginx. No entanto, precisamos garantir que o proxy aponte para a porta local onde o Vaultwarden está escutando (8080).

Edite o arquivo de configuração gerado pelo Certbot, geralmente localizado em /etc/nginx/sites-available/seguranca.seudominio.com:

sudo nano /etc/nginx/sites-available/seguranca.seudominio.com

Adicione ou verifique a seguinte configuração no bloco server, dentro da seção location /. É crucial adicionar os cabeçalhos de WebSocket e segurança:

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # WebSocket support para sincronização em tempo real
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

Reinicie o Nginx para aplicar as mudanças:

sudo systemctl restart nginx

Agora, acesse https://seguranca.seudominio.com. A conexão deve ser segura e funcional.

Passo 5: Configuração de Segurança Avançada (Firewall e Fail2Ban)

Para blindar seu servidor contra ataques de força bruta, é essencial configurar o Fail2Ban. Embora o Vaultwarden tenha limitação nativa de tentativas de login, o Fail2Ban age no nível do sistema operacional.

sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Crie um arquivo de jail específico para o Vaultwarden em /etc/fail2ban/jail.local:

sudo nano /etc/fail2ban/jail.local

Adicione:

[vaultwarden]
enabled = true
port = http,https
filter = vaultwarden
maxretry = 5
bantime = 3600
findtime = 600

Crie o filtro correspondente em /etc/fail2ban/filter.d/vaultwarden.conf. Este filtro analisará os logs do Nginx ou do próprio Vaultwarden para detectar padrões de falha:

sudo nano /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^ -.*"POST /api/(identity|core)/accounts/verify/email$.* 401
            ^ -.*"POST /api/accounts/register$.* 400
ignoreregex =

Reinicie o Fail2Ban:

sudo systemctl restart fail2ban

Passo 6: Backup Automatizado

A perda de dados em um gerenciador de senhas é catastrófica. O Vaultwarden utiliza SQLite, que é leve mas requer cuidado com integridade durante backups. Nunca copie o arquivo db.sqlite3 enquanto o serviço está gravando ativamente sem antes fazê-lo.

A melhor prática é usar o comando VACUUM ou parar o serviço brevemente. Criaremos um script de backup simples:

sudo nano /opt/vaultwarden/backup.sh
#!/bin/bash
BACKUP_DIR="/opt/vaultwarden/backups"
DATE=$(date +%F)
mkdir -p $BACKUP_DIR

# Pausa temporária do serviço para consistência (opcional, mas recomendado)
docker stop vaultwarden
cp /opt/vaultwarden/data/db.sqlite3 $BACKUP_DIR/db-${DATE}.sqlite3
docker start vaultwarden

# Compactar
tar -czf $BACKUP_DIR/backup-${DATE}.tar.gz -C $BACKUP_DIR db-${DATE}.sqlite3

# Remover backups antigos (manter últimos 7 dias)
find $BACKUP_DIR -name "backup-*.tar.gz" -mtime +7 -delete

Torne o script executável e agende via Crontab:

chmod +x /opt/vaultwarden/backup.sh
sudo crontab -e

Adicione a linha para rodar diariamente às 3 da manhã:

0 3 * * * /opt/vaultwarden/backup.sh >> /var/log/vaultwarden-backup.log 2>&1

Passo 7: Instalação do Cliente e Primeiro Acesso

Com o servidor ativo, baixe o aplicativo Bitwarden (ou BitwardenRS) em seu dispositivo. No campo de URL do servidor personalizado (se necessário, embora a versão atual já detecte automaticamente), insira https://seguranca.seudominio.com.

Primeiro Login:

  1. Crie uma conta administrativa usando o email configurado.
  2. Gere um Token de Administração: Vá em Configurações > Administração. Copie e armazene o token gerado. Ele não será exibido novamente.
  3. Habilitar 2FA: Imediatamente vá em Configurações > Segurança e ative a Autenticação de Dois Fatores (TOTP). Isso é obrigatório para qualquer conta com privilégios administrativos.

Mantendo o Sistema Atualizado

A segurança depende da atualização constante. Configure um script ou use o Watchtower para atualizar automaticamente as imagens do Docker, ou mantenha um cronjob manual:

cd /opt/vaultwarden
docker compose pull
docker compose up -d

Verifique sempre os changelogs no repositório oficial do Vaultwarden para identificar breaking changes ou vulnerabilidades de segurança corrigidas.

Conclusão e Boas Práticas Finais

Instalar o Vaultwarden Bitwarden VPS é uma decisão estratégica que equilibra custo, performance e privacidade. Ao contrário de soluções monolíticas como Keycloak self-hosted tutorial ou suites completas como LemonLDAP auth, o Vaultwarden entrega valor imediato com complexidade operacional mínima.

Resumo das melhores práticas aplicadas:

  • Isolamento via Docker e usuários sem shell.
  • HTTPS obrigatório via Reverse Proxy.
  • Inscrições desativadas para controle de acesso.
  • Tokens administrativos fortes e armazenados offline.
  • Backup automatizado do banco SQLite.

Lembre-se: você é o administrador da segurança. Nenhum software pode compensar a negligência na gestão das chaves mestras e tokens de acesso. Mantenha seu sistema operacional atualizado, monitore os logs em busca de tentativas de invasão e treine sua equipe sobre o uso correto do gerenciador de senhas.

Com esta configuração, você possui uma infraestrutura de segredos robusta, pronta para escalar conforme a necessidade da sua organização, sem depender de terceiros para guardar suas chaves mestras.

Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000
WhatsApp