Zero Trust con Cloudflare: architettura e implementazione pratica
2026-05-16T10:42:29.941Z
Cos'è il modello Zero Trust
Il modello Zero Trust si basa su un principio semplice: non fidarsi mai, verificare sempre. A differenza del modello perimetrale tradizionale (firewall → dentro sei al sicuro), Zero Trust tratta ogni richiesta come potenzialmente ostile, indipendentemente da dove proviene.
"Never trust, always verify" — John Kindervag, creatore del framework Zero Trust
Perché è necessario oggi
- Il perimetro di rete non esiste più: utenti in smart working, cloud ibrido, BYOD
- Le VPN tradizionali aprono accesso troppo ampio alla rete interna
- Il movimento laterale degli attaccanti è il vettore più pericoloso post-breach
Architettura con Cloudflare
┌─────────────────────────────────────────────────────────┐
│ INTERNET │
└────────────────────────┬────────────────────────────────┘
│
┌──────────▼──────────┐
│ Cloudflare Edge │
│ (Access + Tunnel) │
└──────────┬──────────┘
│ Autenticazione + Policy
┌────▼────┐
│ IdP │ (Entra ID / Google)
└────┬────┘
│ Token validato
┌──────────▼──────────┐
│ Cloudflare Tunnel │
│ (cloudflared) │
└──────────┬──────────┘
│ Connessione outbound
┌──────────▼──────────┐
│ Server interno │
│ 192.168.x.x │
└─────────────────────┘
Componenti chiave
| Componente | Funzione | |-----------|----------| | Cloudflare Access | Autenticazione e autorizzazione utenti | | Cloudflare Tunnel | Connessione sicura outbound (no port forwarding) | | Identity Provider | Entra ID, Google, Okta, GitHub | | Device Posture | Verifica stato del dispositivo (antivirus, OS aggiornato) |
Schema architetturale: il flusso di autenticazione Zero Trust con Cloudflare Access e Tunnel. Ogni richiesta viene verificata prima di raggiungere il server interno.
Prerequisiti
- Account Cloudflare con piano Zero Trust (gratuito fino a 50 utenti)
- Dominio gestito su Cloudflare
- Accesso root al server da esporre
- Identity Provider configurato (es. Microsoft Entra ID)
Step 1: Installare cloudflared sul server
# Debian/Ubuntu
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
# Verifica installazione
cloudflared --version
Step 2: Autenticare cloudflared
cloudflared tunnel login
# Si apre il browser → seleziona il tuo dominio Cloudflare
Step 3: Creare il tunnel
# Crea un nuovo tunnel
cloudflared tunnel create nome-tunnel
# Output: tunnel ID (es. 7da3d5c3-1234-5678-abcd-ef0123456789)
Step 4: Configurare il tunnel
Crea /etc/cloudflared/config.yml:
tunnel: 7da3d5c3-1234-5678-abcd-ef0123456789
credentials-file: /root/.cloudflared/7da3d5c3-1234-5678-abcd-ef0123456789.json
ingress:
# Applicazione web interna
- hostname: app.tuodominio.com
service: http://localhost:8080
# SSH sicuro
- hostname: ssh.tuodominio.com
service: ssh://localhost:22
# Catch-all (obbligatorio)
- service: http_status:404
Step 5: Configurare Cloudflare Access
- Vai su Zero Trust Dashboard →
one.dash.cloudflare.com - Access → Applications → Add an application
- Scegli Self-hosted
- Configura:
- Application domain:
app.tuodominio.com - Session duration: 8 hours
- Application domain:
- Add a policy:
- Action: Allow
- Include: Email ends with
@tuazienda.com
Step 6: Avviare il tunnel come servizio
# Installa come servizio systemd
sudo cloudflared service install
# Avvia e abilita
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
# Verifica
sudo systemctl status cloudflared
cloudflared tunnel info nome-tunnel
Configurazione Device Posture (avanzato)
Con il piano Teams puoi verificare lo stato del dispositivo prima di concedere accesso:
# Policy con device posture check
- name: "Corporate Devices Only"
include:
- email_domain: tuazienda.com
require:
- device_posture:
- check_type: os_version
input:
version: ">=10.0.19041" # Windows 10 2004+
- check_type: domain_joined
input:
domain: tuazienda.local
Integrazione con Microsoft Entra ID
-
Entra ID → App Registrations → New registration
- Nome:
Cloudflare Zero Trust - Redirect URI:
https://tuodominio.cloudflareaccess.com/cdn-cgi/access/callback
- Nome:
-
Copia: Application (client) ID, Tenant ID
-
Certificates & Secrets → New client secret
-
In Cloudflare Zero Trust → Settings → Authentication:
- Add provider: Azure AD
- Inserisci App ID, Tenant ID, Client Secret
Monitoring e Log
# Log del tunnel in tempo reale
sudo journalctl -u cloudflared -f
# Statistiche tunnel
cloudflared tunnel info nome-tunnel
# Metriche (espone endpoint Prometheus)
curl http://localhost:2000/metrics
Nel dashboard Cloudflare: Zero Trust → Logs → Access per vedere tutte le autenticazioni.
Best Practice
- ✅ Un tunnel per applicazione — isolamento migliore
- ✅ MFA obbligatoria — configurala nell'IdP
- ✅ Session duration breve — 8h max, 1h per applicazioni critiche
- ✅ Audit log abilitati — conserva almeno 30 giorni
- ✅ Device posture check — verifica OS aggiornato e antivirus
- ❌ Non esporre SSH direttamente — usa
cloudflared access ssh - ❌ Non usare tunnel per database — usa VPN dedicata per DB