community italiana di domotica personale
 
Collegarsi da remoto a Home Assistant via Reverse Proxy

Collegarsi da remoto a Home Assistant via Reverse Proxy

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 INDICATA A UTENTI CON ISTALLAZIONE:
Ambienti Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione guida: 1.4

😊  QUESTA GUIDA È PARTE DEL NOSTRO PERCORSO GUIDATO ALL’INSTALLAZIONE E CONFIGURAZIONE di HOME ASSISTANT.

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 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 daremo per assunta la presenza del reverse proxy Caddy (spiegato a seguire come installarlo).

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 Home Assistant OS, 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 realizzare questa (necessaria) 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 (l’esempio è sì tratto dalla guida “per Raspberry”, ma è comunque un esempio buono per tutti).
CONFIGURARE IL PORT FORWARDING

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

  • IP destinazione: IP statico dell’host che ospita Caddy
  • Porta esterna: TCP porta
  • Porta interna: TCP porta

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

Vetrina Promo

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 IP), il quale può essere:

  • 127.0.0.1, se Caddy o il reverse proxy è installato sulla stesso computer di Home Assistant come servizio;
  • 172.0.0.0/8 (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.

È possibile aiutarsi col comando:

docker network inspect bridge | grep Subnet
* la classe indicata potrebbe essere un’altra. Verificare sui log l’eventuale presenza dell’errore Received X-Forwarded-For header from an untrusted proxy: l’IP indicato nell’errore indica implicitamente la classe IP da indicare in configurazione per risolvere il problema.

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 host e già utilizzato per il port forwarding presso il router.

⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.