Homelab Fantasma: Configurando Proxy na Cloudflare Tunnel com Caddy+Cloudflared

Neste guia, eu vou mostrar como configurar o Caddy junto com o Cloudflare Tunnel, usando o Docker e o Cloudflared. O Caddy é um servidor web e proxy reverso de código aberto, que usa HTTPS por padrão e facilita a configuração de sites e serviços. O Cloudflare Tunnel é um recurso que permite que você crie um túnel seguro entre o seu servidor e a rede da Cloudflare, sem expor o seu IP ou abrir portas no seu firewall.

O objetivo deste guia é permitir que você acesse o seu site ou serviço através de um domínio da Cloudflare, usando o Caddy como proxy reverso e o Cloudflare Tunnel como camada de segurança.

Requisitos

  • Uma conta da Cloudflare e um domínio registrado na Cloudflare. (pode ser a conta gratuita)
  • Um servidor com o Docker e o Docker Compose instalados .

Preparando os certificados na Cloudflare

O primeiro passo é criar um certificado de origem no site da Cloudflare, que será utilizado pelo Caddy para estabelecer uma conexão HTTPS com o Cloudflare Tunnel. Para isso, siga as etapas abaixo:

Acesse o painel da Cloudflare e selecione o seu domínio. Navegue até a seção SSL/TLS e clique em Origem.

Clique em ‘Criar Certificado’ e selecione as opções desejadas.

Clique em ‘Avançar’ e copie o certificado e a chave privada gerados. Salve os certificados com os nomes cert.pem e key.key

Cloudflare: Criando um Tunel

O próximo passo é configurar um túnel no site da Cloudflare, o que permitirá o acesso ao seu site ou serviço por meio de um domínio da Cloudflare, usando o Cloudflare Tunnel como camada de segurança. Para isso, siga estes passos:

Navegue até a seção Zero Trust no site da Cloudflare.

Clicar em Networks e clicar em Criar túnel.

Digite um nome para o seu túnel e clique em Criar.

Em sistema operacional clique em docker.

Copie o comando que aparece a única coisa que vamos precisar desse comando é o token.

Caddy: Configuração

Precisamos criar um arquivo docker-compose que vai definir os serviços do Caddy e do Cloudflared

Estrutura dos arquivos e Diretórios

/mnt/dockerapp
├── caddy
│   ├── certs
│   │   ├── cert.pem
│   │   └── key.key
│   ├── container-config
│   │   ├── Caddyfile
│   │   ├── whoami.caddy
├── docker-compose.yaml

Criando os diretórios

sudo mkdir -p /mnt/dockerapp/caddy
sudo mkdir -p /mnt/dockerapp/caddy/container-config/
sudo mkdir -p /mnt/dockerapp/caddy/certs/

Vamos precisar criar uma rede de comunicação para o Caddy com o nome ‘proxy’ execute o comando abaixo:

sudo docker network create --driver bridge proxy

Copiar os certificados da Cloudflare

Copie o conteúdo dos certificados gerados na Cloudflare para o diretório /certs usando os comandos abaixo:

sudo nano /mnt/dockerapp/caddy/certs/cert.pem

Copie e cole o conteúdo do arquivo ‘cert.pem’, salve e saia.

Repita o processo agora para o arquivo key.key

sudo nano /mnt/dockerapp/caddy/certs/key.key

Altere as permissões dos certificados.

