Cloudflare Tunnel (cloudflared): setup di un tunnel sicuro

Cloudflare Tunnel (cloudflared): setup di un tunnel sicuro

Cloudflare Tunnel (precedentemente Argo Tunnel) è un servizio che permette di esporre server interni su Internet senza aprire porte sul firewall né configurare IP pubblici. Il client cloudflared, installato sul server di origine, stabilisce una connessione outbound persistente verso i POP Cloudflare: tutto il traffico in ingresso al dominio passa attraverso questo tunnel. È una soluzione gratuita ed elegante per esporre servizi self-hosted, ambienti di sviluppo, dashboard interne.

Vantaggi rispetto al port forwarding

Il modello classico richiede di aprire porte sul router/firewall, esponendo l'IP server pubblicamente. Questo apre attacchi DDoS, scansioni, brute-force. Cloudflare Tunnel inverte il flusso: il server inizia una connessione verso Cloudflare e mantiene un tunnel persistente. Nessuna porta aperta dall'esterno, nessun'IP esposto, traffico cifrato end-to-end, autenticazione opzionale via Cloudflare Access. È sicuro by design.

Procedura passo-passo

  1. Installa cloudflared sul server: per Linux wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 oppure pacchetto deb/rpm.
  2. Autentica: cloudflared tunnel login, completa nel browser scegliendo il dominio.
  3. Crea un tunnel: cloudflared tunnel create miotunnel.
  4. Annota il tunnel ID restituito.
  5. Crea un file di config config.yml in ~/.cloudflared/ con: tunnel ID, credentials-file path, e regole ingress.
  6. Esempio ingress: hostname: app.tuosito.it, service: http://localhost:8080.
  7. Aggiungi catch-all finale service: http_status:404.
  8. Configura il routing DNS: cloudflared tunnel route dns miotunnel app.tuosito.it.
  9. Avvia il tunnel: cloudflared tunnel run miotunnel.
  10. Installalo come servizio systemd: cloudflared service install.

Configurazione ingress avanzata

Il file config.yml supporta routing multiplo: puoi indirizzare hostname diversi su servizi diversi sulla stessa macchina, o anche su macchine LAN diverse. Esempio con tre servizi: app.tuosito.it → localhost:3000, api.tuosito.it → localhost:8080, admin.tuosito.it → 192.168.1.100:443. Ogni hostname può specificare originRequest con timeout, TLS verify, host header override.

Integrazione con Cloudflare Access

Cloudflare Tunnel si combina perfettamente con Cloudflare Access per implementare Zero Trust. Puoi proteggere ogni hostname con un'application policy che richiede autenticazione (Google, GitHub, SAML, OTP via email). Senza credenziali valide il visitatore non raggiunge mai il servizio backend. È la soluzione ideale per esporre Grafana, Kibana, dashboard custom, pannelli admin.

Errori comuni e come risolverli

  • Tunnel non si avvia: 530 error: il routing DNS non è configurato. Esegui cloudflared tunnel route dns.
  • 504 Gateway Timeout: il servizio backend non risponde su localhost:port. Verifica con curl.
  • certificate verify failed: il backend usa self-signed. Aggiungi originRequest.noTLSVerify: true.
  • Tunnel disconnette periodicamente: problemi di connettività outbound. Verifica firewall non blocchi UDP/443 e TCP/7844.
  • Servizio systemd non parte: permessi sul credentials-file. Verifica ownership e chmod 600.

Performance e scalabilità

cloudflared può gestire migliaia di richieste/secondo per macchina. Per alta disponibilità installa cloudflared su multiple macchine usando lo stesso tunnel ID: Cloudflare distribuisce il traffico automaticamente in modalità round-robin con failover. Il binario è leggero (decine di MB di RAM in idle) e supporta Windows, macOS, Linux, FreeBSD, ARM.

Use case pratici

Esposizione di NAS Synology/QNAP senza port forward, accesso a Home Assistant da remoto, Plex/Jellyfin media server protetto da Access, Gitea/GitLab self-hosted, Nextcloud personale, API di sviluppo esposte temporaneamente, webhook receivers raggiungibili da SaaS esterni durante dev locale (alternativa a ngrok).

Domande frequenti

D: Cloudflare Tunnel è gratuito?
R: Sì sul piano Free, con limite di banda generoso (alcuni TB/mese).

D: Posso esporre porte non-HTTP?
R: Sì, con cloudflared esistono modalità RDP, SSH, SMB tramite Cloudflare Access dedicato.

D: cloudflared funziona dietro NAT/CGNAT?
R: Sì, perfettamente. Il tunnel è outbound quindi NAT trasparente.

D: Quanti tunnel posso creare?
R: Decine senza limiti pratici sul piano Free.

Considerazioni operative finali

Quando applichi una configurazione di questo tipo in produzione è sempre buona norma seguire un'approccio incrementale: parti con un test su staging, monitora gli effetti per qualche giorno, poi estendi gradualmente al traffico live. La rete Cloudflare elabora ogni cambiamento in pochi secondi a livello globale, quindi le modifiche sono effettive quasi immediatamente, ma gli effetti collaterali su utenti reali possono richiedere ore o giorni per emergere. Annota nel runbook interno data, motivo e parametri di ogni modifica significativa. Una documentazione precisa accelera enormemente il troubleshooting futuro e facilita il passaggio di consegne tra membri del team.

Vale anche la pena ricordare che Cloudflare aggiorna frequentemente l'interfaccia del dashboard e le posizioni delle voci di menu. La logica e le funzionalità descritte in questa guida restano valide, ma il percorso esatto per raggiungere ogni opzione può variare leggermente nel tempo. In caso di difficoltà a trovare una specifica voce, utilizza la barra di ricerca interna del dashboard oppure consulta la documentazione ufficiale aggiornata. La community Cloudflare sul forum ufficiale e su Stack Overflow è inoltre molto attiva e offre spesso risposte rapide a problemi specifici di configurazione.

Per progetti complessi che coinvolgono più servizi Cloudflare contemporaneamente (CDN, Workers, WAF, Access, R2) conviene strutturare la configurazione come codice tramite Terraform o Pulumi. Questo permette versioning, code review, rollback atomici e deploy ripetibili tra environment. Per team con esigenze più semplici la gestione manuale via dashboard resta perfettamente valida, soprattutto se accompagnata da una checklist scritta delle impostazioni applicate. La scelta dell'approccio dipende dalle dimensioni del progetto e dal grado di automazione desiderato. L'importante è essere consistenti e mantenere tracciabilità delle modifiche effettuate.

Hai bisogno di aiuto?

Se vuoi configurare Cloudflare per il tuo sito con il team di G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?