SCOPI DELLA GUIDA:
CONCETTI AFFRONTATI:
|
COMPONENTI SOFTWARE UTIlIZZATE:
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI:
|
GUIDA indicatA per UTENTI: |
|
Note e disclaimer
|
|
Revisione guida: 1.1 |
GUIDE Alternative:
- guida per chi usa Home Assistant Core installato come applicativo Python su Raspbian di Raspberry
- guida per qualsiasi installazione di Home Assistant (anche HASSIO), usando Reverse Proxy
Abstract
Come spiegato anche durante un episodio del nostro podcast, la sicurezza in ambito domotico non è mai troppa. Non la è mai in assoluto, ma quando si corre il rischio di esporre a eventuali malintenzionati le nostre componenti domotiche (poco male quando si tratta di illuminazione, va peggio quando si parla di allarmi, di serrature o altro) è necessario dotarsi di un sistema il più possibile sicuro.
Per coloro che abbiano saggiamente deciso di adottare l’HUB personale Home Assistant, uno degli scogli più importanti da affrontare è quello di renderlo raggiungibile dall’esterno del propio ambiente domotico.
Home Assistant offre di suo la possibilità di inibire l’accesso tramite una gestione vera e propria di utenze che abbiano diritto all’accesso. Quel che rimane scoperto (di base) è l’uso della crittografia per la trasmissione dei dati, la quale se implementata ci tutela a fronte di eventuali reti non sicure nelle quali qualcuno “in ascolto” potrebbe intercettare i dati in transito, credenziali di accesso incluse.
In questa guida riassumiamo i passi operativi per dotare Home Assistant installato in distribuzione HASSIO delle configurazioni e del supporto SSL crittografico (e del meccanismo automatico di rinnovo certificati) al fine di potersi collegare in sicurezza da remoto. Si consiglia, prima di procedere, di leggere con attenzione la pagina dedicata al concetto e al funzionamento del “controllo remoto” in domotica.
Si parte
- Assunti
- Servizio Duck DNS
- Componente “Duck DNS”
- Add-on “Duck DNS”
- Port forwarding
- Riconfigurare Home Assistant
- Verificare la scadenza del certificato
- Connessione locale
Assunti
L’intera guida si basa sull’assunto che l’installazione di Home Assistant sia basata sulla distribuzione HASSIO (non la sola Core, quindi), indipendentemente dal sistema ospitante (che sia un Raspberry Pi oppure altro) o dall’eventuale strato di virtualizzazione sottostante (per esempio, HASSIO installato su Docker su Raspberry Pi).
N.b. Questa guida implementa l’add-on “Duck DNS“, del quale illustra installazione e configurazione. Si tratta di un add-on incluso nella lista degli add-on imprescindibili da installare sul proprio HUB, quando per l’appunto installato in distribuzione HASSIO. |
Servizio Duck DNS
Affinché sia raggiungibile dall’esterno, il punto di accesso esterno alla rete domestica (interfaccia WAN del modem) deve possedere un nome univoco (chiamato FQDN o dominio, anche se è improprio chiamarlo così) il quale veda l’IP ad esso associato aggiornarsi automaticamente ad ogni variazione, dato che quello assegnato al vostro modem/router cambia ciclicamente. Per fare questo interviene il servizio Dynamic DNS (o DDNS), ovvero un servizio che tenga traccia dell’ultima variazione e risponda, ai sistemi che chiedano la risoluzione (traduzione) del nome DNS, l’ultimo IP conosciuto, ovvero quello attuale.
Duck DNS è il servizio che abbiamo scelto per questa funzione.
Collegarsi quindi al servizio tramite l’indirizzo https://www.duckdns.org e, una volta registrati creare un proprio nome dominio che, univocamente, rappresenterà il vostro router collegato ad Internet. Il suffisso è sempre lo stesso (“.duckdns.org“) mentre ciò che cambia e va scelto è il suffisso (per esempio “casamia“).
Per questa guida, daremo per assunto di aver creato il seguente FQDN:
casamia.duckdns.org
dove “duckdns.org” è la parte fissa mentre casamia è il nome dominio da noi creato a mo’ di esempio.
All’interno della vostra sezione privata di Duck DNS troverete anche un campo importante chiamato “token“, il quale appare analogo a questo:
e3ff465f-c6d6-acb1-4416-44b2af152111
Appuntarselo da una parte, tornerà utile a breve.
Componente “Duck DNS”
Ora è necessario implementare su Home Assistant un elemento che, a fronte dell’eventuale cambiamento dell’IP Internet sull’interfaccia WAN del proprio modem/router, comunichi tale variazione a Duck DNS, in modo da aggiornare la conseguente risoluzione dell’FQDN.
Per far questo è sufficiente aggiungere al file configuration.yaml di Home Assistant il seguente codice:
duckdns:
domain: casamia
access_token: il-tuo-token-duckdns
dove:
domain | nome dominio definito sul servizio Duck DNS (inteso come terzo livello, quindi nel caso sopra solo “casamia“) |
access_token | Il token personale ottenuto tramite Duck DNS (sostituire “null” con il proprio token) |
Una volta inserita questa configurazione e rilanciato Home Assistant, Duck DNS conoscerà in tempo reale l’IP del vostro modem/router, e con lui, voi e chi interrogherà tale FQDN.
N.b. Questo paragrafo non va attuato se sulla propria rete c’è già qualche dispositivo che provveda a tale funzione di associazione dell’IP con il proprio FQDN, come per esempio un modem/router FRITZ!Box o altri modelli/marche in grado di effettuare da sé l’operazione. Se e quando un modem è in grado di provvedere a tale funzione, è sempre buona regola lasciare che sia lui ad aggiornare tale associazione, e non il Raspberry o altri host della propria rete. |
Add-on “Duck DNS”
Questo add-on per HASSIO consente in buona sostanza di associare la propria istanza Home Assistant all’FQDN di cui sopra, condizione minima e necessaria per poter controllare da fuori casa la propria domotica. Inoltre, questo add-on porta in dote la generazione automatica dei certificati crittografici utili alla comunicazione sicura tra la rete internet e Home Assistant al fine di controllare remotamente la nostra domotica personale.
Tale FQDN, quando definito con Duck DNS, è composto dal prefisso (a libera scelta, eg. “casamia“) e da un suffisso “duckdns.org“.
N.b. Questo add-on fa parte della lista degli add-on imprescindibili da installare su Home Assistant HASSIO. |
Per installare “Duck DNS” è sufficiente trovarlo nella lista degli add-on disponibili presso lo STORE presente sull’interfaccia web dellHUB (“Supervisor” > “Add-on Store“) e una volta trovato, cliccare su “INSTALL“.
Una volta completata l’installazione, alla voce “Configuration” impostare come segue:
lets_encrypt: accept_terms: true certfile: fullchain.pem keyfile: privkey.pem token: null domains: - null aliases: [] seconds: 300
dove:
accept_terms | Da impostare a “true” (rappresenta l’accettazione dei termini d’uso) |
token | Il token personale ottenuto tramite Duck DNS (sostituire “null” con il proprio token) |
domains | L’FQDN della propria istanza Home Assistant (sostituire “null” con il proprio nome, per esempio “casamia.duckdns.org“) |
Per definire i propri token e domain collegarsi al servizio Duck DNS e, una volta registrati creare un proprio nome (eg. “casamia.duckdns.org“) che andrà a comporre l’FQDN, il quale rappresenterà il vostro router collegato ad Internet – e quindi successivamente l’istanza Home Assistant.
Terminata la configurazione, cliccare su “Start“. Da qui in poi l’associazione del vostro nome internet con l’IP del vostro router internet sarà tenuta automaticamente aggiornata dall’add-on:
N.b. Dopo aver correttamente installato ed eseguito l’add-on Duck DNS non è necessario (anzi, è proprio concettualmente sbagliato) installare dei componenti ad hoc per la generazione dei certificati crittografici (ad esempio Let’s Encrypt), in quanto come precedentemente detto il supporto è già garantito in modo automatico. |
Dopo l’avvenuta configurazione ed avvio dell’add-on, verificare in fondo alla pagina che la richiesta dei certificati sia andata a buon fine cliccando su “Refresh” sotto la voce “LOG“. La procedura è completata correttamente quando appare il seguente log (potrebbe volerci qualche istante):
# INFO: Using main config file /data/workdir/config
+ Generating account key...
+ Registering account key with ACME server...
+ Done!
Sat Jul 20 00:36:10 CEST 2019: OK
95.232.225.128
NOCHANGE
# INFO: Using main config file /data/workdir/config
+ Creating chain cache directory /data/workdir/chains
Processing casamia.duckdns.org
+ Creating new directory /data/letsencrypt/casamia.duckdns.org ...
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting new certificate order from CA...
+ Received 1 authorizations URLs from the CA
+ Handling authorization for casamia.duckdns.org
+ 1 pending challenge(s)
+ Deploying challenge tokens...
OK + Responding to challenge for casamia.duckdns.org authorization...
+ Challenge is valid!
+ Cleaning challenge tokens...
OK + Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Done!
N.b. Attenzione! Non proseguire oltre senza prima aver concluso con successo questa fase.
Port forwarding
Per accedere dalla rete esterna al nostro Home Assistant è ora necessario configurare il modem/router in modo che qualsiasi chiamata esterna verso la porta (8123, o altra) venga girata direttamente all’IP statico del computer che ospita HASSIO verso la porta 8123, ovvero quella di Home Assistant.
Ribadiamo: tutti i concetti basilari legati a questo tema del controllo remoto sono approfonditi nel dettaglio in quest’altra nostra scheda. |
Per effettuare l’attività di configurazione del port forwarding si consiglia la lettura di questo articolo; i dati necessari applicando tale guida sono:
- IP destinazione: IP statico del computer ospitante HASSIO (assegnato in precedenza);
- Porta esterna: 8123 (a meno che non vogliate usarne un’altra, è lo stesso);
- Porta interna: 8123
Riconfigurare Home Assistant
A questo punto è necessario attivare i certificati crittografici su Home Assistant: per farlo è sufficiente effettuare una piccola modifica presso il file di configurazione configuration.yaml presente nella cartella “/config“.
Per farlo è necessario aggiungere un blocco “http:“ all’interno del file, come segue:
http: ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem
dove “ssl_certificate” rappresenterà il percorso del certificato appena creato e “ssl_key” il percorso delle chiavi.
Completata la modifica, salvare, non riavviare ancora Home Assistant ma recarsi presso la voce di menu “Impostazioni” > “Generale“: in basso, alla voce “URL Esterno” (se la voce non appare, attivare la “Modalità avanzata” presso il proprio profilo utente), impostare il proprio URL esterno:
https://casamia.duckdns.org:8123
ovviamente sostituendo casamia col vostro nome dominio precedentemente definito. Salvare e riavviare Home Assistant.
Terminato il riavvio, Home Assistant dovrebbe essere correttamente controllabile da remoto (e in locale) in modo sicuro tramite l’indirizzo appena configurato (quello in verde qui sopra), collegandosi – tramite browser o tramite l’app mobile Home Assistant Companion per iOS o Android – all’indirizzo appena impostato, inclusivo di porta (8123 o quella che sia).
Connessione locale
Quando ci si trova in casa – quindi collegati alla Wi-Fi/LAN domestica – è possibile collegarsi a Home Assistant senza dover necessariamente utilizzare l’indirizzo FQDN esterno: è possibile infatti utilizzare l’indirizzo IP del computer ospitante HASSIO, anche se è poco pratico. L’unica accortezza necessaria sarà quella di utilizzare comunque il protocollo SSL (indicando sempre https://).
N.b. Tra l’altro la cosa risulta particolarmente utile in caso di problemi col servizio Duck DNS e/o con l’aggiornamento del proprio FQDN. |
In sostanza, anziché utilizzare:
https://casamia.duckdns.org:8123
oppure, più semplicemente, tramite l’indirizzo IP del computer ospitante:
https://IP_DEL_COMPUTER:8123
dove ovviamente “IP_DEL_COMPUTER” sarà l’indirizzo IP assegnato al proprio computer ospitante HASSIO e già utilizzato per il port forwarding presso il router.
Verificare la scadenza del certificato
È inoltre possibile verificare la durata del certificato in uso tramite uno specifico sensore, aggiungendo al file di configurazione di Home Assistant una configurazione come segue:
sensor:
- platform: cert_expiry
host: casamia.duckdns.org
port: 8123
Sarà chiaramente necessario personalizzare la stringa “host” col proprio FQDN e “port” con la propria porta.
Questa configurazione genererà un’entità sensore chiamata sensor.cert_expiry_casamia_duckdns_org_8123 (il nome varierà in base alle proprie impostazioni) che riporterà la data di scadenza del certificato. A questo punto definiamo un sensore che riporti il numero di giorni mancanti alla scadenza:
sensor: - platform: template sensors: certificate_expiry: friendly_name: "Scadenza certificato" value_template: "{{ (( as_timestamp(states('sensor.cert_expiry_timestamp_casamia_duckdns_org_8123')) | int - as_timestamp(now()) | int ) /60/60/24 ) | int }}" unit_of_measurement: "Giorni" icon_template: mdi:certificate
La configurazione creerà un sensore chiamato sensor.certificate_expiry che riporterà i giorni mancanti alla scadenza. Ovviamente, lo stato di tale sensore sarà anche visualizzabile presso il frontend web Lovelace UI.
![]() |
ATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti. |
