La perfetta Dashboard HTTPS per il tuo server casalingo
La possibilità di lavorare alla configurazione e all’installazione di servizi all’interno della rete di casa per la domotica o come cloud privato si limita ai ritagli di tempo dopo il lavoro, durante la sera o nei giorni di festa. è inevitabile quindi per me dimenticare sistematicamente gli url, gli ip, gli host in cui sono pubblicati i vari servizi.
Esiste un modo semplice, veloce e sicuro per organizzare tutti questi servizi che ho in casa?
1 L’obiettivo
In pochi minuti riusciremo a installare una dashboard completa per tutte le tue applicazioni/servizi di casa, con una architettura basata su un reverse proxy stabile e sicuro, accedibile in connessione HTTPS anche da dentro la LAN. A proposito, è tutto gratis!
2 Prerequisiti
- Un server locale, come un vecchio pc o uno di quelli a risparmio energetico che sia sempre acceso. Va bene di tutto, dai server da rack agli Intel NUC (personalmente mi trovo bene con il Gigabyte Brix).
NoteNella guida sono descritti i passaggi in caso di utilizzo di architettura intel x64 su sistema operativo basato su Linux. In caso di architettura ARM (ad esempio un Raspberry) o altri sistemi operativi non preoccuparti, con pochi adattamenti riuscirai a raggiungere lo stesso obiettivo.
- Porta 80 e 443 non devono essere già utilizzate dal server locale.
- il server locale deve avere un indirizzo statico in LAN (e.g. 192.168.1.X).
- La rete di casa dovrà essere connessa a internet. In caso non abbia un indirizzo ip statico (in Italia per quello che so vengono concessi prettamente a contratti business) non c’è problema, è richiesta solo la registrazione di dns dinamico.
- Tramite il router di casa la porta 80 e 443 dell’interfaccia WAN dovranno essere instradate verso il server locale (port forwarding).
- docker e docker-compose devono essere installati sul server di casa. In caso non li avessi già installati, il sito ufficiale di docker fornisce delle guide semplici e efficaci a riguardo.
- Un “dynamic DNS name” (come quelli offerti da NoIP e dyn.com) o un nome statico dns nel caso in cui abbia un indirizzo ip statico. In sostanza, per far lavorare i certificati per l’https è necessario in questo caso procurarsi un url simbolico che punti all’indirizzo pubblico di casa, il solo ip non basta. A proposito, nella configurazione del dynamic dns è importante ricordarsi di indirizzare tutti i sottodomini con la wildcard asterisco-punto prima del nome. Nella guida indicherò con “YourPersonalHomeLabSite.dyndns.org” il tuo dynamic dns.
- Opzionale - Sul tuo server di casa puoi lavorare come preferisci, usando tastiera e mouse, tramite ssh, o kvm. Il mio consiglio è di utilizzare Visual Studio CODE con l’estensione Remote Development, è davvero comodo.
3 Cos’è un proxy inverso e perché ne abbiamo bisogno?
Il prodotto Nginx Proxy Manager è composto dal proxy Nginx (configurato come proxy inverso) e una interfaccia di gestione e configurazione. Il proxy inverso lo possiamo immaginare come un server web che risponde ad ogni pagina richiesta inviando dei contenuti da un altro server. In pratica, quando chiedo qualcosa ad un reverse proxy lui non possiede il contenuto e deve richiederlo al vero server in maniera sincrona alla mia richiesta.
4 Avviamo i container
Sul server locale è utile scegliere una cartella per raccogliere i file di configurazione per tutti i servizi pubblicati, come ad esempio /opt o /opt/homelab. La configurazione di proxy e dashboard la potremo quindi collocare, per esempio, nella cartella /opt/homelab/proxy_dashboard.
Creare /opt/homelab/proxy_dashboard/docker-compose.yaml dentro al path con questo contenuto:
|
|
Creare le cartelle per i vari servizi contenuti, avendo cura che corrispondano ai path indicati nel tag “volumes” nel docker-compose file appena creato.
- /opt/homelab/proxy_dashboard/nginxproxymanager
- /opt/homelab/proxy_dashboard/dashmachine
- /opt/homelab/proxy_dashboard/dns
Bene, è tempo di avviare i container. Per farlo lancia sul terminale del server il comando:
|
|
5 Setup di Nginx Reverse Proxy
Da un pc in rete LAN (che sia il server o un altro) naviga alla pagina dell’interfaccia di gestione di Nginx Proxy Manager: http://IP_OF_THE_HOMELAB_SERVER:81
Il servizio chiederà di cambiare la password dopo il primo accesso. Le credenziali di default sono:
- Email: admin@example.com
- Password: changeme
Adesso navigare nel tab Hosts-> Proxy Hosts e cliccare su Add Proxy Host. Dobbiamo configurare la rotta principale: la dashboard.
Salva, aspetta e BOOM, adesso puoi navigare verso https://YourPersonalHomeLabSite.dyndns.org e accedere alla tua dashboard di casa!
6 Setup della dashboard
Naviga verso https://YourPersonalHomeLabSite.dyndns.org, vai su settings (le credenziali di default sono admin:admin), e aggiorna il file di configurazione. Questo è un esempio di configurazione con qualche servizio:
|
|
- background = https://picsum.photos/1920/1080?blur=5 -> in questo modo ogni volta che farai accesso alla dashboard ci sarà uno sfondo casuale.
- Rimpiazza “YouMustChooseAGoodPassword” con una password di adeguata complessità. Queste credenziali manterranno al sicuro la configurazione dei tuoi host interni (non pubblici) dato che la dashboard sarà esposta su internet.
- Uno dei collegamenti è proprio verso l’interfaccia di Nginx Proxy Manager, in questo modo puoi usare il proxy inverso per accedere alla sua stessa interfaccia di gestione url= nginxproxymanager.YourPersonalHomeLabSite.dyndns.org (dovrai prima configurare host come abbiamo fatto per la dashboard) oppure potrai configurare la dashboard con l’indirizzo diretto url= IP_OF_THE_HOMELAB_SERVER:81 (prefix = http://)
- Gli altri collegamenti potranno essere riferiti a servizi interni alla lan o esterni, come ad esempio unifi.ui.com o qualsiasi altra cosa possa farti comodo nello gestire il server di casa.
- Le icone dovranno essere caricate manualmente nella dashboard. Usa la funzione drag & drop-choose" nel tab “image”. Mi raccomando al nome dei file!
7 Setup del server DNS locale
Per usare le access list basate sull’ip del mittente è necessario che le richieste locali vengano gestite all’interno della rete senza passare per la wan. Se stai richiedendo una pagina da internet, ad esempio da una connessione mobile, un dns pubblico ti instraderà verso l’interfaccia pubblica del tuo router di casa che a sua volta ti instraderà verso il tuo server locale. E fin qui tutto fila. Al contrario, se la richiesta proviene dalla lan stessa, magari un pc collegato alla stessa rete, allora dobbiamo far in modo di non essere indirizzati al nostro router, uscendo e rientrando dalla nostra rete, ma dobbiamo andare direttamente verso il server locale e il reverse proxy. Solo in questo modo il nostro ip mittente rientrerà all’interno della sottorete e riusciremo a distinguerlo dal traffico che proviene dall’esterno della rete. Per fare questo configureremo un piccolo server dns interno. Per farlo crea il file /opt/homelab/proxy_dashboard/dns/dnsmasq.conf:
|
|
Una volta configurato il server dns interno dovrai configurarlo nella pagina del dhcp del router e/o direttamente sui device stessi come server dns primario della configurazione ip.
8 Aggiungere gli altri host al proxy inverso
Adesso puoi configurare altre rotte al proxy inverso per collegare tutti i tuoi servizi domestici e gestire facilmente la gestione dei certificati per gli https e raggiungerli con un sottodominio facile da ricordare (come mysubdomain.YourPersonalHomeLabSite.dyndns.org).
Navighiamo verso l’interfaccia di Nginx proxy manager, e passiamo alla creazione di access list per restringere l’accessibilità di alcuni host ai soli membri della rete lan, per evitare che alcune risorse siano raggiungibili dall’esterno della rete (per ragioni di sicurezza).
Per farlo http://IP_OF_THE_HOMELAB_SERVER:81, e poi Access list -> Add Access List.
Chiamiamo la access list “LAN” e impostiamo il flag su Satisfy Any. Compilare come descritto dalle immagini:
Ok, ora possiamo creare un host la cui accessibilità sarà limitata all’interno della lan: ![proxy configuration for hosts - SSL Certificates](host_gui_npm.png “Ricorda di impostare “request new ssl certificate” e impostare il flag force ssl sul tab ssl.")
Ottimo, allo stesso modo potrai crearne altri per gli altri servizi (ad esempio home assistant, owncloud, nextcloud …)
![Proxy configuration - Home Assistant Example](home_assistnat_host.png “Dalle impostazioni di home assistant dovrai aggiungere “homeassistant.yourpersonalHomeLabSite.Dyndns.org” come un trusted_proxies”)
9 Ti prudono ancora le mani?
Sull’interfaccia di Nginx Proxy Manager puoi creare una access list che consenta l’accesso dalla LAN o in alternativa l’immissione di username e password in caso di accesso da internet, per avere una configurazione flessibile alle varie esigenze. Per farlo, crea una nuova access list come visto prima, imposta “satisfy any” e aggiungi degli username e password nel secondo tab.
10 Avvertenze
Di base stai esponendo il proxy inverso e tutti gli host su internet, a meno delle access list configurate, e questo può costituire un rischio per la privacy e la sicurezza cibernetica. Per tale motivo è necessario avere sempre un occhio di riguardo per i test e per raffinare la configurazione, accertandosi che tutto stia funzionando correttamente e le uniche cose accessibili su internet siano quelle desiderate.
Se navighi dall’esterno verso il tuo ip pubblico noterai una schermata di errore 404, motivata dal fatto che al proxy inverso è richiesta la pagina web associata a quell’indirizzo ip. Il proxy inverso però non sa quale contenuto fornire, in quanto non è configurato alcun host associato ad un indirizzo ip.
Se vuoi limitare al massimo i servizi esposti su internet ti basta impostare tutti gli host, ad eccezione del principale della dashboard, sulla Access list “LAN”.
Un’ultima cosa. Google Chrome, Edge e i dispositivi Google sembra che abbiano iniziato ad utilizzare i propri servizi dns al posto di quelli del sistema operativo. Questo può creare qualche problema al traffico interno, in quanto noteremo che le richieste interne andranno verso la wan e poi torneranno indietro. Per evitare il problema, dalle impostazioni del browser basta impostare su off la configurazione “use secure dns”. In alternativa, se la tua casa è dotata di firewall, puoi bloccare le richieste di dns verso i server autoritativi di Google (magari consentendoli solo al tuo server locale). Ho notato inoltre che è meglio disabilitare il flag #use-dns-https-svcb-alpn in edge://flags/ e chrome://flags/. Ne parlo qui
11 Bisogno di una mano?
Se qualcosa non funziona come dovrebbe non preoccuparti, sei sulla strada giusta. Fai una passata per verificare punto per punto che i prerequisiti siano soddisfatti e assicurati di partire da un ambiente il più possibile pulito. In caso ci siano ancora dei problemi non esitare a lasciare un commento in modo che io o qualcun altro ti possa aiutare.