Bentornati nella serie di domotica!
Nell’episodio di oggi vedremo come configurare un accesso esterno in modo da poter accedere in qualsiasi momento alla casa domotica, e in tutta sicurezza perché utilizzeremo una cifratura SSL. Attualmente la configurazione che abbiamo realizzato consente di controllare i dispositivi solo da rete locale, ma sicuramente la maggior parte di voi starà seguendo questa serie con l'obiettivo di accedere alla propria casa da remoto, magari per spegnere le luci del soggiorno perchè avete dimenticato di farlo prima di uscire, o, in inverno, per accendere la stufa prima di ritornare dalla scuola/università/lavoro etc.


Mettiamoci subito al lavoro!
La prima cosa da fare è connettersi al Raspberry via SSH ed aggiornare/installare l’ultima versione di Apache con il comando: sudo apt-get install apache2
Dopodichè bisogna clonare il repository github necessario per ottenere il certificato SSL gratuito, quindi lanciamo il comando git clone https://github.com/certbot/certbot.git
 

A questo punto, nella home, dovreste avere la directory “certbot”: accedetevi e lanciate lo script letsencrypt-auto per installare il bot. Ecco i comandi:
cd certbot/
./letsencrypt-auto

Durante l’installazione, che potrà durare diversi minuti, vi sarà chiesto di inserire una mail di riferimento, di accettare termini e condizioni e di inserire il nome del dominio. Noi però non abbiamo ancora un dominio, e infatti utilizzeremo No-IP: esistono molte alternative a questo servizio (basta googlare “noip alternatives”) e non importa quale utilizzerete, basta avere un DNS dinamico sul Raspberry.

Ora torniamo sul terminale, in particolare nella home directory, e creiamo una cartella con mkdir <nomecartella>, ad esempio mkdir noip. Accediamo con cd <nomecartella>, nel nostro caso cd noip, e scarichiamo no-ip per linux con 
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
poi estraiamo l’archivio con
tar vzxf noip-duc-linux.tar.gz
Con il comando ls potete vedere i file appena estratti. Adesso possiamo compilare e installare il programma con:
sudo make 
sudo make install

Il programma vi chiederà di loggarvi all’account No-IP (se non lo avete potete registrarvi sul sito ufficiale), di selezionare l’host creato e di settare un intervallo di aggiornamento dell’IP (in minuti). Terminata l’installazione, rechiamoci sul pannello di controllo di No-IP (sul browser) e avviamo la configurazione guidata del nostro nuovo host:

""""

Seguite la procedura guidata, ma ovviamente saltate la fase di download del client (perchè lo abbiamo appena scaricato) e fate attenzione a quando vi viene chiesto di configurare il router per il port forwarding. Il sito vi darà tutte le informazioni necessarie, ma la procedura per aprire le porte del router varia a seconda della marca, del modello e del provider internet: solitamente basta accedere al pannello di controllo del router e raggiungere la sezione port mapping o port forwarding. 

Se adesso provate ad accedere al pannello di controllo di Switchando, il browser notificherà che la connessione non è sicura: questo accade perchè non abbiamo ancora applicato il certificato SSL. A questo punto dobbiamo reindirizzare temporaneamente il nostro sottodominio dallo Switchando Server ad Apache per ultimare la configurazione del nostro letsencrypt, quindi tornate sulla porta appena aperta e fate il redirect alla porta 80.
 

""""

Adesso, provando a connettervi all’IP del Raspberry dovreste trovare la pagina di default di Apache. Torniamo sul terminale del Raspberry e lanciamo nuovamente:
cd certbot/
./letsencrypt-auto

Durante l’esecuzione dello script vi sarà chiesto se volete che Apache rediriga il traffico HTTP sulla porta 443 dell’HTTPS, ma possiamo anche rifiutare (opzione 1), perchè la porta HTTP resterà proprio chiusa: 
""""

Importante! Al trermine dell’installazione una nota vi dirà che ogni 3 mesi ci sarà bisogno di rinnovare i certificati con il comando letsencrypt-auto renew.

Ora torniamo sul pannello di controllo del router a apriamo la porta 443, che è quella dell’HTTPS:

""""

Importante! Dopo la configurazione ricordate di chiudere la porta 80!

Torniamo sul pannello di controllo di No-IP (sul browser) e riavviamo la configurazione guidata dell’host, stando attenti a cambiare la porta da 80 a 443.
A questo punto (ultimo step) facciamo in modo che Apache rediriga il traffico della porta 443 (cifrata) sulla porta 8080, dove effettivamente è in esecuzione il server Switchando.
Apriamo il terminale (sempre dal Raspberry) e lanciamo:
cd etc/apache2/sites-available 
sudo nano 000-default-le-ssl.conf

Spostiamoci all’inizio del file e aggiungiamo le seguenti righe:
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/

""""

Ctrl+X, poi Y e INVIO per salvare e riavviamo Apache per rendere effettive tutte le modifiche: 
sudo service apache2 restart
 

A questo punto potete loggarvi su Switchando anche da una rete esterna (ad esempio i dati mobili del vostro smartphone) con https://<dominio_creato_su_noip> e controllare la casa domotica come se foste in locale!