Come creare un Webserver pubblico in casa tua con Cloudflare

Cos'è un webserver?

Un server web è software- [Program/Software: the instructions that control what a computer does; computer programs] - e hardware che utilizza HTTP (Hypertext Transfer Protocol) o HTTPS e altri protocolli per rispondere alle richieste dei client effettuate sul World Wide Web. Il compito principale di un server web è quello di visualizzare il contenuto del sito web attraverso la memorizzazione, l'elaborazione e la consegna di pagine web agli utenti. Oltre a HTTP o HTTPS, i server web supportano anche altri protocolli che possono essere chiamati “webservices” accessibili con diverse porte; i protocolli possono anche essere diversi dallo standard http come FTP o SSH o altro.

L'hardware del server Web è collegato a Internet e consente di scambiare dati con altri dispositivi connessi, mentre il software del server web controlla come un utente accede ai file ospitati. Il processo web server è un esempio del modello client/server. Tutti i computer che ospitano i siti web devono avere il software del server web.

I server Web vengono utilizzati nel web hosting, o l'hosting dei dati per siti web e applicazioni web-based — o applicazioni web.

Perché utilizzare Cloudflare e qual è 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 più veloci e più sicuri. Per capire come funziona Cloudflare, è necessario guardare gli errori frequentemente commessi che i siti web in passato hanno fatto. Quando si visita un sito web senza Cloudflare, il visitatore del sito richiede contenuti da un server. Tuttavia, quando ci sono stati troppi visitatori sul server allo stesso tempo, il server è stato sovraccaricato con le conseguenze di un sito web lento o non funzionante. Come il proprietario del sito web questo non è qualcosa che si desidera vedere. Ecco perché Cloudflare ha inventato una soluzione per questo. Cloudflare ha posizionato il proprio server, sotto forma di un'enorme rete mondiale, tra il sito web e il web server. 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 e lo carica tramite un server a seconda della posizione del visitatore. Per esempio: Hai un sito web che è ospitato in Germania, e qualcuno degli Stati Uniti cerca di connettersi al tuo sito web. La richiesta deve coprire una grande distanza (tra sito web e web server). Cloudflare risolve questo problema offrendo una vasta rete di server in tutto il mondo. L'americano non deve più fare una connessione con il server tedesco, ma si connetterà con il server Cloudflare più vicino da qualche parte negli Stati Uniti. Cloudflare Tunnels (o software cloudflared) è come una connessione VPN in quanto è un modo sicuro per accedere alle risorse sulla tua rete privata interna dal mondo esterno. La differenza con Cloudflare Tunnels vs. la tua VPN tradizionale è che non devi aprire le porte nel tuo firewall. Con VPN, ti colleghi al tuo server VPN (o a volte direttamente al tuo router) attraverso un buco che hai nascosto nel tuo firewall. Con Cloudflare Tunnels, si installa un client all'interno della rete che mantiene una connessione sicura verso Cloudflare. Quindi crei diversi FQDN (Nomi di dominio completamente qualificati aka. DNS name aka. CNAME registra) che associano i tuoi servizi interni.

Come usare Cloudflared per ospitare un'applicazione o un intero webserver

Con Cloudflare è possibile utilizzare un piccolo software chiamato “cloudflared” che crea un tunnel dal vostro hardware all’origine del cloudflare e collegare quel tunnel alla vostra porta 80 o 443 del vostro software webserver; in questo modo si può anche non aprire queste porte a internet e lasciare il firewall bloccarle. Questo aumenta anche la sicurezza e consente di non esporre il tuo indirizzo IP all'esterno. Per rendere questo tipo di connessione è necessario 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 alto livello acquistato o connesso al tuo account. A questo punto per aprire il primo tunnel è necessario accedere alla console “Zero Trust” tramite il dashboard Cloudflare.

L'applicazione cloudflared che può essere scaricata per ogni sistema operativo qui: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/

Inizia il tunnel sicuro
Una volta scaricato il cloudflared, è possibile creare il primo tunnel semplicemente via terminale o da webui.

TERMINALE

Digitare questo comando per autenticare:

$ cloudflared tunnel login

Creare un tunnel e dargli un nome:

$ tunnel nuvoloso creare 

Dall’output del comando, prendere nota dell’UUUID del tunnel e del percorso del file credenziali del tunnel.

Confermare che il tunnel è stato creato con successo correndo:

$ elenco tunnel offuscato

Leggi i documenti ufficiali per creare un tunnel tramite terminale:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/local/

