Collegarsi da remoto a Home Assistant via Reverse Proxy

6 minuti di lettura
SCOPI DELLA GUIDA:
  • Fornire al proprio Home Assistant (indipendentemente dal tipo di installazione) il più alto grado possibile di sicurezza per la connessione remota via Internet
  • Livello di difficoltà: medio
CONCETTI AFFRONTATI:
  • Configurazione software
COMPONENTI SOFTWARE UTIlIZZATE:
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI:
GUIDA maggiormente indicatA per:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere garanzia, omologazioni e certificazioni di qualità.
Revisione guida: 1.0
GUIDE Alternative:

Abstract

Una premessa importante (dato che molti non leggono con attenzione): questa guida è adatta a qualsiasi tipo di installazione di Home Assistant che l’utente abbia implementato per gestire la propria domotica.


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, possibilmente in modo sicuro.

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.

Solitamente l’utente provvede alla configurazione dell’accesso remoto configurando l’istanza Home Assistant in modo da gestire in autonomia le connessioni sicure (HTTPS tramite certificati SSL generati “in qualche modo” localmente), come descritto per esempio anche in queste nostre guide:

le quali come si capisce dai titoli sono tra l’altro specifiche in base al tipo di installazione Home Assistant.

Abbiamo quindi deciso di stilare questa guida urbi-et-orbi, la quale indipendentemente dal tipo di installazione consenta agli utenti di:

  • collegarsi via remoto alla propria istanza Home Assistant passando attraverso un proprio reverse proxy (spiegato meglio a seguire);
  • lasciare al reverse proxy l’onere della gestione del traffico dentro/fuori (via HTTP o HTTPS);
  • lasciare al reverse proxy l’onere della gestione dei certificati SSL per l’HTTPS tramite Certification Authority esterna;
  • consentire la connessione via rete interna alla propria istanza Home Assistant senza errori di certificato.

Si consiglia, prima di procedere, di leggere con attenzione la pagina dedicata al concetto e al funzionamento del “controllo remoto” in domotica.

Home Assistant - Security

Si parte

Assunti

L’intera guida si basa sull’assunto che la propria istanza di Home Assistant Core sia operativa e risponda al classico indirizzo di base

http://INDIRIZZO_IP_DI_HOME_ASSISTANT:8123

senza, quindi, alcuna configurazione specifica legata a certificati crittografici SSL né gestione DDNS: un’installazione “base”.

Reverse proxy

Questa guida, come detto, impone che l’onere della gestione del traffico HTTPS sia in carico a un server reverse proxy e non a Home Assistant. Questo disaccoppia i ruoli: Home Assistant fa il suo mestiere senza l’adozione di protocolli sicuri all’interno della propria rete; il traffico dall’esterno, quello sì mediato tramite certificati crittografici SSL, viene gestito per intero dal reverse proxy che provvede poi a inoltrarlo all’istanza interna di Home Assistant.

Tutto ciò da un lato complica le cose e da un altro le semplifica. Introdurre un reverse proxy sulla propria rete infatti complica la configurazione del tutto, ma semplifica perché consente non solo di di dedicargli anche la parte di auto-rinnovo dei certificati, ma anche di definire le configurazioni dei più disparati servizi da esporre verso la rete Internet, sempre mediati dal esso.

Lo schema di gioco è il seguente:

Reverse Proxy Schema con SSL

Ovviamente, il server reverse proxy può essere (come solitamente si fa) ospitato sul medesimo computer che accoglie Home Assistant.


Primo passo, quindi, è quello di adottare un reverse proxy sulla propria rete domestica.
Possedendone già uno – quale che sia – ciò che è necessario fare è semplicemente definire una regola che instradi il traffico dall’esterno della rete Internet verso l’istanza Home Assistant, riconfigurare quest’ultimo e il gioco è fatto. Se come reverse proxy si utilizza Caddy, saltare direttamente alla sezione dedicata alla sua configurazione per la gestione Home Assistant, qui sotto.

Se non si possiede già un reverse proxy, allora bisogna installarlo. In questa guida noi proporremo Caddy.

N.b. Ovviamente qualunque altro reverse proxy va bene, purché riesca a instradare correttamente il traffico da e per Home Assistant e che sia garantito il rinnovo automatico dei certificati SSL.
Gli utenti HASSIO, per esempio, potrebbero aver implementato un add-on concepito allo scopo, come per esempio NGINX. La configurazione di Home Assistant, in presenza di tale elemento, è quella poi descritta qui sotto a seguire.

