Configurando Cloudflare Zero Trust Tunnel com Docker

O Cloudflare Tunnel (parte do ecossistema Zero Trust) permite expor serviços locais para a internet de forma segura, sem a necessidade de abrir portas no seu roteador ou lidar com configurações complexas de NAT e firewall.

Neste guia, utilizaremos o método de Cloud-managed Tunnels, que permite gerenciar todas as rotas diretamente pelo painel da Cloudflare, utilizando Docker para uma implantação limpa e escalável.

Por que usar Cloudflare Tunnels?

  • Sem Port Forwarding: Não é necessário expor seu IP público ou abrir portas 80/443.
  • Segurança Nativa: Proteção contra DDoS e integração com políticas de acesso (WAF).

Pré-requisitos

  • Domínio configurado na Cloudflare.
  • Docker e Docker Compose instalados.
  • Acesso ao painel Cloudflare Zero Trust.

Passo 1: Criação do Túnel no Painel

Em vez de configurar arquivos YAML complexos localmente, vamos criar o túnel de forma gerenciada:

  1. Acesse o painel Zero Trust e vá em Networks > Tunnels.
  2. Clique em Create a Tunnel e selecione Cloudflared.
  3. Dê um nome ao túnel (ex: servidor-home-lab) e salve.
  4. Na seção “Choose your environment”, selecione Docker.
  5. O painel exibirá um comando. Copie apenas o token alfanumérico longo que aparece após o parâmetro --token.

Passo 2: Configuração do Docker Compose

No seu servidor, crie a estrutura de diretórios e o arquivo de configuração. Ou se você use o Portainer, pode adicionar o conteúdo do docker-compose diretamente na parte da criação da stack.

mkdir -p ~/cloudflared && cd ~/cloudflared
nano docker-compose.yml

Docker Compose File

version: '3.8'
services:
  tunnel:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared-tunnel
    restart: unless-stopped
    environment:
      - TUNNEL_TOKEN=SEU_TOKEN_AQUI
    command: tunnel --no-autoupdate run

Inicie o serviço:

docker-compose up -d

Passo 3: Configurando Rotas (Public Hostnames)

Agora que o container está conectado, configure o acesso externo:

  • No painel da Cloudflare (onde você pegou o token), clique em Next.
  • Na aba Public Hostname, clique em Add a public hostname.
  • Preencha os campos:
    • Subdomain: app (ou o nome desejado).
    • Domain: Selecione seu domínio.
    • Service Type: HTTP (ou HTTPS, dependendo do seu serviço local).
    • URL: O IP interno do seu servidor e a porta (ex: 192.168.1.50:8080 ou nome_do_container:porta se estiverem na mesma rede Docker).
  • Clique em Save hostname.

Foto da cidade de Tubingen

Uma vez que esse túnel está salvo, o seu túnel já está exposto para a internet. O túnel elimina a necessidade de portas abertas, mas expõe o serviço à internet. É importante implementar as camadas de segurança para mitigar ataques de força bruta e vulnerabilidades no serviço de origem.