Cloudflare Tunnel + Zero Trust + WARP 2026: Guia Empresarial

Cloudflare · Tunnel · Zero Trust · WARP · ZTNA · Access · Gateway · PME | ✎ Duarte Spínola | 2026-06-15

O artigo Cloudflare Tunnel: Expor Serviços cobriu a instalação básica do cloudflared. Este guia empresarial (baseado na documentação oficial Cloudflare One) transforma o Tunnel numa plataforma completa de acesso remoto: ingress rules para múltiplos serviços, Cloudflare Access com políticas Zero Trust, WARP como cliente gerido, Gateway para DNS filtering e troubleshooting dos problemas mais comuns — para PMEs de 25-100 colaboradores que precisam de acesso seguro sem VPN legacy.

Conteúdos

1. Plataforma Unificada Cloudflare (2018-2026)

A Cloudflare começou em 2010 como CDN + DDoS protection. Em 2018 lançou o Tunnel (daemon cloudflared com ligação outbound). Em 2020 surgiu o Access (substituto Zero Trust de VPN). Em 2021, o WARP (cliente para dispositivos remotos). Em 2024-2026, unificou tudo sob a marca Cloudflare Zero Trust — uma plataforma única para acesso seguro, DNS filtering, RBI, CASB e DLP.

Marco Data Impacto
Tunnel 2018 Outbound-only, sem abrir portas; SSL automático
Access 2020 Substituto Zero Trust para VPN (acesso por recurso)
WARP 2021 Cliente para dispositivos remotos
Gateway 2022 DNS filtering + HTTP inspection + RBI
WARP 2.0 Mar 2026 Split tunneling inteligente, MDM-friendly
Tunnel 2026.5 Mai 2026 TCP raw support, múltiplos datacenters, auto-update
Dimensão VPN IPsec Legacy Cloudflare Zero Trust
Modelo Full LAN access Per-app (acesso granular por recurso)
Autenticação 1 vez no início Contínua (re-auth por policy)
Performance Concentrador VPN (latência alta) Cloudflare edge (200+ POPs globais)
Custo Appliance + licenças + manutenção 5€/user/mês ou free tier (50 users)
Setup 2-4 semanas 1-2 dias

O Tunnel sozinho expõe apps self-hosted. O verdadeiro poder está em combinar Tunnel + Access + WARP + Gateway — substituindo VPN, DNS filtering, anti-malware e CASB por uma plataforma única gerida na cloud.

2. Cenários de Aplicação

  • Developer solo — Quick tunnel *.trycloudflare.com para demos temporárias (24h, sem DNS). Custo zero.
  • PME 25-50 cols — Substituir VPN legacy por Tunnel + WARP. Apps self-hosted via Tunnel, DNS filtering via WARP. Custo: 125-250€/mês (Standard).
  • MSP multi-tenant — Cada cliente com tunnel + policies isoladas. ZT é pré-requisito para NIS2 (ver NIS2: Implementação 90 Dias).
  • Equipa remota híbrida (50+ cols) — WARP via MDM (Intune, Jamf). Split tunneling: SaaS passa direto, tráfego corporativo por Cloudflare. Latência <50ms.
  • Hospital/clinica — Tunnel para EHR, Access com MFA FIDO2, WARP para staff móvel. Audit logs 180 dias (compliance RGPD).

ℹ️ Para empresas com menos de 5 colaboradores e sem dados sensíveis, o free tier é suficiente. Para dúvidas sobre âmbito NIS2, consulte a auto-avaliação NIS2.

3. Os 7 Componentes do Zero Trust

A plataforma Cloudflare Zero Trust em 2026 tem 7 componentes integrados, configurados no Cloudflare Dashboard:

# Componente Função Substitui
1 Tunnel Liga servidores on-premises via outbound Port forwarding, VPN site-to-site
2 Access Policies Zero Trust para apps self-hosted e SaaS VPN client (Cisco AnyConnect, OpenVPN)
3 WARP Cliente para dispositivos (Win/Mac/Linux/iOS/Android) VPN client tradicional
4 Gateway DNS filtering + HTTP inspection + RBI Cisco Umbrella, Zscaler ZIA
5 CASB Shadow IT e SaaS security Netskope CASB, Defender Cloud Apps
6 DLP Data Loss Prevention (PII, financeiros) Symantec DLP, Purview DLP
7 RBI Remote Browser Isolation (anti-malware) Menlo Security, Cisco Web Isolation

💡 Para PMEs, começar com Tunnel + Access (os 2 mais críticos) e adicionar Gateway + WARP nos meses seguintes. Os 7 componentes integram-se num dashboard único e partilham logs.

