Cosa è un webserver?
Un webserver è un software- [Program/Software: the instructions that control what a computer does; computer programs] - e un hardware che utilizza il protocollo HTTP (Hypertext Transfer Protocol) o HTTPS e altri protocolli per rispondere alle richieste dei client effettuate tramite il World Wide Web. Il lavoro principale di un webserver è quello di visualizzare il contenuto del sito web memorizzando, elaborando e fornendo le pagine web agli utenti. Oltre a HTTP o HTTPS, i webserver supportano anche altri protocolli chiamati "webservices" accessibili tramite diverse porte; questi protocolli possono essere diversi dallo standard HTTP come FTP o SSH o altri.
L'hardware del webserver è connesso a Internet e consente lo scambio di dati con altri dispositivi connessi, mentre il software del webserver controlla come un utente accede ai file ospitati. Il processo del webserver è un esempio del modello client/server. Tutti i computer che ospitano siti web devono avere software per webserver.
I webserver sono utilizzati nell'hosting web, o nell'hosting di dati per siti web e applicazioni web -- o applicazioni web.

Perché usare Cloudflare e cos'è il software cloudflared?
Cloudflare è un'azienda americana che offre servizi come un DNS, una rete di distribuzione dei contenuti (CDN) e molti altri servizi aggiuntivi per rendere i siti web più veloci e sicuri. Per capire come funziona Cloudflare, è necessario considerare gli errori comuni che i siti web hanno fatto in passato. Quando si visita un sito web senza Cloudflare, il visitatore richiede contenuti da un server. Tuttavia, quando ci sono troppi visitatori sul server contemporaneamente, il server si sovraccarica, con conseguente sito web lento o non funzionante. Per il proprietario del sito web, questo non è qualcosa che vorrebbe vedere. Ecco perché Cloudflare ha inventato una soluzione per questo. Cloudflare ha posizionato il proprio server, sotto forma di una vasta rete mondiale, tra il sito web e il webserver. I visitatori del sito web non comunicano più direttamente con il server, ma con la rete Cloudflare, che ha già memorizzato il contenuto del sito web e lo carica tramite un server in base alla posizione del visitatore. Ad esempio: se hai un sito web ospitato in Germania e qualcuno dagli Stati Uniti tenta di connettersi al tuo sito web, la richiesta deve percorrere una lunga distanza (tra il sito web e il webserver). Cloudflare risolve questo offrendo una vasta rete di server in tutto il mondo. L'americano non deve più connettersi al server tedesco, ma si connetterà al server Cloudflare più vicino negli Stati Uniti. I Tunnel Cloudflare (o il software cloudflared) sono simili a una connessione VPN in quanto è un modo sicuro per accedere alle risorse sulla tua rete privata interna dal mondo esterno. La differenza tra i Tunnel Cloudflare e la tua VPN tradizionale è che non devi aprire porte nel firewall. Con VPN, ti connetti al tuo server VPN (o direttamente al tuo router) attraverso un foro che hai creato nel firewall. Con i Tunnel Cloudflare, installi un client all'interno della tua rete che mantiene una connessione sicura verso Cloudflare. Quindi crei diversi nomi di dominio completi (FQDN, ovvero nomi di dominio, o record CNAME) che associano i tuoi servizi interni.
Come usare Cloudflared per ospitare un'applicazione o un intero webserver
Con Cloudflare puoi usare un piccolo software chiamato "cloudflared" che crea un tunnel dal tuo hardware al cloudflare origin e collega quel tunnel alla porta 80 o 443 del tuo software webserver; in questo modo puoi anche non aprire queste porte a Internet e lasciare che il firewall le blocchi. Questo aumenta anche la sicurezza e ti permette di non esporre il tuo indirizzo IP esterno. Per effettuare questo tipo di connessione hai bisogno di un account- [Account: an Account contains the personal information that is assigned to those who register and access with email and password] - Cloudflare e un dominio di primo livello acquistato o collegato al tuo account. A questo punto per aprire il tuo primo tunnel dovrai accedere al "Zero Trust" console tramite il pannello di controllo Cloudflare.
Scarica l'applicazione cloudflared che può essere scaricata per ogni sistema operativo qui: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
Avvia il tunnel sicuro
Una volta scaricato cloudflared, puoi creare il primo tunnel semplicemente tramite terminale o tramite webui.
TERMINALE
Digita questo comando per autenticarti:
$ cloudflared tunnel login
Crea un tunnel e dagli un nome:
$ cloudflared tunnel create <NOME
Dall'output del comando, prendi nota dell'UUID del tunnel e del percorso del file delle credenziali del tuo tunnel.
Verifica che il tunnel sia stato creato correttamente eseguendo:
$ cloudflared tunnel list
Leggi la documentazione ufficiale per creare un tunnel tramite terminale: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/local/
WEBUI
- Accedi a Zero Trust e vai a Accesso > Tunnel.
- Seleziona Crea un tunnel.
- Inserisci un nome per il tuo tunnel. Suggeriamo di scegliere un nome che rifletta il tipo di risorse a cui vuoi connettere tramite questo tunnel (ad esempio,
enterprise-VPC-01) - Seleziona Salva tunnel.
- Successivamente, dovrai installare
cloudflarede avviarlo. Per farlo, verifica che l'ambiente sotto Scegli un ambiente rifletta il sistema operativo sul tuo computer, quindi copia il comando nella casella qui sotto e incollalo in una finestra del terminale. Esegui il comando. - Una volta terminato il comando, il tuo connettore apparirà in Zero Trust.
- Seleziona Avanti.
Leggi la documentazione ufficiale per creare un tunnel tramite webui: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/remote/
Imposta una connessione HTTP o HTTPS al tuo server web
Una volta creato il tunnel, è facile associare un hostname al tunnel tramite il pannello di controllo “zero trust”, nella scheda “reti” è già possibile trovare il tuo tunnel registrato con lo stato “in salute”. Ora fai clic sul nome del tunnel e fai clic sul pulsante “modifica” nella scheda “hostname pubblico” fai clic sul pulsante “aggiungi un hostname pubblico”; inserisci un sottodominio per crearne uno (se vuoi configurare un sottodominio) e seleziona uno dei tuoi domini principali, nel campo “tipo” puoi selezionare HTTP o HTTPS (la differenza tra i due risiede nella porta utilizzata e nel protocollo di comunicazione, si consiglia di utilizzare https se il server è già configurato con un certificato); se selezioni “http” nel campo “url” dovrai inserire localhost:80 (o la porta del tuo webserver o della tua applicazione) invece, se selezioni “https” nel campo “url” dovrai inserire localhost:443 e poi espandi la sezione “impostazioni applicative aggiuntive” quindi “TLS” e seleziona l’elemento “No TLS Verify” se il tuo certificato utilizzato nel webserver è auto-generato e quindi auto-firmato (questo è importante). Per ospitare un intero webserver, se il tuo web server è già configurato con domini già presenti in Cloudflare, non è necessario fare altro. Per ospitare un’applicazione singola puoi anche utilizzare porte personalizzate ad esempio 5000 o 8080 a seconda della porta su cui risiede l’applicazione sul tuo server.
In questo modo la tua applicazione è ora raggiungibile via internet tramite il dominio selezionato in precedenza.
Raccomandazioni di configurazione
Quando cloudflared riceve una richiesta da un dispositivo WARP, utilizza le porte sulla macchina host per valutare e inoltrare la richiesta al tuo servizio di origine. Ogni macchina per design di sistema è limitata hardwaremente a un massimo di 65.535 porte. Inoltre, ogni servizio sulla macchina ha un numero limitato di porte che può consumare. Per questo motivo, consigliamo il seguente modello di distribuzione:
- cloudflared deve essere distribuito su una macchina host dedicata. Questo modello è tipicamente appropriato, ma potrebbero esserci flussi di lavoro serverless o clusterizzati in cui una macchina host dedicata non è possibile.
- La macchina host deve allocare 50.000 porte disponibili per l’uso dal servizio cloudflared. Le porte rimanenti sono riservate ai processi amministrativi di sistema.
Per aumentare il numero di porte disponibili per cloudflared su Linux:
Se la tua macchina ha una directory /etc/sysctl.d/:
Finestra terminale
echo 'net.ipv4.ip_local_port_range = 11000 60999' | sudo tee -a /etc/sysctl.d/99-cloudflared.conf
sudo sysctl -p /etc/sysctl.d/99-cloudflared.conf
Altrimenti:
Finestra terminale
echo 'net.ipv4.ip_local_port_range = 11000 60999' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
Su Linux e macOS, le impostazioni ulimit determinano le risorse di sistema disponibili per un utente connesso. Consigliamo di configurare le seguenti impostazioni ulimit per il server cloudflared: ≥ 70.000
Per visualizzare le tue impostazioni ulimit correnti, apri un terminale ed esegui:
Finestra terminale
ulimit -a
Per impostare l’impostazione ulimit per i file aperti:
Finestra terminale
ulimit -n 70000
Documenti di configurazione da: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/deploy-tunnels/system-requirements/
Documenti di configurazione generali per distribuire un tunnel: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/deploy-tunnels/
Perché cloudflared è consigliato?
Il software ha vari utilizzi; possiamo elencarne alcuni, immaginando ad esempio di trovarsi in una zona del mondo dove non c'è internet in fibra e per avere un server web dovrai pagare per costose connessioni satellitari o 4g lte… Molte di queste connessioni non hanno un indirizzo IP pubblico perché sono napped o protette; con Cloudflared è possibile aggirare questi limiti e comunque trasmettere sul web senza esporre il tuo indirizzo IP al pubblico. Nella specificità di avere una connessione mobile 4g o 5g e poterla fare ovunque (anche se è disponibile la connessione in fibra) consigliamo comunque di utilizzare queste connessioni come un "backup" e non come connessione principale; il motivo è che se i provider vedono traffico anomalo sulla rete mobile, potrebbero anche limitarlo. L'uso di Cloudflared tuttavia non è limitato a questo; immaginando ad esempio di dover creare una rete di server con diverse funzioni, potresti ad esempio utilizzare un server web con una linea dedicata e uno (o più) server di streaming domestico connessi tramite Cloudflared forse anche per una connessione a database. Potresti anche aver bisogno che alcuni utenti accedano alla tua applicazione che normalmente usi a un indirizzo come http://localhost:8080 con Cloudflared puoi farlo semplicemente inserendo quella porta nel campo "host". È anche possibile connettere più server a un singolo dominio tramite sottodomini o configurare la "protezione accessi" per proteggere l'accesso con l'autenticazione a due fattori o l'autenticazione sullo stato del dispositivo (dispositivo utilizzato, IP, ecc.). In breve, gli utilizzi possono essere vari. Fai attenzione ad usarlo correttamente, però, perché Cloudflare esegue controlli periodici e può disabilitare l'uso degli account in qualsiasi momento.
Leggi sempre la documentazione ufficiale
Come ho scritto un po' fa, consiglio sempre di leggere e imparare dalla documentazione ufficiale di cloudflare perché questo software potrebbe anche avere delle modifiche nel tempo. Questo documento è stato scritto senza aver ricevuto alcun supporto ufficiale da cloudflare ed è destinato ad essere un esempio per chi lavora nella nostra organizzazione.