Caddy

Come detto, per questa guida prendiamo in analisi l’utilizzo, come reverse proxy, di Caddy.

INSTALLAZIONE CADDY

Caddy è un server web con funzioni reverse proxy molto utilizzato e molto diffuso, nonché piuttosto semplice da installare e configurare. Può essere installato su molti sistemi diversi, incluso Windows e macOS (in questi due casi, via Docker).

A disposizione dell’utente per tale installazione:

CONFIGURAZIONE CADDY

Una volta effettuata la messa in opera di Caddy è sufficiente modificarne il file di configurazione (il cosiddetto “Caddyfile”) aggiungendovi, in calce (in aggiunta alla regole pre-esistenti) il seguente codice:

(https_header) {
  header {
    Strict-Transport-Security "max-age=31536000; includeSubdomains"
    X-XSS-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "SAMEORIGIN"
    Referrer-Policy "same-origin"
  }
}

https://miodominio:porta { 
  import https_header
  reverse_proxy http://INDIRIZZO_IP_DI_HOME_ASSISTANT:8123
}

Dove ovviamente miodominio sarà il proprio FQND scelto in fase di installazione di Caddy per rappresentare la propria rete e porta la porta esterna dal quale si vuole scegliere di raggiungere Home Assistant (può essere la 8123 come un’altra a scelta). Analogamente, la seconda parte di configurazione riguarda l’indirizzo IP dei Home Assistant e relativa porta.

Attenzione però: ovviamente le due porte non possono coincidere, qualora Caddy e Home Assistant risiedano sullo stesso computer. In questo caso, impostare porte diverse (eg. porta interna Home Assistant 8123, porta esterna 9000).

Al termine della configurazione, riavviare Caddy.

NOTA IMPORTANTE: Se si utilizza Caddy su Docker, è fondamentale non solo riavviare il container, ma ricrearlo da zero (pur mantenendone la configurazione), aggiungendo nel comando di creazione le nuove porte aggiuntive da far gestire al reverse proxy, come spiegato in questo esempio.
CONFIGURARE IL PORT FORWARDING

Sul modem/router, definire una regola di port forwarding così modellata:

  • IP destinazione: IP statico del Raspberry Pi che ospita Caddy
  • Porta esterna: TCP porta
  • Porta interna: TCP porta

dove “porta” è la porta da esporre esternamente, eg. 9000.

Riconfigurare Home Assistant

A questo punto è necessario indicare a Home Assistant che tutto il traffico esterno gli arriverà attraverso il reverse proxy.

Per farlo è sufficiente effettuare una piccola modifica presso il file di configurazione dell’HUB, modificandolo con l’aggiunta (o modifica) del blocco “http:, come segue.

http:
  use_x_forwarded_for: true
  trusted_proxies: 
    - XXX.XXX.XXX.XXX

dove “XXX.XXX.XXX.XXX” rappresenterà l’indirizzo IP del reverse proxy (o la classe), il quale può essere:

  • 127.0.0.1, se Caddy o il reverse proxy è installato sulla stesso computer di Home Assistant come servizio;
  • 172.17.0.0/16 (solitamente), se Caddy è installato su Docker sulla stesso computer di Home Assistant (anch’esso installato su Docker);
  • l’indirizzo IP LAN di Caddy o del reverse proxy, se installato su un computer diverso da quello di Home Assistant.

Completata la modifica, salvare, e riavviare Home Assistant. Una volta riportato, 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 stata decisa).

https://miodominio:porta

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, ma direttamente il puntamento all’indirizzo mDNS oppure all’indirizzo IP del computer che ospita l’HUB.

In sostanza, anziché utilizzare:

https://miodominio:porta

sarà possibile utilizzare l’indirizzo (se attivo l’mDNS):

http://homeassistant.local:8123

oppure, più semplicemente, tramite l’indirizzo IP del computer che ospita l’HUB:

http://INDIRIZZO_IP_DI_HOME_ASSISTANT:8123

dove ovviamente “INDIRIZZO_IP_DI_HOME_ASSISTANT” sarà l’indirizzo IP assegnato al proprio Raspberry IP e già utilizzato per il port forwarding presso il router.


Home Assistant Official Logo 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.