Cloudflare Equivalente Microsoft Licença M365
Tunnel Application Proxy (Azure AD) P1/P2
Access Conditional Access P1/P2
WARP Global Secure Access client P2 / E5
Gateway Defender for Endpoint network protection P2 / E5
CASB/DLP Defender for Cloud Apps / Purview DLP E3 / E5

Trade-off: Cloudflare é multi-cloud (AWS, GCP, Azure, on-premises); Microsoft é Microsoft-first. Para PME 100% Microsoft, M365 E5 é natural. Para PME multi-cloud ou híbrida, Cloudflare ZT é superior.

4. Tunnel Avançado — Ingress Rules

Em produção, é preciso expor múltiplos serviços (Grafana, Zabbix, SSH, RDP) com URLs distintas — grafana.empresa.pt, ssh.empresa.pt, etc. Isto é feito via config.yml com ingress rules.

O ficheiro /etc/cloudflared/config.yml tem 3 secções principais: tunnel: (UUID), credentials-file: (path para JSON), e ingress: (lista de regras hostname → serviço). Opcionalmente warp-routing: e originRequest: para configurações avançadas.

Exemplo: 5 Serviços + Catch-all

# /etc/cloudflared/config.yml
tunnel: a1b2c3d4-e5f6-7890-abcd-ef1234567890
credentials-file: /etc/cloudflared/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json

logfile: /var/log/cloudflared.log
loglevel: info
metrics: localhost:2000

ingress:
  # Grafana (porta 3000)
  - hostname: grafana.empresa.pt
    service: http://localhost:3000
    originRequest:
      connectTimeout: 30s
      keepAliveConnections: 8

  # Zabbix (porta 8080)
  - hostname: zabbix.empresa.pt
    service: http://localhost:8080

  # Aplicação custom (porta 5000)
  - hostname: app.empresa.pt
    service: http://localhost:5000

  # SSH (TCP raw via proxy-protocol)
  - hostname: ssh.empresa.pt
    service: ssh://localhost:22
    originRequest:
      proxyType: "socks"

  # RDP
  - hostname: rdp.empresa.pt
    service: rdp://localhost:3389
    originRequest:
      proxyType: "socks"
      connectTimeout: 60s

  # Catch-all (OBRIGATÓRIO — última regra)
  - service: http_status:404

ℹ️ Validar YAML com cloudflared tunnel --config /path/to/config.yml ingress validate antes de aplicar. O http_status:404 catch-all é obrigatório.

Quando crias o tunnel no dashboard, a Cloudflare gera automaticamente CNAMEs para os hostnames configurados (ex: grafana.empresa.pta1b2c3d4.cfargotunnel.com). Após editar o config.yml, recarregar com sudo systemctl restart cloudflared.

Load Balancing

Para apps com múltiplas instâncias, o Tunnel suporta round-robin:

ingress:
  - hostname: api.empresa.pt
    service: http://10.0.1.10:5000
  - service: http://10.0.1.11:5000
  - service: http://10.0.1.12:5000

💡 Para health checks e failover avançado, usar Cloudflare Load Balancer (€5/mês add-on) com health checks HTTP e geolocation routing.

5. Cloudflare Access — Políticas Zero Trust

O Access aplica políticas de autenticação e autorização a cada app exposta via Tunnel. Em vez de “VPN dá acesso à LAN inteira”, Access dá acesso granular por app com autenticação contínua.

Tipo Descrição Caso de uso
Self-hosted Apps no teu servidor (HTTP/SSH/TCP) Grafana, Zabbix, ERP, GitLab
SaaS Apps externas (Slack, Salesforce, M365) Adicionar MFA/SSO sem mudar app
Browser-rendered Apps legacy sem HTTPS (RBI) Apps internas em HTTP, mainframes
SSH SSH via browser (WARP terminal) Sysadmin sem cliente SSH local

Setup de Self-hosted App (Grafana)

  1. Dashboard → Access → Applications → Add Application → Self-hosted
  2. Name: Grafana Produção | Session Duration: 24h (1h para apps sensíveis) | Application domain: grafana.empresa.pt
  3. Identity Provider: Settings → Authentication → Add new → Entra ID (copiar Tenant ID + Client ID + Client Secret da App Registration no Azure)
  4. Testar: Abrir https://grafana.empresa.pt → Access intercepta → redireciona para Entra ID → login + MFA → cookie de sessão → Grafana

Políticas (Allow/Block)

