Proteggi il tuo server dietro un reverse proxy
Se una rete blocca l'indirizzo IP del tuo server, non potrà fermare le app che non si connettono direttamente ad esso. Con un reverse proxy come Cloudflare, le app si collegano al proxy, che poi inoltra la connessione al tuo server.
Come funziona
Il tuo dominio punta al proxy invece che al server. Le app cercano il dominio e si connettono al proxy, che decifra la connessione (proprio come fa con qualsiasi sito web) e la cifra di nuovo verso il tuo server. Il traffico viaggia tramite WebSocket, supportato da Cloudflare. Puoi usare anche un altro reverse proxy, purché supporti WebSocket e comunichi con il tuo server tramite TLS.
Le app cercano il dominio solo se la loro chiave lo include come nome attendibile, operazione che richiede un certificato rilasciato da una CA.
Una chiave può contenere anche l'indirizzo diretto del server. In questo modo le app provano entrambe le strade: il proxy garantisce la connessione se l'IP è bloccato, ma chiunque abbia la chiave può visualizzare l'indirizzo. Una chiave senza l'indirizzo del server indirizza invece tutte le app attraverso il proxy.
Cosa c'è da sapere
- Blocchi: Una rete può comunque bloccare il tuo dominio o gli indirizzi del reverse proxy. Tuttavia, gli indirizzi di Cloudflare gestiscono tantissimi siti web, quindi bloccarli comporta un costo elevato.
- DNS: Le app risolvono il tuo dominio tramite il DNS della rete prima di connettersi. Se la rete blocca o altera la risposta, le app usano gli indirizzi presenti nella chiave: una chiave contenente solo il dominio non potrà quindi connettersi.
- Privacy: Il reverse proxy può vedere i dati nel tunnel proprio come il tuo server: la destinazione delle connessioni degli utenti e tutto ciò che inviano in chiaro. Il traffico HTTPS rimane invece crittografato. Scegli sempre un reverse proxy affidabile.
- Solo TCP: Il server non rende disponibili le porte UDP e QUIC per le app che transitano tramite il proxy.
- Condizioni d'uso: Verifica che i termini del tuo provider consentano il traffico VPN. Per piccoli gruppi di utenti (indicativamente fino a 50) di solito non ci sono problemi.
Prima di iniziare
- Un dominio o sottodominio con un certificato emesso da una CA sul tuo server: scopri come configurarlo nella guida Usa un nome di dominio e un certificato attendibile. Completa questo passaggio prima, quando il record del dominio punta ancora direttamente al server.
- Un unico server associato al dominio. Se i record puntano a due server diversi, i pacchetti della stessa sessione possono essere instradati su entrambi, interrompendo la connessione.
- Il server in ascolto sulla porta TCP
443o su un'altra porta supportata dal proxy. Cloudflare inoltra il traffico HTTPS solo su443, 2053, 2083, 2087, 2096, 8443.
Attiva il proxy
- Su Cloudflare, apri i record DNS del tuo dominio e imposta su Proxied il record che punta al tuo server (ed eventuale record AAAA associato).
- Nella sezione SSL/TLS, imposta la modalità di crittografia su Full (strict). In questo modo Cloudflare contatterà il server via TLS verificandone il certificato. In modalità Flexible userebbe invece HTTP non protetto, rifiutato dal server.
VpnHood! MANAGER rinnova i certificati tramite HTTP in chiaro sulla porta TCP 80 attraverso il dominio, e Cloudflare li inoltra al tuo server. Su un server gestito, lascia Always Use HTTPS disattivato: forzare il reindirizzamento a HTTPS impedirebbe il rinnovo.
Su un server gestito
Verifica il certificato della farm per il dominio: alla voce Signature deve comparire CA Signed e la voce Visibility deve essere PublicInToken. In questo modo le chiavi includono il dominio e le app possono risolverlo.
Per instradare tutte le app attraverso il proxy, rimuovi gli indirizzi diretti del server dalle chiavi all'interno della sezione Access Points del server:
- Disattiva Automatic Configuration.
- Modifica ciascun indirizzo e imposta la voce Mode su Private.
- Lascia Listen su Yes: in questo modo il server resta in ascolto e il proxy può connettersi regolarmente.
MANAGER consente chiavi senza indirizzo solo se il certificato è impostato su CA Signed. La guida Imposta gli indirizzi IP del server illustra ciascuna opzione.
Se lasci l'impostazione su PublicInToken, gli indirizzi rimangono nelle chiavi e le app useranno sia questi sia il proxy. In questo modo, il proxy mantiene connessi gli utenti anche se un indirizzo viene bloccato.
Le app con una chiave precedente riceveranno quella nuova alla connessione successiva, poiché Push token to clients è attivo per impostazione predefinita.
Il dominio punta a un singolo server: in una server farm, tutte le app che passano dal proxy raggiungeranno la stessa macchina.
Su un server standalone
Verifica che il server utilizzi il certificato del dominio, con IsValidHostName impostato su true: scopri come nella guida Usa un nome di dominio e un certificato attendibile. Le chiavi generate successivamente includeranno il dominio e le app lo risolveranno automaticamente.
Un server standalone inserisce sempre i propri indirizzi nelle chiavi insieme al dominio, quindi le app usano indifferentemente entrambi e il proxy. Il proxy mantiene gli utenti connessi in caso di blocco dell'indirizzo, ma chiunque possieda una chiave può comunque leggerne l'indirizzo.