Vediamo come esporre un’app come Home Assistant all’esterno senza aprire porte nel proprio modem/router o qualsiasi sistema abbiate, questo sistema è sopratutto per chi non ha un IP pubblico.

Il sistema che andremo ad utilizzare è CloudFlare che da a disposizione gratuitamente un tunnel per esporre i propri siti o app.

Cos’è CloudFlare?

Cloudflare è una società di servizi cloud che offre una vasta gamma di soluzioni per la sicurezza, la prestazione e l’affidabilità dei siti web. Cloudflare protegge i siti web da attacchi informatici, come DDoS (Distributed Denial of Service), XSS (Cross-Site Scripting) e SQL Injection, e migliora la velocità di caricamento del sito web attraverso la distribuzione di contenuti in modo intelligente. Inoltre, Cloudflare offre servizi come la gestione dei nomi di dominio (DNS), la sicurezza del sito web, la distribuzione dei contenuti in base alla posizione geografica dell’utente, l’accelerazione del sito web tramite la cache, il firewall delle applicazioni web (WAF), la protezione contro il furto di contenuti e molto altro. In sintesi, Cloudflare aiuta a proteggere e migliorare le prestazioni dei siti web in modo efficace ed efficiente, rendendoli più veloci, sicuri e affidabili. 

Cos’è CloudFlare Tunnel?

Cloudflare Tunnel è un servizio offerto da Cloudflare che consente di esporre in modo sicuro un server web o un’applicazione che si trova dietro una rete locale o dietro un firewall, attraverso la rete di Cloudflare. In pratica, Cloudflare Tunnel crea una connessione crittografata tra il server o l’applicazione e il servizio di rete di Cloudflare, consentendo di esporre l’applicazione alla rete pubblica attraverso un dominio fornito da Cloudflare. Ciò significa che l’applicazione o il server possono essere accessibili da Internet senza dover aprire porte sul firewall o configurare regole di routing complesse. Ci sono diversi casi d’uso per Cloudflare Tunnel, tra cui l’esposizione di un server di sviluppo, di un’applicazione web interna, di un server di gioco o di una macchina virtuale. In ogni caso, Cloudflare Tunnel rende facile e sicuro l’esposizione di queste risorse sulla rete pubblica. 

 

Cosa Bisogna avere?

 

  1. Dominio
  2. Account CloudFlare
  3. Macchina Linux(consiglio Ubuntu)/Windows/Mac OS sempre nella rete
  4. Modem/Router con la possibilità di cambiare DNS

Potete usare direttamente CloudFlare per compre il dominio o io consiglio Google Domains e se come me avete un register esterno dovete cambiare i DNS.
A questo punto iscrivetevi al sito di CloudFlare se non siete iscritti e aggiungete il vostro dominio che verrà analizzato e la piattaforma rilascerà i DNS da cambiare nel proprio register, seguite la guida del vostro register per cambiarlo, ma se avete Google Domains, potete andare nel vostro dominio qui (come da foto) e premere su Gestisci server dei nomi

 

Entrando in CloudFlare nella sezione del dominio aggiunto entrare in Traffic –> CloudFlare Tunnel e premere Launch Zero Trust Dashboard, qui seguite 

Adesso bisogna installare CloudFlared che è il programma che permette di creare il tunnel e avviarlo.

Windows

Link Download, copiate il file cloudflared.exe in una nuova cartella C:\Cloudflared\bin e per installare aprire la PowerShell e con il comando:
cd C:\Cloudflared\bin

Poi per installare dare il comando di installazione:

.\cloudflared.exe –version

Mac OS

Su Mac OS potete installarlo con brew:

brew install cloudflare/cloudflare/cloudflared

Linux

.deb install:
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && dpkg -i cloudflared-linux-amd64.deb

.rpm install:
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm

Arch Linux:
pacman -Syu cloudflared

Dopo aver installato CloudFlared effettuiamo il login con questo comando sul Terminale/Powershell del sistema utilizzato:

cloudflared tunnel login

Creiamo il Tunnel:

cloudflared tunnel create <NAME>

Adesso per sapere tutte le info dei tunnel usiamo questo comando:

cloudflared tunnel list

