Guida Sicura per Esporre Servizi Locali con Cloudflare Tunnel in ServBay
Cloudflare Tunnel (precedentemente Argo Tunnel) è un servizio di rete Zero Trust fornito da Cloudflare che ti permette di esporre in modo sicuro servizi web, SSH o altre applicazioni in esecuzione localmente su Internet, senza dover aprire porte pubbliche o configurare regole firewall complesse. In questa guida ti mostreremo nel dettaglio come, usando l’ambiente di sviluppo locale avanzato ServBay e lo strumento client cloudflared
, puoi creare tunnel sicuri per rendere accessibili i tuoi servizi ServBay su Internet.
Vantaggi principali:
- Sicurezza potenziata: Sfrutta la rete globale Cloudflare per protezione DDoS, firewall applicativo (WAF) e altre funzionalità di sicurezza.
- Configurazione di rete semplificata: Nessuna necessità di gestire port forwarding, NAT o regole firewall.
- Modello Zero Trust: Le connessioni sono in uscita, riducendo la superficie d’attacco.
- Integrazione con servizi Cloudflare: Approfitta di caching, ottimizzazione e analisi offerte da Cloudflare.
Panoramica
ServBay offre agli sviluppatori un ambiente di sviluppo locale integrato e gestibile, compatibile con diversi linguaggi (PHP, Node.js, Python, Go, Java, Ruby, Rust...), database (MySQL, PostgreSQL, MongoDB, Redis ecc.) e web server (Caddy, Nginx, Apache). Di solito, i siti o le app sviluppate in ServBay sono accessibili solo localmente. Integrando Cloudflare Tunnel puoi condividere facilmente lo stato di avanzamento con il team o esporre servizi locali temporaneamente o stabilmente a utenti esterni, beneficiando della sicurezza e delle performance Cloudflare.
Principi Tecnici
Il principio base di Cloudflare Tunnel prevede l’esecuzione del client cloudflared
sulla tua rete locale (ovvero la macchina dove gira ServBay), il quale stabilisce una o più connessioni criptate basate su protocollo QUIC verso il nodo Cloudflare edge più vicino. Queste connessioni sono in uscita, eliminando la necessità di regole di ingresso su router o firewall. Quando gli utenti accedono al servizio tramite il dominio associato al tunnel, il traffico raggiunge Cloudflare edge, viene inoltrato tramite il tunnel sicuro a cloudflared
e da qui ai servizi locali su ServBay (ad esempio, siti attivi su https://servbay.local
o http://localhost:8000
). Le risposte fanno il percorso inverso fino al client.
Prerequisiti
Prima di procedere alla configurazione, assicurati di avere:
- ServBay installato e funzionante: L’ambiente ServBay deve essere operativo, con il sito/servizio locale che vuoi esporre avviato (ad esempio il dominio locale
servbay.local
di default deve essere accessibile). - Un account Cloudflare: Devi avere un account su Cloudflare.
- Un dominio gestito su Cloudflare: Devi possedere un dominio già aggiunto al tuo account Cloudflare, con DNS gestito direttamente da Cloudflare.
- Client
cloudflared
installato: Il toolcloudflared
deve essere installato sulla macchina macOS dove gira ServBay.
1. Installare il client cloudflared
Su macOS si raccomanda l’installazione tramite Homebrew. Se non hai Homebrew, fai riferimento alla documentazione ufficiale per installarlo.
Installazione con Homebrew (consigliata):
brew update
brew install cloudflared
2
Installazione manuale (per architettura ARM macOS):
# Scarica il binario per macOS ARM (Apple Silicon)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-arm64.tgz | tar xz
# Sposta il binario nella directory PATH
sudo mv cloudflared /usr/local/bin/
2
3
4
Verifica l’installazione: Dopo l’installazione, verifica che cloudflared
sia correttamente installato e mostra la versione con il comando:
cloudflared --version
# Esempio di output: cloudflared version 2024.5.0 (built 2024-05-01)
2
Il numero di versione può variare, l’importante è che sia mostrata un’informazione di versione.
2. Accedere al proprio account Cloudflare
Autorizza cloudflared
eseguendo nel terminale:
cloudflared tunnel login
Al comando, cloudflared
aprirà il browser su una pagina di login Cloudflare. Seleziona l’account associato al tuo dominio e autorizza l’accesso di cloudflared
. In caso di successo, visualizzerai un messaggio di conferma nel browser, e nel terminale riceverai una notifica che è stato generato il file cert.pem
nella cartella di configurazione (~/.cloudflared/
).
Configurazione del Tunnel: Passi Pratici
Procediamo ora con la creazione di un nuovo tunnel e la configurazione dell’instradamento verso il servizio locale ServBay.
Processo di configurazione
Crea il tunnel
Nel terminale esegui per creare un tunnel nuovo, assegnando un nome intuitivo come
servbay-demo-tunnel
.bashcloudflared tunnel create servbay-demo-tunnel
1Una volta creato, otterrai subito l’ID del tunnel (UUID) e il percorso del file delle credenziali. Prendi nota dell’ID, ad esempio
a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d
. Il comando genera anche un file JSON delle credenziali (ad esempioa7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json
) nella cartella~/.cloudflared/
. Conserva con cura questo file.Configura i record DNS
Per permettere a Cloudflare di indirizzare il traffico di un dominio verso il tunnel, crea un record CNAME su Cloudflare DNS. Puoi farlo comodamente con:
bashcloudflared tunnel route dns servbay-demo-tunnel servbay-demo.yourdomain.com
1Sostituisci
servbay-demo-tunnel
col nome del tunnel eservbay-demo.yourdomain.com
col sottodominio tramite cui vuoi accedere al servizio (il dominio deve essere gestito su Cloudflare).Il comando aggiungerà su Cloudflare DNS un record CNAME per
servbay-demo.yourdomain.com
che punterà a<TunnelID>.cfargotunnel.com
.Crea il file di configurazione
cloudflared
utilizza un file YAML per configurare il comportamento del tunnel, indicando quali servizi locali esporre su quali domini. Il percorso predefinito è~/.cloudflared/config.yml
. Crealo se non esiste.Modifica
~/.cloudflared/config.yml
come nell’esempio:yaml# tunnel: UUID del tunnel, sostituisci col tuo tunnel: a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d # credentials-file: percorso del file di credenziali, tipicamente in ~/.cloudflared/ credentials-file: /Users/tuoutente/.cloudflared/a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json # Sostituisci con il tuo percorso ingress: # Regole di instradamento del tunnel - hostname: servbay-demo.yourdomain.com # Dominio esterno, deve coincidere con il DNS service: https://servbay.local # Indirizzo del servizio locale ServBay. ServBay offre SSL su servbay.local di default. originRequest: # noTLSVerify: true # Attiva se usi certificati self-signed (ad esempio quelli generati dalla User CA di ServBay), per aggirare la verifica TLS # Se usi certificati validi (es. Let's Encrypt tramite ACME ServBay), non serve attivare questa opzione. # In sviluppo locale, spesso si usa User CA ServBay con noTLSVerify: true. - service: http_status:404 # Regola fallback: 404 su hostname non previsti
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Attenzione:
- Sostituisci i valori di
tunnel
ecredentials-file
con UUID e percorso tuo. - Personalizza
hostname
con il sottodominio usato passo 2. service: https://servbay.local
punta al sito HTTPS di ServBay. Se il servizio gira su altro porto/indirizzo (es. Node.js suhttp://localhost:3000
), modifica di conseguenza.originRequest.noTLSVerify: true
disattiva la verifica SSL locali quando usi certificati self-signed (come quelli User CA ServBay): necessario, altrimenticloudflared
non si collegherà. Se usi invece certificati validi (Let's Encrypt/ACME), può essere omesso.
- Sostituisci i valori di
Avvio del servizio Tunnel
Con la configurazione pronta, puoi avviare il tunnel da terminale:
cloudflared tunnel run servbay-demo-tunnel
Sostituisci servbay-demo-tunnel
col tuo nome del tunnel.
cloudflared
si collegherà alla rete Cloudflare e aprirà il tunnel. Vedrai lo stato e i log nel terminale. Finché il comando gira in foreground il tunnel resta attivo. Se desideri farlo girare in background come servizio di sistema (ad esempio con launchctl
su macOS), consulta la documentazione specifica del tuo sistema operativo.
Verifica del servizio
Una volta avviato il tunnel, puoi accedere dall’esterno al servizio locale di ServBay tramite il dominio configurato.
Vai al dominio configurato: Visita con il browser il dominio scelto, ad esempio
https://servbay-demo.yourdomain.com
.Cosa controllare:
- Il sito dovrà caricarsi correttamente, coerente con il contenuto che vedi su
https://servbay.local
. - In barra degli indirizzi vedrai un certificato SSL valido: sarà rilasciato da Cloudflare (non dal certificato locale ServBay, che resta solo tra Cloudflare e ServBay).
- Usando i dev-tools del browser, tra gli header HTTP dovresti trovare voci come
CF-RAY
, prova che il traffico passa per la rete Cloudflare.
- Il sito dovrà caricarsi correttamente, coerente con il contenuto che vedi su
Consigli e configurazioni avanzate
Routing per più servizi
Nel blocco ingress
puoi definire più regole, indirizzando il traffico a servizi differenti di ServBay in base all’hostname (ad esempio, siti diversi o API).
ingress:
- hostname: api.yourdomain.com
service: http://localhost:8080 # Esempio: API su porta 8080 locale
- hostname: app.yourdomain.com
service: https://servbay.local # Sito principale
- service: http_status:404
2
3
4
5
6
Monitoraggio traffico e log
cloudflared
offre diversi comandi per monitorare e fare troubleshooting:
- Statistiche in tempo reale:bash
cloudflared tunnel info servbay-demo-tunnel
1 - Log dettagliati:
cloudflared tunnel run
stampa i log in console. Puoi anche impostare il livello log o redirigere output su file.
Integrazione con Cloudflare Access
Per maggiore sicurezza puoi richiedere autenticazione e autorizzazione agli utenti che accedono ai servizi tramite tunnel, tramite Cloudflare Access. Questo fa parte della piattaforma Zero Trust ed è più flessibile e granulare di una tradizionale VPN. La configurazione si gestisce dal pannello Cloudflare.
Troubleshooting
In caso di problemi, consulta queste soluzioni per scenari comuni:
Problema | Soluzione |
---|---|
Errore 502 Bad Gateway su dominio | Verifica che ServBay sia attivo e il servizio locale accessibile (es. test su https://servbay.local ).Controlla indirizzo e porta service in config.yml .Se il servizio usa HTTPS con certificato self-signed e manca noTLSVerify: true , abilitalo. |
Errore DNS: dominio inaccessibile | Verifica che il record CNAME su Cloudflare punti a <TunnelID>.cfargotunnel.com . Usa dig o nslookup per testare la risoluzione DNS. |
Errore certificato su dominio | Se il certificato Cloudflare non è valido, controlla che hostname in config.yml coincida col dominio richiesto.Se l’errore riguarda TLS tra cloudflared e servizio locale, verifica la correttezza dell’indirizzo/porta e abilita, se necessario, originRequest.noTLSVerify: true . |
Errore comando cloudflared tunnel run | Controlla che ~/.cloudflared/config.yml sia presente e in valido formato YAML.Verifica correttezza di tunnel e credentials-file (UUID e percorso).Assicurati che cloudflared abbia i permessi necessari sui file di credenziali e configurazione. |
Connessione lenta o instabile | Verifica stabilità della rete locale. Cloudflare Tunnel usa QUIC: controlla che la tua rete supporti QUIC. Valuta settings regionali su Cloudflare o contatta il supporto Cloudflare. |
Riepilogo dei Vantaggi
Integrando Cloudflare Tunnel in ServBay, gli sviluppatori possono:
- Condividere in sicurezza i risultati locali: Mostra facilmente prototipi o lavori in corso a clienti o colleghi.
- Effettuare test di callback esterni: Testa webhook o callback che richiedono accesso pubblico.
- Sfruttare protezione di livello enterprise: Ottieni mitigazione DDoS, WAF e altre difese offerte da Cloudflare contro minacce e attacchi.
- Semplificare la rete: Elimina la complessità di port forwarding e configurazioni firewall.
- Prestazioni e affidabilità ottimizzate: Il traffico passa dalla rete Anycast globale Cloudflare, riducendo latenza e inattività.
L’ambiente integrato e flessibile di ServBay, unito alla sicurezza di Cloudflare Tunnel, assicura agli sviluppatori un flusso di lavoro moderno, efficiente e privo di rischi.
Conclusione
In questa guida hai scoperto come installare e configurare cloudflared
in ServBay, creando e gestendo Cloudflare Tunnel per esporre in sicurezza servizi web locali su Internet. Seguendo questi passaggi, abbini i vantaggi del multi-stack ServBay alle soluzioni Zero Trust avanzate di Cloudflare, migliorando radicalmente collaborazione e sicurezza nello sviluppo. Ricorda: Cloudflare Tunnel fa parte della piattaforma Cloudflare Zero Trust. Ti suggeriamo di esplorare anche funzioni come Cloudflare Access per controlli di accesso ancora più avanzati.