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)
- 2. Cenários de Aplicação
- 3. Os 7 Componentes do Zero Trust
- 4. Tunnel Avançado — Ingress Rules
- 5. Cloudflare Access — Políticas Zero Trust
- 6. Cloudflare WARP — Cliente Remoto
- 7. Cloudflare Gateway — DNS Filtering
- 8. Tunnel com Docker
- 9. Troubleshooting — 8 Problemas Comuns
- 10. Free Tier e Custos PME
- 11. FAQ para Sysadmins
- 12. Boas-Práticas de Operação
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.compara 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.pt → a1b2c3d4.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)
- Dashboard → Access → Applications → Add Application → Self-hosted
- Name: Grafana Produção | Session Duration: 24h (1h para apps sensíveis) | Application domain:
grafana.empresa.pt - Identity Provider: Settings → Authentication → Add new → Entra ID (copiar Tenant ID + Client ID + Client Secret da App Registration no Azure)
- 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
- Intune admin center → Devices → Configuration → Create profile → Windows 10+ → Settings catalog
- Pesquisar “Cloudflare” → selecionar Cloudflare WARP settings: Organization =
<team-id>, Mode =WARP with Zero Trust - 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: trueno 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
- Versionar config.yml em Git (repo privado, credentials file encriptado). Mudanças → PR → review → apply via CI/CD.
- Monitorizar tunnel uptime com UptimeRobot, Healthchecks.io, ou Zabbix (HTTP HEAD a cada 5 min por hostname). Alertar se down > 2 min.
- Tagging de tunnels (env=prod, owner=ti, cost-center=42) para billing reports e inventory.
- Renovação de tokens — Access tokens expiram (default 1 ano). Calendário para renovar 30 dias antes. Automatizar via Terraform/API.
- Testar updates em staging — Manter tunnel de staging separado do prod para testar major versions antes de promover.
- Documentar topologia — Diagrama com todos os tunnels, hostnames, serviços e policies. Evidência obrigatória para NIS2/ISO 27001.
- 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.
- 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
- Cloudflare Tunnel: Expor Serviços da Rede Local para a Internet
- Zero Trust para PMEs 2026: Guia Sysadmin
- NIS2: Implementação 90 Dias — Guia Sysadmin
- Ollama + Open WebUI: Stack Avançado 2026
- Microsoft Entra MFA: Multi-Factor Authentication 2026
- VPN Serverless Self-Hosted para PME 2026
- MEO CGNAT: Verificar e Contornar 2026
- Microsoft Defender for Endpoint: Implementação PME 2026
- Phishing Moderno: Detetar e Prevenir 2026
- Grafana PME 2026: Dashboards Prometheus