Skip to main content

>/ Vaultwarden no Raspberry Pi: Seu Servidor de Senhas Auto-Hospedado e Seguro com Cloudflare Tunnel_

·2811 words·14 mins·
Table of Contents

1 - Introdução: Por Que Auto-Hospedar um Gerenciador de Senhas?
#

Em tempos em que proteger nossos dados é mais importante do que nunca, lidar com senhas virou um desafio diário. Reaproveitar a mesma senha em vários lugares ou confiar em serviços de terceiros pode até parecer mais prático, mas também abre portas para riscos e violações de privacidade. É aí que entra a ideia de hospedar o seu próprio gerenciador de senhas: além de garantir mais segurança, você ainda tem controle total sobre tudo.

Este artigo detalha o processo de construção de um servidor de senhas robusto e seguro utilizando o Vaultwarden em um Raspberry Pi 3B+, gerenciado com Docker e Portainer, e com acesso remoto seguro via Cloudflare Tunnel. Mesmo com as especificações modestas do Raspberry Pi 3B+ (1GB RAM, CPU Quad-core 1.2GHz), esta solução demonstra ser altamente eficiente e confiável para uso pessoal.

RASPBERRY PI 3B+

Neste artigo, você aprenderá a:

  • Realizar o deploy do Vaultwarden como um contêiner Docker.
  • Configurar o Cloudflare Tunnel e Access para acesso seguro sem abertura de portas.

2 - A Base: Raspberry Pi OS Lite em Modo Headless 💻
#

Para começar, o Raspberry Pi 3B+ é um hardware muito modesto porém capaz para essa tarefa, com apenas(1GB RAM, Quad-core 1.2GHz). Escolhi o Raspberry Pi OS Lite porque, por não ter interface gráfica, ele é super leve e otimiza os poucos recursos do Pi para o que realmente importa: rodar os serviços.

2.1 - Preparação do Cartão MicroSD e Primeiro Acesso
#

Usei o Raspberry Pi Imager para gravar o Raspberry Pi OS Lite no cartão MicroSD. A grande vantagem aqui foi usar o modo headless, configurando usuário, senha e SSH diretamente no Imager.E como o meu Raspberry esta com a saida da video HDMI queimadas, foi o suficiente.

  • Ferramenta utilizada: Raspberry Pi Imager
  • Detalhes da configuração que utilizei:
    • Raspberry Pi OS Lite (32-bit)
    • Habilitei SSH com autenticação por senha.
    • Defini um usuário e senha.
    • Configurei o fuso horário para a minha localização.

Após gravar, o processo foi padrão: inserir o cartão no Pi, conectar o cabo de rede e a energia.

2.2 - Encontrando o IP e Primeiro Login via SSH
#

Como estava em modo headless, precisei descobrir o IP que o Raspberry Pi pegou na minha rede. Para isso, usei o Nmap, uma ferramenta excelente para varredura de rede, que me mostrou todos os dispositivos conectados à minha rede e seus respectivos IPs.

Rodei o comando:

sudo nmap -sn -vv --resolve-all 192.168.1.0/24
# Substitua pela sua faixa de IP da rede (ex: 192.168.0.0/24)

O Resutado se parecera com isso:

Nmap scan report for 192.168.1.23 [host down,received no-response]
Nmap scan report for 192.168.1.24
Host is up, received arp-response (0.00038s latency).
MAC Address: B8:56:EB:5E:91:C5 (Raspberry Pi Foundation)
Nmap scan report for 192.168.1.25
Host is up, received arp-response (0.00043s latency).
MAC Address: B8:56:EB:5E:91:C5 (Raspberry Pi Foundation)
Nmap scan report for 192.168.1.26 [host down,received no-response]
Nmap scan report for 192.168.1.27 [host down,received no-response]

Usando o nmap, identifiquei os IPs do meu Raspberry Pi na rede: 192.168.1.24 para a conexão wireless e 192.168.1.25 para a cabeada, confirmando-os pelos seus respectivos nomes de MAC.

Com o IP em mãos, fiz o acesso remoto via SSH:

ssh meu_usuario@IP_DO_MEU_PI
# Toque pelo nome e pelo IP do seu RASPBERRY

3 - Orquestrando Serviços: Docker e Portainer 🐳
#

Queria algo simples e facil, e para isso, Docker e Portainer são a combinação perfeita. Eles permitem isolar e gerenciar aplicações de forma eficiente no meu Raspberry Pi.

3.1 - Docker: O Motor dos Contêineres
#

O Docker permite empacotar apps como o Vaultwarden com tudo que precisam pra funcionar. Isso garante que rodem de forma isolada, em qualquer lugar. No meu caso, foi a solução ideal pra ter o Vaultwarden rodando bem no Raspberry Pi, sem conflitos e usando bem os recursos.

A instalação do Docker no Raspberry Pi (que possui arquitetura ARM) é um processo bem documentado. É só seguir o guia oficial do Docker para a instalação, que oferece um convenience script para uma instalação rápida e automatizada.

Para instalar o Docker no seu Raspberry Pi, consulte o guia oficial:

Instalar Docker Engine no Linux

3.2 - Portainer: A Interface de Gerenciamento Visual
#

Para gerenciar contêineres de forma mais visual e simplificada, o Portainer é uma ferramenta muito boa.

  • Com o Portainer, posso facilmente:

    • Visualizar o status de todos os meus contêineres.
    • Criar e gerenciar volumes persistentes para os dados das minhas aplicações.
    • Implantar novas aplicações usando “Stacks” (baseadas em Docker Compose).
    • Monitorar logs e recursos dos contêineres.

A instalação do Portainer CE (Community Edition) também é feita via Docker.

Para instalar e configurar o Portainer CE, consulte o guia oficial:

Portainer CE no Docker

Com o Docker e o Portainer instalados e funcionando, agora vamos preparar o Vaultwarden.

3.3 - Implantando o Vaultwarden via Portainer 💾
#

Com o Docker e Portainer em funcionamento, o próximo passo foi implantar o Vaultwarden.

Primeiro, acessei o Portainer pelo navegador, usando o IP do meu Raspberry Pi e a porta 9443: https://SEU_IP_DO_PI:9443

Na primeira vez, precisei criar um usuário e senha (com um mínimo de 12 caracteres para segurança) para o Portainer. Depois de fazer login, fui para “GET STARTED” e selecionei “Local” dentro de “Environments”.

3.4 - Criando um “Custom Template” para o Vaultwarden
#

Para facilitar futuros deployments ou configurações, decidi criar um “Custom Template” no Portainer. Isso armazena o docker-compose.yml do Vaultwarden diretamente na interface, tornando a implantação mais rápida e padronizada.

  1. Naveguei para a aba “Templates” e selecionei “Custom”.
  2. Cliquei em “Add Custom Template”.
  3. Preenchi o “Title” (ex: “Vaultwarden Server”) e uma “Description” (ex: “Servidor de senhas leve e seguro”).
  4. No editor de código, colei a configuração Docker Compose para o Vaultwarden. Baseei-me na documentação oficial do Vaultwarden, ajustando alguns pontos para o meu ambiente:

Documetação oficial do Valtwarden

Porem a parte que nos interessa agora é o Docker Compose:

services:
    vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
        DOMAIN: "[https://vw.domain.tld](https://vw.domain.tld)" # Este será ajustado depois pelo Cloudflare Tunnel
    volumes:
        - ./vw-data/:/data/ # Onde os dados do Vaultwarden serão armazenados persistentemente
    ports:
        - 8800:80 # Mudei a porta local para 8800 para evitar conflitos com outras aplicações na porta 8000
(Nota: A variável `DOMAIN` aqui é apenas um placeholder inicial; ela será efetivamente gerenciada pelo Cloudflare Tunnel mais tarde. A porta `8800` foi uma escolha minha para evitar conflitos, já que a porta 8000 é comum para outros serviços.)
  1. Rolei para baixo e cliquei em “Create custom template”.

3.5 - Deploying a Stack: Ativando o Vaultwarden
#