WEBUI

  1. AccediZero Truste vaiAccesso>Tunnel.
  2. SelezionaCreare un tunnel.
  3. Inserisci un nome per il tunnel. Si consiglia di scegliere un nome che riflette il tipo di risorse che si desidera collegare attraverso questo tunnel (ad esempio,enterprise-VPC-01).
  4. SelezionaSalvare il tunnel.
  5. Il prossimo, è necessario installarecloudflarede gestiscilo. Per farlo, controlla che l'ambiente sottoScegli un ambienteriflette il sistema operativo sulla macchina, quindi copiare il comando nella casella sottostante e incollarlo in una finestra terminale. Esegui il comando.
  6. Una volta terminato il funzionamento del comando, il connettore apparirà in Zero Trust.
  7. SelezionaIl prossimo.

Leggi i documenti ufficiali per creare un tunnel via webui:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/remote/

Impostare una connessione HTTP o HTTPS al server web

Una volta creato il tunnel è facile associare un nome host al tunnel attraverso il cruscotto "zero trust", nella scheda "rete" è già possibile trovare il tunnel registrato con lo stato "sano". Ora fare clic sul nome del tunnel e fare clic sul pulsante “edit” nella scheda “http hostname” fare clic sul “add a hostname pubblico” pulsante; inserire un sottodominio per creare (se si desidera impostare un sottodominio) e selezionare uno dei domini primari, nel campo “type” è possibile selezionare HTTP o HTTPS (la differenza tra i due è nella porta utilizzata e il protocollo di comunicazione, si consiglia di utilizzare https Per ospitare un intero webserver, se il server web è già configurato con domini già presenti in Cloudflare, non è necessario fare altro. Per ospitare un'applicazione di segnale è inoltre possibile utilizzare porte personalizzate per esempio 5000 o 8080 a seconda della porta che l'applicazione che risieda sul server utilizza.

In questo modo la tua applicazione è ora raggiungibile tramite 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 servizio di origine. Ogni macchina per design di sistema è limitata ad 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 dovrebbe essere distribuito su una macchina host dedicata. Questo modello è tipicamente appropriato, ma ci possono essere flussi di lavoro serverless o cluster in cui un host dedicato non è possibile.
  • La macchina host dovrebbe assegnare 50.000 porte per essere disponibile per l'uso dal servizio cloudflared. I restanti porti sono riservati ai processi amministrativi del sistema.

Per aumentare il numero di porte disponibili per cloudflared su Linux:

Se la macchina ha una directory /etc/sysctl.d/:

Terminal window
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:

Terminal window
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. Si consiglia di configurare i seguenti ulimits sul server cloudflared: ≥ 70.000

Per visualizzare i tuoi attuali limiti, aprire un terminale ed eseguire:

Terminal window
ulimit -a

Per impostare i file aperti ulimit:

Terminal window
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 la distribuzione di un tunnel: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/deploy-tunnels/

Perché è raccomandato il cloudflared?

Il software ha vari usi; possiamo elencare alcuni di loro, immaginare per esempio essendo in una zona del mondo dove non c'è internet via cavo e per avere un web server si dovrà pagare per le connessioni satellitari molto costose o 4g lte... Molte di queste connessioni non hanno un IP pubblico perché sono napped o protetti; con cloudflared è possibile bypassare questi limiti e trasmettere ancora sul web senza esporre il tuo indirizzo IP al pubblico. Nella particolarità di avere una connessione mobile 4g o 5g ed essere in grado di farlo ovunque (anche se la connessione via cavo è disponibile) si consiglia ancora di utilizzare queste connessioni come “backup” e non come connessione principale; il motivo è che se i fornitori vedono traffico insolito sulla rete mobile, potrebbero anche limitarlo. L'uso di cloudflared non è tuttavia limitato a questo; immaginate per esempio di dover creare una rete di server con funzioni diverse, ad esempio, si potrebbe utilizzare un server web con una linea dedicata e uno (o più) server home streaming collegati tramite cloudflared forse anche per una connessione ai database. Potrebbe anche essere necessario che alcuni utenti accedano alla tua applicazione che normalmente utilizzi in un indirizzo come http://localhost:8080 con cloudflared puoi farlo semplicemente inserendo quella porta nel campo “host”. È anche possibile collegare più server a un singolo dominio attraverso sottodomini o impostare la protezione "accesso" per proteggere l'accesso con l'autenticazione a due fattori o l'autenticazione della postura dell'utente (dispositivo utilizzato, ip e altro ancora). In breve, gli usi possono essere vari. Fare attenzione a utilizzarlo correttamente, però, perché Cloudflare effettua controlli periodici e può disabilitare l'uso dei conti in qualsiasi momento.

Leggi sempre i documenti ufficiali

Come ho scritto poco fa, vi consiglio di leggere e imparare sempre dal funzionariocloudflaredocumenti perché questi software potrebbero anche avere modifiche nel tempo. Questo documento è scritto senza aver ricevuto alcun supporto ufficiale dacloudflareed è inteso come esempio per coloro che lavorano nella nostra organizzazione.