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) |


Architettura Zero Trust con Cloudflare 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

  1. Vai su Zero Trust Dashboardone.dash.cloudflare.com
  2. Access → Applications → Add an application
  3. Scegli Self-hosted
  4. Configura:
    • Application domain: app.tuodominio.com
    • Session duration: 8 hours
  5. 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

  1. Entra ID → App Registrations → New registration

    • Nome: Cloudflare Zero Trust
    • Redirect URI: https://tuodominio.cloudflareaccess.com/cdn-cgi/access/callback
  2. Copia: Application (client) ID, Tenant ID

  3. Certificates & Secrets → New client secret

  4. 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

Risorse utili