Acção Descrição Caso de uso
Allow Permite acesso se condições cumpridas Default para a maioria dos cenários
Block Bloqueia sempre IPs adversariais, ex-funcionários
Service Auth Token service-to-service (mTLS) CI/CD pipelines, scripts
Require MFA Força MFA extra após SSO Apps sensíveis (EHR, financeiros)
Require approval Requer aprovação de admin Acesso temporário a produção

Exemplo de policy JSON (acesso a Grafana só para @empresa.pt, MFA obrigatório, sessão 1h, geo PT/ES/FR/BR):

{
  "name": "Developers Grafana",
  "decision": "allow",
  "include": [
    { "email_domain": ["empresa.pt"] },
    { "email": ["[email protected]", "[email protected]"] }
  ],
  "exclude": [
    { "email": ["[email protected]"] }
  ],
  "require": [ { "mfa": true } ],
  "session_duration": "1h",
  "geo": { "allowed_countries": ["PT", "ES", "FR", "BR"] }
}

Identity Providers Suportados

IdP Tipo Custo
Entra ID (Azure AD) SSO empresarial Incluído em M365
Google Workspace SSO PMEs Incluído em Workspace
GitHub SSO developers Free até 50 users
Okta SSO empresarial $2-5/user/mês
OTP Utilizadores externos (sem IdP) Free

💡 Para PME com M365, Entra ID é o caminho natural. Para utilizadores externos (clientes, fornecedores), OTP é o mais simples.

6. Cloudflare WARP — Cliente Remoto

O WARP é o cliente (Windows, macOS, Linux, iOS, Android) que liga dispositivos à rede Cloudflare. Substitui o cliente VPN tradicional com 3 modos:

Modo O que faz Custo
WARP (1.1.1.1) Encaminha DNS/HTTP via Cloudflare Free
WARP+ (Teams) Encaminha todo o tráfego IP via edge €5/user/mês
Zero Trust client Split tunneling: só tráfego de empresa via WARP €5/user/mês

Instalação Manual (1 dispositivo)

# Ubuntu 24.04
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | \
  sudo tee /usr/share/keyrings/cloudflare-main.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] \
  https://pkg.cloudflare.com/cloudflared noble main" | \
  sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install -y cloudflare-warp

# Windows: winget install --id Cloudflare.Warp
# macOS: App Store → "Cloudflare One Agent"

# Ativar e autenticar
warp-cli registration new   # abre browser para autenticar
warp-cli connect
warp-cli status             # deve mostrar "Connected"

Verificar: aceder a https://www.cloudflare.com/cdn-cgi/trace e procurar warp=on.

Setup via MDM (Intune) — 50+ dispositivos

  1. Intune admin center → Devices → Configuration → Create profile → Windows 10+ → Settings catalog
  2. Pesquisar “Cloudflare” → selecionar Cloudflare WARP settings: Organization = <team-id>, Mode = WARP with Zero Trust
  3. Atribuir a grupo “All Windows Devices” → Force Sync

Para PME 50 cols, deployment completo demora 1-2 dias (Intune policy + device sync + WARP install).

Split Tunneling Inteligente

O Zero Trust client usa routing domains para decidir que tráfego passa por Cloudflare vs directo à internet. Por defeito, tráfego privado (10.0.0.0/8, 192.168.0.0/16) passa por WARP; tráfego público passa directo.

Domínio / IP Tráfego Razão
*.empresa.pt Via WARP Apps self-hosted via Tunnel
10.0.0.0/8 Via WARP LAN corporativa
M365 / Google IPs Directo Latência baixa, já encriptado
Resto (0.0.0.0/0) Directo Internet geral

💡 O split tunneling reduz latência para SaaS enquanto mantém segurança para apps corporativas. É a configuração mais equilibrada para PME 25 cols.

7. Cloudflare Gateway — DNS Filtering

O Gateway adiciona 3 camadas de segurança ao tráfego WARP: DNS filtering (bloqueia domínios maliciosos), HTTP inspection (inspeção de tráfego web com TLS decryption opcional), e RBI (browser isolation para sites não-confiantes).

Categoria Risco Recomendação PME
Malware Crítico Block
Phishing Crítico Block
Cryptojacking Alto Block
Command & Control Crítico Block
Newly Seen Domains Médio Block ou Warn
Social Media Baixo Allow (com time limits 9-18h)
Streaming/Gaming Baixo Allow ou Block

💡 A configuração mínima segura é Block Malware + Phishing + Cryptojacking + C2 (4 categorias) — sem afectar produtividade.