Com o template personalizado criado, o deploy da aplicação se tornou muito simples.

  1. Naveguei para a aba “Stacks”.
  2. Cliquei em “Add stack”.
  3. Dei um “Name” para a minha stack (ex: vaultwarden-stack).
  4. Em “Build method”, selecionei “Custom Template” e escolhi o template “Vaultwarden Server” que acabei de criar.
  5. Rolei para baixo e cliquei em “Deploy the stack”.

O Portainer iniciou o processo de baixar a imagem Docker do Vaultwarden e criar o contêiner. Fui para a aba “Containers” para monitorar o status. Esperei até que o estado do contêiner (vaultwarden) mudasse para “Healthy” (indicado pela cor verde), o que confirmou que o servidor Vaultwarden estava funcionando corretamente.

Com o Vaultwarden rodando, o próximo passo foi configurar o acesso seguro via Cloudflare Tunnel.


4 - Criando o Túnel com Cloudflare Tunnel para Acesso Remoto 🌐
#

O objetivo principal desta etapa é tornar o Vaultwarden acessível de qualquer lugar do mundo, mas de forma segura e sem expor minha rede doméstica. Para isso, o Cloudflare Tunnel foi a escolha perfeita.

Pré-requisito crucial: Para seguir este passo, é fundamental que você já tenha uma conta ativa na Cloudflare e um domínio (ou subdomínio) adicionado e configurado para usar os nameservers da Cloudflare.

4.1 - Configurando o Túnel no Cloudflare Zero Trust Dashboard
#

Todo o processo de criação do túnel começa no painel de controle da Cloudflare.

  1. Acesse sua conta Cloudflare.
  2. No menu lateral esquerdo, selecione “Zero Trust”. Isso irá redirecionar para o dashboard do Cloudflare Zero Trust.
  3. Vá para “Network” e depois “Tunnels”.
  4. Clique em “Create a tunnel”.
  5. Na tela de tipo de túnel, selecione “Cloudflared”.

Cloudflared vs. WARP
#

Escolhi cloudflared porque ele é o método ideal para criar túneis diretos para servidores (como meu Raspberry Pi) para a rede Cloudflare.
WARP é mais voltado para conectar dispositivos de usuários (laptops, celulares) à sua rede ou serviços, agindo como uma VPN.
Para auto-hospedagem, cloudflared é a opção correta.

  1. Em “Name your tunnel”, escolha um nome fácil de identificar (ex: tunnelRaspberry).
  2. Clique em “Save tunnel”.

4.2 - Conectando o Raspberry Pi ao Túnel (O Conector)
#

Após criar o túnel, a Cloudflare apresenta as opções de “Connectors”.

O que são Conectores?
Conectores são instâncias do software cloudflared que rodam em seus servidores (no meu caso, o Raspberry Pi). Eles são a ponte que estabelece uma conexão segura e persistente de saída entre seu servidor e a Cloudflare.

A Cloudflare oferece comandos para diversos sistemas (Windows, macOS, Linux e Docker).

Por que Docker?
#

Decidi usar Docker para rodar o cloudflared como um contêiner no Raspberry Pi. Isso mantém o sistema base mais limpo e aproveita a infraestrutura Docker que já estava configurada com o Portainer.

Comando gerado pela Cloudflare:

docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <SEU_TOKEN_GERADO_AQUI>

Acessando o Raspberry Pi via SSH No terminal do meu computador, usei:

ssh meu_usuario@IP_DO_MEU_PI

Colei o comando docker run no terminal e pressionei Enter. O contêiner foi baixado e iniciado, conectando automaticamente à Cloudflare.

Após alguns segundos, o status do conector mudou para “CONNECTED” (verde) no painel da Cloudflare. Cliquei em “Next” para prosseguir.

4.3 - Configurando as Rotas (Public Hostnames)
#

Agora vamos informar à Cloudflare qual subdomínio apontará para qual serviço no Raspberry Pi.

Na seção “Public Hostnames”, clique em “Add a public hostname”.

Configurações para o Vaultwarden:
#

  • Subdomain: cofre
  • Domain: meudominio.com (ou outro configurado na Cloudflare)
  • Path: (em branco)
  • Service:
    • Type: HTTP
    • URL: 192.168.1.24:8800