sudo chmod 600 /mnt/dockerapp/caddy/certs/*

Criando um Caddyfile

No arquivo de configuração do Caddy, vamos incluir o caminho para os certificados, proteger os cabeçalhos e importar arquivos de configuração.

sudo nano /mnt/dockerapp/caddy/container-config/Caddyfile

Caddyfile

(trusted_proxy_list) {
       ## Uncomment & adjust the following line to configure specific ranges which should be considered as trustworthy.
        trusted_proxies 10.0.0.0/8 172.16.0.0/16 192.168.0.0/16 fc00::/7
}

(cert_origem) {

tls /etc/ssl/certs/cert.pem /etc/ssl/certs/key.key

}

(headers) {
        header {
                Strict-Transport-Security max-age=31536000;
                X-Content-Type-Options nosniff
                X-Frame-Options DENY
                Referrer-Policy no-referrer-when-downgrade
                X-XSS-Protection 1
        }
}

import *.caddy

Também vamos criar um arquivo para uma aplicação de teste usando o Whoami.

siga o comando abaixo:

sudo nano /mnt/dockerapp/caddy/container-config/whoami.caddy

whoami.seudominio.com {
    tls /etc/ssl/certs/cert.pem /etc/ssl/certs/key.key
    reverse_proxy whoami:80
}

Criando o arquivo Docker Compose

Com os arquivos de configuração já criados, podemos prosseguir para a etapa de criação do arquivo que gerará as imagens.

Crie o arquivo docker-compose.yaml

sudo nano /mnt/dockerapp/caddy/docker-compose.yaml

docker-compose.yaml

---
version: "3.9"
services:
  tunnel:
    container_name: cloudflared-tunnel
    image: cloudflare/cloudflared
    restart: unless-stopped
    command: tunnel run
    environment:
      - TUNNEL_TOKEN= seutoken
    networks:
      - cloudflare
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: unless-stopped
    networks:
      - cloudflare
      - proxy
    security_opt:
      - label:disable
    ports:
      - 7280:80
      - 5443:443
      - 443:443/udp
    volumes:
      - ./container-config/:/etc/caddy
      - /etc/localtime:/etc/localtime:ro
      - ./certs/:/etc/ssl/certs/
networks:
  cloudflare: null
  proxy:
    external: true

Inicie o Caddy usando o comando.

cd /mnt/dockerapp/caddy && sudo docker compose up -d

Verifique os logs em busca de possíveis erros.

sudo docker logs caddy
sudo docker logs cloudflared-tunnel

Se tudo ocorrer conforme o esperado, o Caddy iniciará seu serviço e ficará aguardando conexões.

Criando uma aplicação de Teste

Com o proxy já configurado, vamos testar sua integração com alguma aplicação usando o Cloudflare Tunnel. Para isso, utilizaremos a aplicação Whoami.

Crie um diretório de nome whoami

sudo mkdir -p /mnt/dockerapp/whoami

Crie um arquivo docker-compose.yaml

sudo nano /mnt/dockerapp/whoami/docker-compose.yaml

docker-compose.yaml

---
version: "3.8"
services:
  whoami:
    container_name: whoami
    image: containous/whoami
    restart: unless-stopped
    ports:
      - 80:80
    networks:
      - proxy
networks:
  proxy:
    external: true

Suba o serviço

cd /mnt/dockerapp/whoami && sudo docker compose up -d

Verifique os logs em busca de possíveis erros.

sudo docker logs whoami

Configurando Um APP Na Cloudflare Tunel

Com o proxy já em execução e uma aplicação pronta, é hora de adicioná-la ao nosso domínio e usar os certificados gerados.

Navegue até o site do Cloudflare, acesse o menu Zero Trust, vá para Redes, clique no nome do seu túnel criado e, em seguida, na aba Public Hostname. Por fim, clique no botão ‘Add a Public Hostname’.

Dê um nome para o seu subdomínio, por exemplo, ‘whoami’. Em ‘Domain’, selecione o seu domínio. No ‘Service Type’, escolha HTTPS e, na URL, escreva ‘caddy’, que é o nome do container do nosso proxy. Clique em ‘Additional Application Settings’ e em ‘Original Server Name’, coloque o seu endereço. Depois clique no botão ‘Save Hostname’.

Conclusão

Neste guia, eu mostrei como configurar o Caddy junto com o Cloudflare Tunnel, usando o Docker e o Cloudflared. Com isso, você pode acessar o seu site ou serviço através de um domínio da Cloudflare, usando o Caddy como proxy reverso e o Cloudflare Tunnel como camada de segurança.

Se você quiser saber mais sobre o Caddy, o Cloudflare Tunnel, você pode visitar os endereços oficiais:

Deixe um comentário