Adesso dobbiamo creare il file (config.yml) di configurazione nella cartella .cloudflare (mia esperienza su ubuntu si trova nella cartella home del proprio utente) con un editor di testo:

config.yml

tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json
warp-routing:
    enabled: true
protocol: http2

ingress:
   – hostname: subdom.dominio.ext
     service: http://192.168.x.xx:8123
   – service: http_status:404

Il file .json che inseriamo nella configurazione dovrebbe essere il file credenziali del tunnel che si è creato nella cartella .cloudflared nel momento in cui abbiamo creato il tunnel.

Ingress è la parte dove esponi l’indirizzo della tua app al dominio, infatti subdom.dominio.ext è l’url esterno e http://192.168.x.xx:8123 è l’url interna alla tua rete con la porta (se l’app ad esempio Home Assistant sono esposti su porta 80 o 443 non serve specificarla)

Adesso con questo con questo comando potete aggiungere il route dns del proprio dominio:

cloudflared tunnel route dns <UUID or NAME Tunnel> <hostname>

Aggiungiamo l’ip della rete da leggere così da poter esporre le app/siti dentro la tua rete (IP/CIDR esempio: 192.168.1.0/25):

cloudflared tunnel route ip add <IP/CIDR> <UUID or NAME Tunnel>

L’ultima cosa che rimane è avviare il Tunnel e se non  avviato non espone:

cloudflared tunnel run <UUID or NAME>

 

Adesso bisogna creare il servizio di CloudFlared per l’avvio del tunnel automatico:

Windows

  1.  Aprire CMD ed entrare nella cartella creata con il comando: cd c:\Cloudflared\bin
  2.  Installare il servizio di Cloudflared con questo comando: cloudflared.exe service install
  3.  Creiamo una cartella con il seguente comando: mkdir C:\Windows\System32\config\systemprofile\.cloudflared
  4.  Copiamo il file cert.pem nella giusta cartella per rendere cloudflared un servizio con il seguente comando: copy C:\Users\%USERNAME%\.cloudflared\cert.pem C:\Windows\System32\config\systemprofile\.cloudflared\cert.pem
  5.  Copiamo anche il file <Tunnel-ID>.json come prima: copy C:\Users\%USERNAME%\.cloudflared\<Tunnel-ID>.json C:\Windows\System32\config\systemprofile\.cloudflared\<Tunnel-ID>.json
  6.  Nel registro di sistema modificare ImagePath qui così da puntare al file cloudflared.exe e config.yml: Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cloudflared
  7.  Potete usare i seguenti comandi per avviare il servizio e stopparlo:
    sc stop cloudflared
    sc start cloudflared

Mac OS

Per Mac OS basta questo comando: sudo cloudflared service install

Per avviare il servizio serve questo comando: sudo launchctl start com.cloudflare.cloudflared

Se aggiungete IP o modificate configurazione dovete per forza riavviare: 

sudo launchctl stop com.cloudflare.cloudflared

sudo launchctl start com.cloudflare.cloudflared

Linux

Per Linux basta questo comando: cloudflared service install

Per avviare il servizio serve questo comando: systemctl start cloudflared

Per vedere lo stato del servizio questo: systemctl status cloudflared

Se aggiungete IP o modificate configurazione dovete per forza riavviare: systemctl restart cloudflared

 

Adesso avete tutto funzionante e se il tunnel non funziona potete vedere il suo stato sulla dashboard online e poi agire tramite shell.

In questo articolo abbiamo visto come esporre e più avanti vedremo come avere più protezione e migliorare la configurazione di Cloudflare.

Appena avrò trovato il modo più sicuro e facile per entrare nella propria rete dall’esterno con VPN o altro farò una guida.

Qui: https://developers.cloudflare.com/cloudflare-one/ trovate tutta la documentazione di Cloudflare

P.S.: le protezioni aggiuntive che da Cloudflare le ho testate, ma mi danno problemi con alcuni servizi che ho integrato in Home Assistant (esempio: gli assistenti vocali) e devo trovare un modo per farglielo digerire.

Gruppo Telegram: 

https://t.me/HAITALIA

Seguite il canale telegram: 

https://t.me/itchsblog

Acquistate con il mio link Amazon:
https://amzn.to/2UTiFzL

Se volete Donare: 

buymeacoffee.com/rssfra97