💡 Lembre-se: Mudei a porta do Vaultwarden para 8800 no meu docker-compose.yml.

Clique em “Save hostname”.

A Cloudflare leva alguns minutos para propagar o DNS e ativar o túnel globalmente. Com isso, o túnel principal do Vaultwarden estava ativo e funcionando! via rede Cloudflare. O próximo passo é a configuração inicial do próprio Vaultwarden.


5 - Configurando o Vaultwarden e o Primeiro Acesso 🔐
#

Com o Cloudflare Tunnel ativo e direcionando o tráfego para o meu Raspberry Pi, o Vaultwarden estava acessível via internet. O próximo passo foi a configuração inicial do servidor e a criação da minha conta de usuário.

5.1 - Primeiro Acesso e Criação da Conta Mestra
#

Acesse o domínio que você configurou no Cloudflare Tunnel (no meu caso, cofre.meudominio.com.br):

Tela inicial do Vaultwarden para criação de conta

Ao carregar a página pela primeira vez, você será apresentado à tela de criação de conta. Clique em “Create Account”.

  1. E-mail e Nome: Insira seu endereço de e-mail e um nome de usuário. Estes serão suas credenciais de acesso ao Vaultwarden.
  2. Clique em “Continue”.

5.2 - Definindo sua Senha Mestra (MUITO IMPORTANTE!)
#

Este é o momento mais crítico da configuração. Você será solicitado a criar sua Senha Mestra.

  • O que é a Senha Mestra? É a única senha que você vai precisar lembrar — ela dá acesso ao seu cofre inteiro. Na prática, é como a chave-mestra de um cofre real: se você perder, não tem volta. Ninguém (nem mesmo você) poderá recuperar os dados salvos no Vaultwarden. Por isso, criar uma senha forte e não esquecê-la de jeito nenhum é fundamental.
  • Minha Recomendação: Crie uma senha longa e segura, misturando letras maiúsculas e minúsculas, números e símbolos. Uma boa ideia é usar uma frase única que faça sentido só pra você, algo fácil de lembrar mas difícil de adivinhar.
  • Dica de Senha (Hint): Esse campo pode te salvar se a memória falhar. Escreva uma dica que só você entenda — algo que te faça lembrar da senha, sem entregá-la de bandeja.

Após definir sua senha mestra e, se desejar, uma dica, clique em “Create Account”.

Com sua conta criada e a senha mestra definida, você está dentro do seu cofre Vaultwarden! Agora você tem controle total sobre suas senhas.


6 - Finalizando o Setup: Protegendo com Cloudflare Access 🔑
#

Mesmo com o túnel ativo, eu queria uma camada extra de segurança para controlar quem pode tentar acessar meu cofre. É aqui que entra o Cloudflare Access.

  • O que é Cloudflare Access? É um serviço da Cloudflare que adiciona uma camada de autenticação antes mesmo que o usuário chegue à sua aplicação. Em vez de expor o login do Vaultwarden diretamente à internet, o Cloudflare Access age como um “porteiro digital”. Ele verifica a identidade do usuário (por e-mail, provedores de identidade, etc.) e só libera o acesso à sua aplicação se a autenticação for bem-sucedida, tudo isso sem a necessidade de um VPN tradicional.

Voltamos ao painel da Cloudflare para configurar esta política.

6.1 - Adicionando a Aplicação ao Cloudflare Access
#

  1. No painel da Cloudflare Zero Trust, navegue até a aba lateral esquerda e clique em “Access”.
  2. Em seguida, selecione “Applications” e clique em “Add an Application”.
  3. Escolha a opção “Self-hosted”, já que estamos protegendo um serviço rodando em sua própria infraestrutura (seu Raspberry Pi).

6.2 - Configurando as Políticas de Segurança
#

