Progetto Home Automation: Rediamo sicura la nostra installazione di HomeAssistant


La sicurezza (soprattutto su internet) è una delle cose che più vengono prese sottogamba, nonostante sia una delle più importanti. Il motivo è semplice: non porta a dei vantaggi visibili (come può farlo invece una nuova feature)… finchè va tutto bene!
Questo step avrei dovuto farlo tanto tempo fa, subito dopo l’installazione di Home Assistant. Ma si sa, è molto più appagante vedere il monitor dei consumi funzionante che il sapere che la propria connessione ad Home Assistant è criptata!

Adesso però è venuto il momento di occuparsi un po’ di alcuni buoni step della sicurezza, come consigliato sulla wiki di Home Assistant. Vediamo dunque come fare!

Salviamo tutte le password sul file secrets.yaml

Per fare questo bisognerà spostare tutte le password e i token sul file secrets.yaml (se non esiste createlo).

Quindi per esempio se nel vostro file di configurazione (ad esempio configuration.yaml) avete:

homeassistant:
  auth_providers:
   - type: legacy_api_password
     api_password: YOUR_PASSWORD

Aggiungete la vostra password al file secrets.yaml con una chiave che la identifichi:

http_password: YOUR_PASSWORD

E trasformate il file di configurazione in:

homeassistant:
  auth_providers:
   - type: legacy_api_password
     api_password: !secret http_password

Semplice no? Ora però passiamo a qualcosa di un pochino più complesso..

Installiamo il certificato TLS/SSL per collegarci sicuri

Fino ad adesso tutte le informazioni trasmesse durante la connessione ad Home Assistant sono state in chiaro. Questa è una pessima prassi, perchè chiunque potrebbe intromettersi tra il nostro PC ed Home Assistant e intercettarle (pensate per esempio alle password di login). Quindi è arrivato il momento di rendere tutto più sicuro aggiungendo un certificato TLS/SSL da usare per criptare le informazioni da e verso il nostro Home Assistant (mi baserò su questa guida per fare questo).

Supponiamo di aver già la nostra installazione accessibile dall’esterno (io uso duckdns.org per questo). Prima di tutto bisogna aprire la porta 80 del router e reindirizzarla al nostro server dove c’è Home Assistant (da porta 80 a porta 80).

Ora logghiamoci via ssh sul nostro server e installiamo il certificato:

# pacman -S certbot
# systemctl stop home-assistant@homeassistant.service
# certbot certonly --standalone --preferred-challenges http-01 --email your@email.address -d examplehome.duckdns.org

L’ultimo comando creerà i certificati in /etc/letsencrypt, verificate che esista la cartella /etc/letsencrypt/live/examplehome.duckdns.org/. Ovviamente al post di your@email.address andrà messa la vostra email, e al posto di examplehome.duckdns.org il vostro indirizzo che usate per collegarvi dall’esterno (e sul quale volete abilitare https). Ora dobbiamo dare i permessi di accesso all’utente homeassistant che è quello che runna Home Assistant poi, quindi:

$ sudo chmod 755 /etc/letsencrypt/live/
$ sudo chmod 755 /etc/letsencrypt/archive/
$ sudo chmod -R 777 /etc/letsencrypt/

Ora non ci resta che aprire la porta 443 del router che reindirizza alla porta 8123 del nostro server Home Assistant.

Infine nel file configuration.yaml bisogna aggiungere le seguenti righe (adattate al vostro caso, come sempre):

http:
  ssl_certificate: /etc/letsencrypt/live/examplehome.duckdns.org/fullchain.pem
  ssl_key: /etc/letsencrypt/live/examplehome.duckdns.org/privkey.pem

Se avrete fatto tutto correttamente dovrete riuscire a collegarvi alla vostra installazione sicura all’indirizzo https://examplehome.duckdns.org/.

Configuriamo Grafana per usare il certificato

Se anche voi state usando InfluxDB e Grafana, e avete un collegamento per mostrarvi i dati sulla vostra dashboard lovelace, accedendo in https non riuscirete più a vedere i vostri grafici.

Per risolvere dovrete aggiungere i certificati anche a Grafana, per farlo editate il file di configurazione (nel mio caso è il file conf/defaults.ini nella cartella di installazione) ed editate le seguenti righe


[server]
# Protocol (http, https, h2, socket)
protocol = https

# https certs & key file
cert_file = /etc/letsencrypt/live/examplehome.duckdns.org/fullchain.pem
cert_key = /etc/letsencrypt/live/examplehome.duckdns.org/privkey.pem

Monitoriamo lo stato del certificato su Home Assistant

Il certificato che abbiamo appena creato non ha durata illimitata, ma va aggiornato ogni 90 giorni. Impostare un monitor di quanti giorni mancano permette di sapere da Home Assistant se il rinnovo automatico (che imposteremo dopo) è andato a buon fine, e nel caso non lo fosse avremmo il tempo per rinnovarlo manualmente (col comando utilizzato in precedenza).

Per monitorare il tempo rimanente installiamo prima di tutto il programma ssl-cert-check (da AUR):

$ yay -S ssl-cert-check

Poi aggiungiamo il seguente sensore a Home Assistant (avendo cura ad aggiungere l’indirizzo corretto):

sensor:
  - platform: command_line
    name: SSL cert expiry
    unit_of_measurement: days
    scan_interval: 10800
    command: "ssl-cert-check -b -c /etc/letsencrypt/live/examplehome.duckdns.org/cert.pem | awk '{ print $NF }'"

Questo sensore ogni 3 ore dovrebbe aggiornare i dati, ma cambiando scan_interval si può aumentare o diminuire a vostro piacimento.

Aggiorniamo automaticamente il certificato SSL

Infine non ci resta che aggiornare automaticamente il certificato quando mancano 30 giorni alla scadenza:

Per farlo utilizzeremo cron, quindi se non lo avete già installato:

$ yay -S cronie
# systemctl enable cronie
# systemctl start cronie

Una volta installato logghiamoci con l’utente di home assistant e editiamo la crontab:

# crontab -e

Ed aggiungiamo il la riga per il cronjob relativo al rinnovo del certificato:

30 2 * * 1 certbot renew --cert-name examplehome.duckdns.org

Una volta salvato dovreste avere il vostro rinnovo automatico funzionante!

Nel caso di dubbi, o consigli non esitate a commentare… alla prossima!

Questa voce è stata pubblicata in Arch Linux, Home automation e contrassegnata con , , , , , , , , , , , , , . Contrassegna il permalink.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...