HTTP Policies (com TLS decryption via root certificate instalado por MDM) permitem: bloquear upload de .exe para sites não-autorizados, bloquear Google Drive pessoal (vs Workspace empresarial), warn em sites com rating C/D. RBI executa o browser num servidor Cloudflare remoto e envia apenas o rendering visual — se o site for malicioso, o malware executa no servidor, não no dispositivo.

8. Tunnel com Docker

Em ambientes container-first, correr cloudflared em container é mais limpo que systemd.

# docker-compose.yml — cloudflared standalone
services:
  cloudflared:
    image: linuxserver/cloudflared:latest
    container_name: cloudflared
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Lisbon
    volumes:
      - ./config:/config  # config.yml + creds file

Para expor containers Docker locais (ex: Grafana), partilhar a rede com network_mode: "service:grafana" — o cloudflared passa a “ver” Grafana em localhost:3000.

# docker-compose.yml — cloudflared + Grafana
services:
  cloudflared:
    image: linuxserver/cloudflared:latest
    restart: unless-stopped
    network_mode: "service:grafana"
    depends_on: [grafana]
    volumes: [./config:/config]

  grafana:
    image: grafana/grafana:latest
    restart: unless-stopped
    volumes: [grafana_data:/var/lib/grafana]

volumes:
  grafana_data:

⚠️ Remover ports: 3000:3000 se quiser zero exposição pública (só via Tunnel).

Quick Tunnel via Docker (demo 24h)

# URL aleatória *.trycloudflare.com (expira em 24h)
docker run --rm -it --network host linuxserver/cloudflared:latest \
  tunnel --url http://host.docker.internal:3000

⚠️ O URL expira em 24h e é gerado aleatoriamente. Para produção, usar named tunnel com domínio próprio + CNAME fixo.

9. Troubleshooting — 8 Problemas Comuns

# Problema Causa Solução
1 “1033 Tunnel Down” cloudflared parou ou perdeu ligação systemctl restart cloudflared + ver logs journalctl -u cloudflared -n 50
2 502 Bad Gateway Serviço local não está a correr curl http://localhost:PORT do host; verificar service: no config.yml
3 DNS não resolve CNAME não criado / propagação DNS dig grafana.empresa.pt deve mostrar CNAME cfargotunnel.com; aguardar 5 min
4 “Unauthorized” em Access IdP mal configurado / MFA falhou Dashboard → Access → Logs → ver causa exacta
5 WARP “Unable to authenticate” Token expirado / device não enrolled warp-cli registration new ou MDM re-sync
6 Tunnel down após reboot systemctl enable não feito sudo systemctl enable cloudflared + verificar is-enabled
7 Múltiplos tunnels com mesmo UUID Copiou creds file de outro host Cada host deve ter credentials file único
8 Gateway DNS lento Categoria muito abrangente (10k+ domínios) Reduzir scope; usar Block by Domain específico

Comandos de Diagnóstico

# Status do cloudflared
sudo systemctl status cloudflared
cloudflared --version

# Ver logs em tempo real
sudo journalctl -u cloudflared -f -n 100
sudo tail -f /var/log/cloudflared.log

# Validar config.yml
cloudflared tunnel --config /etc/cloudflared/config.yml ingress validate

# Listar tunnels
cloudflared tunnel list
cloudflared tunnel info <NOME_OU_ID>

# Testar DNS e conectividade
dig grafana.empresa.pt
curl -I http://localhost:3000

# Debug verbose
cloudflared tunnel --loglevel debug

Outras Causas Comuns

  • TLS mismatch em apps self-hosted: Se a app exige HTTPS upstream com cert self-signed, usar originRequest: noTLSVerify: true no config.yml.
  • Gateway demasiado restritivo: Bloquear “Technology” ou “Computers/Internet” quebra apps legítimas. Começar com Malware + Phishing + C2 e adicionar Warn para outras.
  • Tunnel “1033” frequente: Verificar firewall local (porta outbound 7844 QUIC / 443 HTTPS), NAT timeouts, dual-stack IPv4/IPv6. Forçar IPv4 com --originOnly.
  • Access “Too many redirects”: Loop entre Access e IdP. Causa: redirect URI mal configurado na App Registration Entra. Copiar exactamente o callback URL do dashboard (case-sensitive).

10. Free Tier e Custos PME