Aqui, vamos definir como o Cloudflare Access irá proteger seu Vaultwarden.

  1. Basic Information:

    • Em “Application Name”, eu coloquei Cofre. Este é um nome de exibição para sua aplicação no painel do Cloudflare Access.
    • Em “Session Duration”, eu defini 24 horas.
      • Minha escolha para Session Duration: Esta é a duração de tempo que um usuário autenticado pode acessar a aplicação sem precisar se reautenticar. Eu escolhi 24 horas para um bom equilíbrio entre segurança e conveniência, evitando ter que digitar o código a cada poucas horas. É uma escolha pessoal baseada na sua tolerância a reautenticações.
  2. Public Hostname:

    • “Input Method”: Deixe como Default.
    • “Subdomain”: Coloque o mesmo subdomínio que você usou na configuração do túnel, no meu caso, cofre.
    • “Domain”: Selecione o seu domínio principal (ex: meudominio.com.br).
    • “Path”: Deixe vazio.
  3. Access Policies: Agora, vamos criar a regra que define quem pode acessar. Clique em “CREATE NEW POLICY”. Uma nova janela ou seção se abrirá.

    • Basic Information da Política:

      • Dê um “Policy name” (ex: LoginEmail).
      • Em “Action”, deixe como Allow (permitir).
      • Em “Session duration”, você pode escolher uma duração para a sessão da política. Eu escolhi 24 horas, assim como na aplicação.
    • Configurando as Regras (Rules):

      • Na seção “Add rules”, vamos definir quem é permitido.
      • Em “Selector”, escolhi Emails. Isso significa que a autenticação será baseada no endereço de e-mail.
      • Em “Value”, inseri os endereços de e-mail que eu desejo permitir o acesso à aplicação. Você pode adicionar múltiplos e-mails aqui.
    • Role para baixo e clique em “Save”.

  4. Voltando à Configuração da Aplicação: Após salvar a política, você retornará à página de configuração da aplicação do Access.

    • Em “Access Policies”, selecione a opção “SELECT EXISTING POLICIES”.
    • Selecione a sua política recém-criada. No meu caso, ela se chamava LoginEmail.
  5. Finalizando a Configuração:

    • Role para o final da página e clique em “Next”.
    • Clique em “Next” novamente, pois não faremos uma “Custom page” aqui (a página de login padrão da Cloudflare já é suficiente).
    • Clique em “Save”.

Em poucos segundos, a configuração do Cloudflare Access estará pronta e ativa!

6.3 - Testando o Acesso Seguro
#

Para testar, acesse novamente o domínio da sua aplicação:

https://cofre.meudominio.com.br

Tela de Login do Cloudflare Access

Agora, você será redirecionado para a página de login do Cloudflare Access. Insira o e-mail que você permitiu na política de acesso. A Cloudflare enviará um código de acesso único para este e-mail. Digite o código na página, e você poderá acessar o Vaultwarden de forma segura, sem a necessidade de abrir portas no roteador ou configurar um proxy reverso manual complexo!

Com essa camada extra de segurança, meu cofre digital estava verdadeiramente protegido e acessível de forma prática e controlada.


Conclusão
#

Implementar o Vaultwarden no Raspberry Pi, acessível via Cloudflare Tunnel e protegido pelo Cloudflare Access, cria uma arquitetura poderosa para o gerenciamento de credenciais. Isso elimina nossa dependência de serviços de terceiros para dados tão críticos.

Rotina de Backup: É importante que você estabeleça e mantenha uma rotina de backups regulares para o diretório de dados do Vaultwarden. O próprio Vaultwarden oferece recursos para exportar o cofre. Use-os e armazene essas cópias de forma segura, preferencialmente em vários locais,isso garante um controle de danos em caso de falhas.

Compatibilidade Total com Clientes Bitwarden: O Vaultwarden tem compatibilidade com os clientes oficiais do Bitwarden. Isso significa que seu servidor auto-hospedado funcionará perfeitamente com os aplicativos para Android e iOS, extensões de navegador (Chrome, Firefox, Edge, etc.) e clientes de desktop. Alem de que o Valtwardem é escrito em Rust oque torna ele ainda mais performatico que o Bitwarden.

Flexibilidade de Hardware: Usei um Raspberry Pi 3B+, um hardware mais antigo e de specs baixas, e ele se mostrou eficiente para a tarefa.


ScriptJohn_
Author
ScriptJohn_
Apenas um cara que sofre de ‘pcismo’ e gosta de cybersegurança