Fluxo de Rede e Acesso Externo Seguro¶
A capacidade de acessar seus serviços auto-hospedados de qualquer lugar, de forma segura, é uma das principais funcionalidades desta arquitetura. Utilizamos uma combinação de Cloudflare Tunnel, Traefik como proxy reverso e Authelia para autenticação de dois fatores (2FA) para alcançar este objetivo.
Diagrama de Fluxo Detalhado¶
Este diagrama ilustra o caminho que uma requisição de um usuário externo percorre até alcançar um serviço Docker hospedado na sua core-services-vm.
sequenceDiagram
participant U as Usuário Externo
participant CF_DNS as Cloudflare DNS
participant CF_Edge as Cloudflare Edge Network
participant CFT_Agent as Cloudflared Agent (Container na core-services-vm)
participant Traefik_Proxy as Traefik (Container na core-services-vm)
participant Authelia_Auth as Authelia (Container na core-services-vm)
participant App_Service as Serviço Docker (e.g., Nextcloud)
U->>CF_DNS: 1. Requisição DNS para app.seudominio.com
CF_DNS-->>U: 2. Resolve para IP da Cloudflare (associado ao Túnel)
U->>CF_Edge: 3. Conexão HTTPS para app.seudominio.com
CF_Edge->>CFT_Agent: 4. Tráfego encaminhado via Túnel Seguro (conexão de saída)
Note over CF_Edge, CFT_Agent: Seu IP doméstico NUNCA é exposto!
CFT_Agent->>Traefik_Proxy: 5. Encaminha requisição HTTP para Traefik (porta 80 interna)
Note over CFT_Agent, Traefik_Proxy: Traefik escuta em 80/443 na VM, CFT direciona para ele.
Traefik_Proxy->>Traefik_Proxy: 6. Roteamento baseado em Host (app.seudominio.com)
Traefik_Proxy->>Authelia_Auth: 7. Verifica Autenticação (Middleware Authelia)
alt Usuário Não Autenticado
Authelia_Auth-->>Traefik_Proxy: 8a. Redirecionar para Login
Traefik_Proxy-->>U: 9a. Redireciona para auth.seudominio.com
U->>Authelia_Auth: 10a. Usuário faz Login + 2FA
Authelia_Auth-->>U: 11a. Sessão Autenticada Estabelecida (cookie)
Note over U,Authelia_Auth: Usuário é redirecionado de volta para app.seudominio.com
U->>Traefik_Proxy: (Nova requisição para app.seudominio.com com cookie de sessão)
Traefik_Proxy->>Authelia_Auth: (Verifica Autenticação novamente)
Authelia_Auth-->>Traefik_Proxy: (Usuário Autenticado!)
else Usuário Autenticado
Authelia_Auth-->>Traefik_Proxy: 8b. Autenticação OK
end
Traefik_Proxy->>App_Service: 12. Roteia para o Container do Serviço (e.g., Nextcloud porta 80)
Note over Traefik_Proxy,App_Service: Traefik usa labels Docker para encontrar o serviço.
App_Service-->>Traefik_Proxy: 13. Resposta do Serviço
Traefik_Proxy-->>CFT_Agent: 14. Resposta via Traefik
CFT_Agent-->>CF_Edge: 15. Resposta via Túnel Seguro
CF_Edge-->>U: 16. Resposta final para o Usuário (HTTPS)
Componentes Chave e Suas Funções¶
1. Cloudflare DNS e Edge Network¶
- Gerenciamento DNS: Seu domínio (
{{ base_domain }}) utiliza os nameservers da Cloudflare. - Ocultação de IP: Os registros DNS para seus serviços não apontam para o seu IP doméstico, mas para a rede da Cloudflare. Isso protege seu IP de ser exposto diretamente na internet.
- Proteção DDoS e WAF: O tráfego passa pela infraestrutura da Cloudflare, que oferece mitigação de ataques DDoS e um Web Application Firewall (WAF) básico (configurações mais avançadas podem estar disponíveis em planos pagos).
- Cache (Opcional): Cloudflare pode armazenar em cache conteúdo estático dos seus sites, acelerando o carregamento para os usuários e reduzindo a carga no seu servidor.
2. Cloudflare Tunnel (cloudflared Agent)¶
- Conexão de Saída Segura: O container
cloudflared(rodando nacore-services-vm) estabelece uma conexão criptografada de saída para a rede da Cloudflare. - Sem Abertura de Portas no Roteador: Como a conexão é iniciada de dentro da sua rede local para fora, você não precisa configurar nenhum encaminhamento de porta (port forwarding) no seu roteador doméstico. Isso aumenta significativamente a segurança da sua rede local.
- Ingress Rules ou
--hostname:- Você pode definir "Public Hostnames" (Ingress Rules) no dashboard Cloudflare Zero Trust para especificar quais subdomínios são expostos através do túnel e para qual serviço interno eles devem ser encaminhados (neste caso, para o Traefik).
- Alternativamente, a flag
--hostnameno comandocloudflaredpode registrar automaticamente um ou mais hostnames para o túnel.
- Encaminhamento para Traefik: O
cloudflaredé configurado para encaminhar todo o tráfego recebido do túnel para o serviço Traefik na rede Docker interna (e.g.,http://traefik:80).
3. Traefik (Proxy Reverso)¶
Traefik é um componente central para gerenciar o tráfego interno para seus containers.
- Entrypoints: Traefik escuta em pontos de entrada definidos, como a porta
80(HTTP) e443(HTTPS) nacore-services-vm. - Redirecionamento HTTP para HTTPS: Todo o tráfego chegando na porta
80é automaticamente redirecionado paraHTTPSna porta443. - Roteamento Baseado em Host: Traefik examina o cabeçalho
Hostda requisição HTTP (e.g.,nextcloud.{{ base_domain }}) para determinar para qual serviço interno a requisição deve ser encaminhada. - Descoberta de Serviços Docker: Traefik monitora o socket Docker e automaticamente descobre novos containers que possuem labels específicas do Traefik. Essas labels definem como o tráfego deve ser roteado para aquele container (e.g., qual subdomínio, qual porta interna do container).
- Provedor de Arquivos (File Provider): Além da descoberta Docker, Traefik pode carregar configurações de roteamento de arquivos YAML. Isso é usado para rotear tráfego para serviços que não estão na mesma instância Docker que o Traefik (como o OpenWebUI rodando na
ai-desktop-vm). - Gerenciamento de Certificados SSL/TLS (Let's Encrypt):
- Traefik automaticamente solicita, renova e gerencia certificados SSL/TLS da Let's Encrypt para todos os seus subdomínios expostos.
- Ele utiliza o desafio DNS-01 com a API da Cloudflare. Isso significa que Traefik (usando o token API da Cloudflare que você forneceu) cria temporariamente um registro TXT no DNS do seu domínio para provar à Let's Encrypt que ele controla o domínio. Este método é robusto e não requer que portas HTTP estejam abertas para o mundo.
- Os certificados são armazenados no arquivo
acme.json(mapeado para um volume NFS).
- Middlewares: Traefik usa middlewares para processar requisições antes de encaminhá-las aos serviços. Exemplos:
- Middleware de redirecionamento HTTP para HTTPS.
- Middleware para adicionar headers de segurança (como os em
security_headers.yml). - Middleware de Forward Authentication para Authelia.
4. Authelia (Servidor de Autenticação e Autorização)¶
Authelia adiciona uma camada crucial de segurança, exigindo autenticação (e opcionalmente 2FA) antes que os usuários possam acessar os serviços protegidos.
- Integração com Traefik: Traefik é configurado para usar Authelia como um middleware de forward authentication.
- Quando uma requisição chega para um serviço protegido, Traefik envia informações sobre a requisição para o endpoint
/api/verifydo Authelia. - Authelia verifica se o usuário tem uma sessão válida (através de um cookie).
- Quando uma requisição chega para um serviço protegido, Traefik envia informações sobre a requisição para o endpoint
- Portal de Login: Se o usuário não estiver autenticado, Authelia instrui Traefik a redirecionar o navegador do usuário para o portal de login do Authelia (e.g.,
https://auth.{{ base_domain }}). - Autenticação de Múltiplos Fatores (MFA): Após fornecer credenciais válidas (usuário/senha), Authelia pode exigir um segundo fator (e.g., código TOTP de um app autenticador).
- Políticas de Acesso: Authelia permite definir políticas granulares em seu arquivo
configuration.ymlpara determinar qual nível de autenticação é necessário para diferentes domínios ou redes. - Single Sign-On (SSO) Básico: Uma vez que o usuário está logado no Authelia, ele pode acessar outros serviços protegidos pelo mesmo Authelia sem precisar logar novamente (dentro da validade da sessão Authelia).
Vantagens desta Abordagem¶
- Segurança Aprimorada:
- Nenhum IP doméstico exposto.
- Nenhuma porta aberta no roteador.
- Todo o tráfego externo é HTTPS.
- Proteção centralizada com 2FA via Authelia.
- Benefícios da rede Cloudflare (DDoS, WAF).
- Simplicidade de Gerenciamento:
- Gerenciamento de certificados SSL automatizado por Traefik.
- Configuração de proxy reverso centralizada no Traefik.
- Fácil adicionar novos serviços e protegê-los com labels Docker e regras Authelia.
- Flexibilidade:
- Suporte para diversos tipos de aplicações e protocolos.