Dopo aver configurato quanto necessario su Raspbian in particolare per ciò che concerne il networking, facendo riferimento alle lezioni 4, 5 e 6 della guida su Raspberry Pi, adesso andremo a configurare le opzioni minime per poter utilizzare l’interfaccia grafica di Node-Red (la Dashboard).
Prima di tutto facciamo in modo che il server di Node-Red parta automaticamente all’avvio del Raspberry digitando quanto segue:
$ sudo systemctl enable nodered.service
Riavviamo quindi il Raspberry con sudo reboot.
Ora è necessario installare il pacchetto NPM (acronimo di Node.js Package Manager) che consente di installare anche tutti i pacchetti aggiuntivi per Node.Js su cui è basato NodeRed.
Da terminale digitiamo
sudo apt-get install npm quindi passiamo a installare la Dashboard. Entriamo nella cartella nascosta di Node-Red, presente in home, e richiamiamo l'installazione:
$ cd ~/.node-red
$ npm install node-red-dashboard
L'installazione della dashboard, in alternativa, può anche essere eseguita da Node-Red stesso accedendo all'editor (come viene descritto in seguito), selezionando Manage/Palette dal menù e cercando node-red-dashboard dal tab Install.
A questo punto possiamo accedere all'Editor di Node-Red raggiungendo l’indirizzo IP del Raspberry (indirizzoIP:1880 oppure localhost:1880 se stiamo lavorando in locale con tastiera, mouse e monitor collegati. Ad esempio http://192.168.1.101:1880).
Accodando invece /ui alla fine dell’url viene richiamata la Dashboard che per ora apparirà vuota non avendo ancora inserito alcun flusso.
Aggiungere un livello di sicurezza
Il bello di una smart-home è quello di poterla controllare anche da remoto. Ottenere accesso a una risorsa locale dall’esterno è possibile in diversi modi. Uno dei sistemi più sicuri è quello di creare una VPN che ci consenta anche di avere accesso singolarmente a tutti i dispositivi collegati alla rete domestica (ad esempio NAS e stampanti). Un sistema più rapido ed economico è, invece, quello di aprire una porta del Router e farla puntare al servizio locale mediante il Virtual server/Port forwarding (in genere presente sotto la voce di menù WAN delle configurazioni del Router) e quindi configurare un servizio DDNS purché supportato.
In qualsiasi caso è bene proteggere l’accesso sia alla Dashboard che all’Editor mediante nome utente/password, nonché cambiare la porta di accesso standard per depistare ulteriormente eventuali malintenzionati. Tutte le informazioni sulle opzioni di sicurezza di Node-Red sono riportate nella pagina ufficiale in un capitolo apposito. Qui vedremo come eseguire le operazioni di base.
Nella configurazione di Node-Red è possibile impostare nome utente e password in riferimento a tre diversi tipi di accesso:
- adminAuth per l' accesso all’editor (scrittura/modifica dei flussi);
- httpNodeAuth per l'accesso alla dashboard e alle richieste http;
- httpStaticAuth per l'accesso alle pagine statiche.
Andremo a impostare la password delle prime due tipologie di accesso. Apriamo il file di configurazione di Node-Red.
$ cd ~/.node-red
$ sudo nano settings.js
La prima volta che faremo questa operazione tale file poterbbe apparirci vuoto, in questo caso chiudiamo l'editor premendo contemporaneamente i tasti CTRL e X quindi apriamo il file di configurazione standard:
$ sudo nano /usr/lib/node_modules/node-red/settings.js
Le altre posizioni dove può trovarsi il file settings.js sono elencate nella documentazione ufficiale a questo link.
Nella parte iniziale del file è indicata la porta sulla quale è in ascolto il server di Node-Red.
[code]module.exports = {
// the tcp port that the Node-RED web server is listening on
uiPort: process.env.PORT || 1880,[/code]
Anche se tale operazione è opzionale è più sicuro cambiare il valore 1880 con un altro a piacere purché maggiore di 1024 (che non richiede permessi speciali) e che non sia utilizzato da altri servizi. Qui è possibile reperire un elenco delle porte standard utilizzate dai servizi TCP ed UDP. Negli esempi che seguiranno per semplicità faremo sempre riferimento alla porta standard 1880. L’utente che decide di cambiarla si ricordi di sostituire 1880 con il valore scelto.
Scorrendo più in basso incontriamo quest’altra sezione:
[code]// Securing Node-RED
// -----------------
// To password protect the Node-RED editor and admin API, the following
// property can be used. See http://nodered.org/docs/security.html for details.
//adminAuth: {
// type: "credentials",
// users: [{
// username: "admin",
// password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
// permissions: "*"
// }]
//},
[/code]
Notate che è tutta commentata (ogni riga inizia con un doppio slash). Bisogna eliminare i commenti dalla riga in cui c’è scritto adminAuth in poi sino all'ultima riga evidenziata qui sopra ovvero quella che termina con "},".
Qui vanno inserite le credenziali per l’accesso all’editor. Occorre inserire l’username preferito al posto di "admin" mantenendo le virgolette. I valori inseriti sono case-sensitive. Nel campo password, sempre tra virgolette, va cancellato il valore di esempio già presente e va immessa una password criptata con l’algoritmo bcrypt. Sebbene sia possibile generare l’hash anche da terminale è forse più rapido utilizzare un servizio web. Possiamo andare su questo sito immettere la password desiderata nel campo String to Encrypt e lasciare il valore 12 nel campo sottostante rounds. Premiamo il pulsante Hash! e comparirà in alto, in un riquadro verde, l’hash brcrypt della password. Inseriamolo al posto del valore di esempio della password nel file di configuarazione.
Continuando a scorrere lo stesso file verso il basso incontreremo quest’altra sezione:
[code]// To password protect the node-defined HTTP endpoints (httpNodeRoot), or
// the static content (httpStatic), the following properties can be used.
// The pass field is a bcrypt hash of the password.
// See http://nodered.org/docs/security.html#generating-the-password-hash
//httpNodeAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
//httpStaticAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
[/code]
La prima riga, httpNodeAuth, è utilizzata per la protezione della Dashboard, togliamo il commento.
Anche qui andremo a sostituire "user" e hash password con lo stesso sistema visto poco prima. E’ consigliabile utilizzare un nome utente e una password differenti da quella impostata per l'accesso all'editor. In caso dovesse risultare necessario potremo trovare il file di configurazione su Github, qui è riportato quello standard.
Possiamo quindi salvare il file dall’editor premendo contemporaneamente i due tasti "CTRL" e "O" e uscire facendo lo stesso con i due tasti "CTRL" e "X". Riavviamo il Raspberry, giacché ci troviamo ancora nel terminale, digitiamo il comando sudo reboot.
Dopo il riavvio
Proviamo se le modifiche appena introdotte hanno effetto. Dal browser di un computer collegato alla stessa rete (anche dal cellulare collegato tramite Wi-Fi), digitiamo l’indirizzo IP del Raspberry. Verrà chiesto nome utente e password, che sono quelli che abbiamo impostato per primi (adminAuth), per l'accesso all'Editor. Se aggiungiamo /ui all’url, apriremo la Dashboard. Anche qui ci saranno richiesti username/password, che sono quelli impostati in httpNodeAuth. Informazioni aggiuntive su come esporre Node-Red in maniera sicura su internet, aggiungendo altri livelli di sicurezza, sono disponibili sul repository ufficiale di Github qui. Nella prossima lezione cominceremo a utilizzare NodeRed per eseguire semplici controlli remoti.