Installa Openhab in modo sicuro in pochi minuti
Openhab, a differenza di altri strumenti come HomeAssistant, non offre di base molte opzioni o personalizzazioni di sicurezza. Nella documentazione ufficiale indicano la possibilità di configurare l’https, installare un proxy inverso e proteggere tramite credenziali l’accesso, ma il tutto non viene presentato per essere integrato con altri servizi di casa con la minor manutenzione possibile. Proprio per questo, dopo aver sperimentato qualche soluzione, propongo questa alternativa per installare Openhab sul tuo server domestico e raggiungerlo tramite un proxy inverso, con connessioni https, con rinnovo automatico dei certificati e con un sistema per richiedere credenziali aggiuntive in caso di accesso da fuori la rete locale.
1 L’obiettivo
In pochi passi avrai a disposizione un ambiente operativo di Openhab pienamente funzionante a casa tua, con una installazione sicura basata sull’impiego di un proxy inverso affidabile e robusto, un meccanismo automatico di richiesta e rinnovo certificati https e un set di credenziali per poter accedere dall’esterno. Il tutto estensibile anche a tutti gli altri servizi di casa.
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 troviamo una cartella per organizzare tutte le configurazioni e i file afferenti ai servizi esposti. Usualmente sono abituato a /opt/homelab o /homelab (puoi scegliere qualsiasi altra cartella, dovrai modificare i path che trovi di seguito nella guida concordemente alla tua scelta). Dentro questa cartella andiamo a creare gli spazi per proxy e Openhab:
- /opt/homelab/openhab
- /opt/homelab/nginxproxymanager
Adesso configuriamo il file docker-compose del proxy /opt/homelab/nginxproxymanager/docker-compose.yaml:
|
|
Ok, avviamo il proxy Nginx lanciando dal terminale:
|
|
Allo stesso modo configuriamo i container per Openhab creando il file /opt/homelab/openhab/docker-compose.yaml:
|
|
Ladies and Gentlemen, start your engines:
|
|
5 Configurazione del Nginx Reverse Proxy
Da un pc nella rete LAN o dal server stesso navighiamo con un browser verso la pagina di gestione del proxy:
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
Come prima cosa dobbiamo creare 2 Access List
. Iniziamo dalla prima che chiamiamo LAN.
Ora passiamo a creare “LAN or Password”. In questo caso è importante indicare il flag “Pass authentication to host” per passare le credenziali all’applicazione che servirà la richiesta, in questo caso OpenHab.
Adesso possiamo configurare gli host, i puntamenti del nostro proxy inverso. Andiamo su Hosts->Proxy Host->Add Proxy Host. Andiamo a configurare come host proprio Openhab. Nel caso voleessi configurare una homepage (dai un’occhiata alla dashboard che propongo) o altri servizi lo puoi fare allo stesso modo.
![Proxy Host for Proxy GUI -SSL](proxy_host_ssl.png “Se scegli “Request a new SSL Certificate” Nginx proxy manager si preoccuperà di richiedere, configurare e manutenere il certificato ssl per le connessioni https automaticamente!")
Nel tab “location” aggiungi qualche configurazione specifica di Openhab al path “/":
|
|
Salva, aspetta e BOOM, adesso puoi navigare verso https://openhab.YourPersonalHomeLabSite.dyndns.org per accedere alla tua istanza di Openhab, sia dalla tua rete che dall’esterno (ad esempio dal telefono su rete mobile), a patto tu abbia configurato il port forwarding sul router come indicato nei prerequisiti.
6 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.
7 Boom, ce l’hai fatta
Adesso non ti rimane altro che configurare Openhab con tutti i dispositivi che hai dentro casa.
8 Ti prudono ancora le mani?
- Stanco di doverti ricordare dozzine di ip, porte, url per ognuna delle tue applicazioni installate in casa? Dai uno sguardo alla semplice dashboard che è possibile realizzare.
- Una buona idea quando si espone un servizio web su internet è quella di adottare un Web Application Firewall per controllare e supervisionare il traffico con l’esterno.
9 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
10 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.