Característica Free Standard (€5/u/mês) Enterprise
Utilizadores ZT 50 Ilimitado Ilimitado
Tunnels 10 100 Ilimitado
DNS queries/mês 1M 100M Ilimitado
HTTP requests/mês 100k 10M Ilimitado
Audit logs 30 dias 180 dias 2 anos
RBI / CASB / DLP Não Sim Sim
SLA Best effort 99.9% 99.99%
Suporte Community Email (24h) 24/7 phone
Solução Preço (25 users) Free tier
Cloudflare Zero Trust €0 / €125/mês (Standard) 50 users, 100k req
Zscaler ZPA + ZIA ~€375/mês (15€/u) Não
Netskope ~€300/mês (12€/u) Não
Entra Private Access ~€125/mês (5€/u, E5) Não
OpenZiti / Headscale €0 (self-host) Ilimitado

Custo anual PME 25 cols (Standard): €1.512/ano (€126/mês) com domínio + servidor on-premises. vs €4.500/ano Zscaler ou €6.000/ano VPN legacy. ROI típico: 3-6 meses vs VPN legacy.

⚠️ O limite de 100k HTTP requests/mês no free tier é partilhado por tunnel — apps de monitorização com polling frequente (Zabbix) podem esgotar em 1-2 semanas. Para PME com Zabbix + Grafana, Standard é praticamente obrigatório.

11. FAQ para Sysadmins

Posso usar Tunnel sem domínio próprio?
Sim, via quick tunnel (*.trycloudflare.com, 24h, aleatório). Para produção, domínio próprio (~€10/ano) é obrigatório.

Tunnel substitui VPN site-to-site?
Sim, para a maioria dos casos. A excepção é protocolos muito específicos (Kerberos, SMB v1, multicast) que não passam por tunnel — para esses, manter VPN IPsec.

WARP é obrigatório?
Não. Pode usar Tunnel + Access sem WARP (acesso via browser). WARP é necessário quando quer DNS filtering global, tráfego interno via Cloudflare, ou RBI.

Funciona com Microsoft 365 / Entra ID?
Sim, e é o caminho recomendado para PME com M365. Access integra com Entra ID via OAuth/OIDC. Criar App Registration no Azure (10 min) e copiar Client ID + Secret para Cloudflare.

Migrar de VPN IPsec sem downtime?
Sim, em 4 fases: (1) Piloto com 1-2 utilizadores; (2) Access policies para 3-5 apps, VPN como backup; (3) Roll-out WARP via MDM para 100%; (4) Sunset VPN (manter como backup 1 mês antes de remover).

Funciona com Kubernetes?
Sim, via Cloudflare Tunnel Ingress Controller (helm chart). Cria automaticamente tunnel + DNS + ingress para cada recurso Ingress K8s.

E se a Cloudflare tiver um outage?
Tunnel e WARP ficam down. Para sectores críticos, ter fallback: DNS secundário (Google 8.8.8.8 / Quad9 9.9.9.9), VPN legacy como backup, ou Cloudflare Spectrum (SLA 100%).

Funciona com Microsoft Defender for Endpoint?
Sim, complementam-se: Cloudflare ZT protege a fronteira (apps, DNS, web); MDE protege o endpoint (EDR, antimalware). Defense in depth — ZT na cloud, MDE no device.

12. Boas-Práticas de Operação

  1. Versionar config.yml em Git (repo privado, credentials file encriptado). Mudanças → PR → review → apply via CI/CD.
  2. Monitorizar tunnel uptime com UptimeRobot, Healthchecks.io, ou Zabbix (HTTP HEAD a cada 5 min por hostname). Alertar se down > 2 min.
  3. Tagging de tunnels (env=prod, owner=ti, cost-center=42) para billing reports e inventory.
  4. Renovação de tokens — Access tokens expiram (default 1 ano). Calendário para renovar 30 dias antes. Automatizar via Terraform/API.
  5. Testar updates em staging — Manter tunnel de staging separado do prod para testar major versions antes de promover.
  6. Documentar topologia — Diagrama com todos os tunnels, hostnames, serviços e policies. Evidência obrigatória para NIS2/ISO 27001.
  7. Audit logs exportados — Configurar Logpush desde o dia 1 (S3 ou Azure Blob) para 180d + 7 anos de arquivo frio. Custo: €1-3/mês.
  8. WARP auto-update — Ativar via MDM. Cloudflare lança security patches mensalmente.

ℹ️ Cloudflare Zero Trust em 2026 é a plataforma de ZT mais completa do mercado — free tier generoso, Standard com RBI/CASB/DLP incluídos, integra com M365/Okta/Google sem fricção. Para PMEs 25-100 cols, é a alternativa mais custo-efectiva a Zscaler (€15/user/mês) e VPN legacy (€3-6K/ano). Com NIS2 em vigor, migrar para Cloudflare ZT é um dos quick wins mais valiosos do roadmap — ver NIS2: Implementação 90 Dias.

Artigos Relacionados

← Voltar ao Índice