Server IOT, come renderlo sicuro
Ciao Durante gli incontri del Sabato spesso ci chiediamo se fosse possibile installare un server IoT da usare con i nostri progetto Arduino, Raspberry, etc... Per il momento abbiamo attivato alcuni server nelle nostre reti locali domestiche per usare MQTT (mosqitto), NodeRed, Influxdb, Graphana, etc.. tramite container Docker Ci piacerebbe approfondire con chi è più esperto di noi di cybersecurity (Davide, Lucio, Alessandro, Luca) se e come fosse possibile poter accedere in sicurezza a questi server e servizi dall'esterno della propria rete domestica Come configurare il port forwarding dei nostri router, installare un VPN ed utilizzarla (tipo lo script di Lucio per Wireguard) , etc.. o se sarebbe meglio far girare il server e i containers in un VPS remota, etc... Penso sia un argomento che potrebbe interessare a più persone di Slip a parte il gruppo Arduino Grazie Giorgio
Noi del gruppo arduino utilizziamo telegram per i nostri progetti verso internet. Lettura sensori e controlli vari. Tutto questo funziona bene ma siamo limitati all'uso di pulsanti per i comandi e per immissione dati necessita utilizzare la riga immissione testo, poco pratica. Pensavamo di acquistare uno spazio in rete ma non abbiamo abbastanza conoscenze per quanto riguarda la sicurezza. Chiediamo consigli su come procedere. Grazie Il giorno dom 2 mag 2021 alle ore 19:15 giorgio boiero via SLiP < slip@liszt.softwareliberopinerolo.org> ha scritto:
Ciao Durante gli incontri del Sabato spesso ci chiediamo se fosse possibile installare un server IoT da usare con i nostri progetto Arduino, Raspberry, etc... Per il momento abbiamo attivato alcuni server nelle nostre reti locali domestiche per usare MQTT (mosqitto), NodeRed, Influxdb, Graphana, etc.. tramite container Docker Ci piacerebbe approfondire con chi è più esperto di noi di cybersecurity (Davide, Lucio, Alessandro, Luca) se e come fosse possibile poter accedere in sicurezza a questi server e servizi dall'esterno della propria rete domestica Come configurare il port forwarding dei nostri router, installare un VPN ed utilizzarla (tipo lo script di Lucio per Wireguard) , etc.. o se sarebbe meglio far girare il server e i containers in un VPS remota, etc... Penso sia un argomento che potrebbe interessare a più persone di Slip a parte il gruppo Arduino
Grazie Giorgio -- SLiP mailing list SLiP@liszt.softwareliberopinerolo.org https://liszt.softwareliberopinerolo.org/listinfo/slip
Il 04/05/21 16:59, carlo b via SLiP ha scritto:
Noi del gruppo arduino utilizziamo telegram per i nostri progetti verso internet.
Qui ho bisogno di qualche dettaglio in più per capire. Come si realizza la comunicazione remota fra l'hardware e l'utente? Io mi immagino, ma magari mi sbaglio, che l'hardware di turno abbia un software in esecuzione che parla periodicamente (per esempio ogni tot secondi) ad un bot di Telegram, giusto? Immagino poi che questo bot di Telegram sia l'interfaccia con cui l'utente visualizza lo stato dei sensori ed invia comandi attraverso pulsanti o caselle di testo, giusto? Ed immagino infine che tale bot di Telegram richieda un'autenticazione tipo utente/password o sia in qualche altro modo strettamente legato all'utente, in modo che solo il proprietario dell'hardware possa vedere ed interagire da remoto, giusto? Se fin qui è tutto giusto e se la strada di Telegram (versione ufficiale) è quella che continuerete a seguire, temo che ci sia poco che si possa fare per migliorare la sicurezza, in quanto il server ufficiale di Telegram non è software libero e non è possibile installarsi un proprio server ufficiale di Telegram (in gergo, Telegram non è un sistema federato). Detto questo, a seconda dei casi, potrebbe non essere neppure così necessario aumentare la sicurezza della soluzione.
Lettura sensori e controlli vari. Tutto questo funziona bene ma siamo limitati all'uso di pulsanti per i comandi e per immissione dati necessita utilizzare la riga immissione testo, poco pratica.
Che tipo di interfaccia ti piacerebbe avere in alternativa all'immissione del testo per inviare dati?
Pensavamo di acquistare uno spazio in rete ma non abbiamo abbastanza conoscenze per quanto riguarda la sicurezza.
Qualsiasi VPS è sufficientemente sicuro per questo tipo di utlizzo, nella misura in cui non ci si metta a controllare da remoto l'attivazione dell'antifurto di casa o cose del genere. La parte eventualmente poco sicura non è tanto il server che si va ad acquistare, quanto le applicazioni che poi ci si installano. Il 02/05/21 19:14, giorgio boiero via SLiP ha scritto:
Per il momento abbiamo attivato alcuni server nelle nostre reti locali Ci piacerebbe approfondire con chi è più esperto di noi di cybersecurity (Davide, Lucio, Alessandro, Luca) se e come fosse possibile poter accedere in sicurezza a questi server e servizi dall'esterno della propria rete domestica Come configurare il port forwarding dei nostri router, installare un VPN ed utilizzarla (tipo lo script di Lucio per Wireguard)
Sì, in questo caso (cioè senza usare Telegram ufficiale) una VPN con Wireguard è sicuramente una soluzione che offre tutta la sicurezza di cui avete bisogno, almeno dal punto di vista della connettività. Certo che se poi si installa Wireguard sul cellulare, ma si lascia il cellulare sbloccato ed incustodito sul tavolino del bar, non c'è VPN che tenga. Come sempre il fattore umano è l'anello più debole della catena.
etc.. o se sarebbe meglio far girare il server e i containers in un VPS remota,
Dal punto di vista della sicurezza assolutamente no: un VPS, una volta che ci installi istanze docker con tutta quella roba che hai citato, è sicuro quanto una prostituta a spasso nel Bronx. La soluzione più sicura è avere un server in rete locale (cioè a casa) ed accedervi via VPN, senza aprire alcuna porta sul router, tranne quella per far funzionare la VPN (di default la 12345/udp nello script che ho fatto). A questo va aggiunto un servizio di DNS dinamico, in modo che il riavvio del router e relativo cambio di indirizzo IP pubblico non creino problemi. Essendo la sicurezza l'argomento di questo thread, direi che anche il router sarebbe da tenere aggiornato e suggerisco di avere un router su cui si possa installare un firmware libero, in modo da essere più tranquillo della disponibilità di tempestivi aggiornamenti di sicurezza (io per esempio uso un Asus RT-AC51U).
Grazie Il mer 5 mag 2021, 11:08 Lucio Crusca via SLiP < slip@liszt.softwareliberopinerolo.org> ha scritto:
Il 04/05/21 16:59, carlo b via SLiP ha scritto:
Noi del gruppo arduino utilizziamo telegram per i nostri progetti verso internet.
Qui ho bisogno di qualche dettaglio in più per capire. Come si realizza la comunicazione remota fra l'hardware e l'utente? Io mi immagino, ma magari mi sbaglio, che l'hardware di turno abbia un software in esecuzione che parla periodicamente (per esempio ogni tot secondi) ad un bot di Telegram, giusto?
Immagino poi che questo bot di Telegram sia l'interfaccia con cui l'utente visualizza lo stato dei sensori ed invia comandi attraverso pulsanti o caselle di testo, giusto?
Ed immagino infine che tale bot di Telegram richieda un'autenticazione tipo utente/password o sia in qualche altro modo strettamente legato all'utente, in modo che solo il proprietario dell'hardware possa vedere ed interagire da remoto, giusto?
Se fin qui è tutto giusto e se la strada di Telegram (versione ufficiale) è quella che continuerete a seguire, temo che ci sia poco che si possa fare per migliorare la sicurezza, in quanto il server ufficiale di Telegram non è software libero e non è possibile installarsi un proprio server ufficiale di Telegram (in gergo, Telegram non è un sistema federato).
Detto questo, a seconda dei casi, potrebbe non essere neppure così necessario aumentare la sicurezza della soluzione.
Lettura sensori e controlli vari. Tutto questo funziona bene ma siamo limitati all'uso di pulsanti per i comandi e per immissione dati necessita utilizzare la riga immissione testo, poco pratica.
Che tipo di interfaccia ti piacerebbe avere in alternativa all'immissione del testo per inviare dati?
Pensavamo di acquistare uno spazio in rete ma non abbiamo abbastanza conoscenze per quanto riguarda la sicurezza.
Qualsiasi VPS è sufficientemente sicuro per questo tipo di utlizzo, nella misura in cui non ci si metta a controllare da remoto l'attivazione dell'antifurto di casa o cose del genere.
La parte eventualmente poco sicura non è tanto il server che si va ad acquistare, quanto le applicazioni che poi ci si installano.
Il 02/05/21 19:14, giorgio boiero via SLiP ha scritto:
Per il momento abbiamo attivato alcuni server nelle nostre reti locali Ci piacerebbe approfondire con chi è più esperto di noi di cybersecurity (Davide, Lucio, Alessandro, Luca) se e come fosse possibile poter accedere in sicurezza a questi server e servizi dall'esterno della propria rete domestica Come configurare il port forwarding dei nostri router, installare un VPN ed utilizzarla (tipo lo script di Lucio per Wireguard)
Sì, in questo caso (cioè senza usare Telegram ufficiale) una VPN con Wireguard è sicuramente una soluzione che offre tutta la sicurezza di cui avete bisogno, almeno dal punto di vista della connettività.
Certo che se poi si installa Wireguard sul cellulare, ma si lascia il cellulare sbloccato ed incustodito sul tavolino del bar, non c'è VPN che tenga. Come sempre il fattore umano è l'anello più debole della catena.
etc.. o se sarebbe meglio far girare il server e i containers in un VPS remota,
Dal punto di vista della sicurezza assolutamente no: un VPS, una volta che ci installi istanze docker con tutta quella roba che hai citato, è sicuro quanto una prostituta a spasso nel Bronx.
La soluzione più sicura è avere un server in rete locale (cioè a casa) ed accedervi via VPN, senza aprire alcuna porta sul router, tranne quella per far funzionare la VPN (di default la 12345/udp nello script che ho fatto). A questo va aggiunto un servizio di DNS dinamico, in modo che il riavvio del router e relativo cambio di indirizzo IP pubblico non creino problemi. Essendo la sicurezza l'argomento di questo thread, direi che anche il router sarebbe da tenere aggiornato e suggerisco di avere un router su cui si possa installare un firmware libero, in modo da essere più tranquillo della disponibilità di tempestivi aggiornamenti di sicurezza (io per esempio uso un Asus RT-AC51U). -- SLiP mailing list SLiP@liszt.softwareliberopinerolo.org https://liszt.softwareliberopinerolo.org/listinfo/slip
Ciao Lucio Grazie dei tuoi consigli Di seguito trovi le mie risposte Ti aggiungo qualche altro dettaglio Noi per il momento usiamo questo sistema IOT basato su Docker per semplicità di configurazione ma ho dei dubbi sulla sicurezza del sistema: https://sensorsiot.github.io/IOTstack/ Il sistema gira o su un RapsberryPi 3 o 4 (meglio con SSD) o su un X86 (io uso Debian) La VPN (Wireguard) deve essere installata su questo server oppure sul Router con firmware open source? Si potrebbe approfondire questo argomento sulla cybersecurity in un "virtual-incontro" Slip Gio Il 04/05/21 16:59, carlo b via SLiP ha scritto:
Noi del gruppo arduino utilizziamo telegram per i nostri progetti verso internet.
Qui ho bisogno di qualche dettaglio in più per capire. Come si realizza la comunicazione remota fra l'hardware e l'utente? Io mi immagino, ma magari mi sbaglio, che l'hardware di turno abbia un software in esecuzione che parla periodicamente (per esempio ogni tot secondi) ad un bot di Telegram, giusto? GB=> Nell'Arduino (un ESP nel dettaglio, cioè un microcontrollore con il Wifi integrato) è eseguito il codice che fa funzione il Bot Telegram Quel codice usa le API dei Bot Telegram Immagino poi che questo bot di Telegram sia l'interfaccia con cui l'utente visualizza lo stato dei sensori ed invia comandi attraverso pulsanti o caselle di testo, giusto? GB=> Si esatto Ed immagino infine che tale bot di Telegram richieda un'autenticazione tipo utente/password o sia in qualche altro modo strettamente legato all'utente, in modo che solo il proprietario dell'hardware possa vedere ed interagire da remoto, giusto? GB=> E' possibile implementare queste sicurezze all'interno del codice Non si usa utente e password ma si identifica il ID dell'utente Se fin qui è tutto giusto e se la strada di Telegram (versione ufficiale) è quella che continuerete a seguire, temo che ci sia poco che si possa fare per migliorare la sicurezza, in quanto il server ufficiale di Telegram non è software libero e non è possibile installarsi un proprio server ufficiale di Telegram (in gergo, Telegram non è un sistema federato). Detto questo, a seconda dei casi, potrebbe non essere neppure così necessario aumentare la sicurezza della soluzione. GB=> Esatto, Telegram va bene, sia in termini di semplicità che sicurezza E' però limitato nell'interfaccia utente, essendo fatto per una chat e non per una Dashboard
Lettura sensori e controlli vari. Tutto questo funziona bene ma siamo limitati all'uso di pulsanti per i comandi e per immissione dati necessita utilizzare la riga immissione testo, poco pratica.
Che tipo di interfaccia ti piacerebbe avere in alternativa all'immissione del testo per inviare dati? GB=> Si pensava ad un interfaccia grafica tipo quelle delle App dei vari dispositivi IOT commerciali. Pensi siano sviluppate come Web APP che si appoggiano sul server del produttore
Pensavamo di acquistare uno spazio in rete ma non abbiamo abbastanza conoscenze per quanto riguarda la sicurezza.
Qualsiasi VPS è sufficientemente sicuro per questo tipo di utlizzo, nella misura in cui non ci si metta a controllare da remoto l'attivazione dell'antifurto di casa o cose del genere. La parte eventualmente poco sicura non è tanto il server che si va ad acquistare, quanto le applicazioni che poi ci si installano. GB=> Il nostro timore è che la configurazione errata delle varie applicazioni IOT (MQTT Broker, Node Red, Influxdb, Grafana, etc...) porti all'akeraggio della VPS con tutti i problemi che ne conseguono Il 02/05/21 19:14, giorgio boiero via SLiP ha scritto:
Per il momento abbiamo attivato alcuni server nelle nostre reti locali Ci piacerebbe approfondire con chi è più esperto di noi di cybersecurity (Davide, Lucio, Alessandro, Luca) se e come fosse possibile poter accedere in sicurezza a questi server e servizi dall'esterno della propria rete domestica Come configurare il port forwarding dei nostri router, installare un VPN ed utilizzarla (tipo lo script di Lucio per Wireguard)
Sì, in questo caso (cioè senza usare Telegram ufficiale) una VPN con Wireguard è sicuramente una soluzione che offre tutta la sicurezza di cui avete bisogno, almeno dal punto di vista della connettività. Certo che se poi si installa Wireguard sul cellulare, ma si lascia il cellulare sbloccato ed incustodito sul tavolino del bar, non c'è VPN che tenga. Come sempre il fattore umano è l'anello più debole della catena. GB=> Se capisco bene la soluzione migliore è installare la VPN (Wireguard) in modo che da remoto ci si collega direttamente al server domestico evitando di esporre le applicazioni IOT direttamente a Internet
etc.. o se sarebbe meglio far girare il server e i containers in un VPS remota,
Dal punto di vista della sicurezza assolutamente no: un VPS, una volta che ci installi istanze docker con tutta quella roba che hai citato, è sicuro quanto una prostituta a spasso nel Bronx. La soluzione più sicura è avere un server in rete locale (cioè a casa) ed accedervi via VPN, senza aprire alcuna porta sul router, tranne quella per far funzionare la VPN (di default la 12345/udp nello script che ho fatto). A questo va aggiunto un servizio di DNS dinamico, in modo che il riavvio del router e relativo cambio di indirizzo IP pubblico non creino problemi. GB=> OK come sopra Essendo la sicurezza l'argomento di questo thread, direi che anche il router sarebbe da tenere aggiornato e suggerisco di avere un router su cui si possa installare un firmware libero, in modo da essere più tranquillo della disponibilità di tempestivi aggiornamenti di sicurezza (io per esempio uso un Asus RT-AC51U). GB=> Usi openwrt sul Asus? Marche di router che consigli a parte Asus? Molti usano Fritzbox, ma non so se si può cambiare il firmware con uno libero
Il 05/05/21 21:03, giorgio boiero via SLiP ha scritto:
Esatto, Telegram va bene, sia in termini di semplicità che sicurezza E' però limitato nell'interfaccia utente, essendo fatto per una chat e non per una Dashboard
Ah ok, ora è chiaro il perché cercate una soluzione diversa, grazie.
Il nostro timore è che la configurazione errata delle varie applicazioni IOT (MQTT Broker, Node Red, Influxdb, Grafana, etc...) porti all'akeraggio della VPS con tutti i problemi che ne conseguono
Sì, è esattamente questa la cosa che deve preoccuparvi, non tanto il VPS in sé, quanto la configurazione dei vari software che poi ci installate.
Se capisco bene la soluzione migliore è installare la VPN (Wireguard) in modo che da remoto ci si collega direttamente al server domestico evitando di esporre le applicazioni IOT direttamente a Internet
Confermo, hai capito bene.
Usi openwrt sul Asus?
Sì.
Marche di router che consigli a parte Asus?
Non ho mai avuto router di altre marche, quindi non saprei dirti.
Molti usano Fritzbox, ma non so se si può cambiare il firmware con uno libero
Pare di sì, almeno un modello particolare di Fritzbox: https://openwrt.org/toh/avm/avm_fritz_box_7530
La VPN (Wireguard) deve essere installata su questo server oppure sul Router con firmware open source?
Entrambe le soluzioni sono possibili, ma di certo installare roba extra su un normale server è più comodo e versatile che installarla nel firmware di un router. Inoltre, avendo WireGuard sul server, ti risparmi tutti i problemi di configurazione del routing della VPN, dato che l'endpoint della VPN sarebbe lo stesso server su cui ci sono i software che ti interessa raggiungere da remoto. Sul router dovresti solo aprire la porta 12345/udp verso l'indirizzo IP di rete locale del server.
Ciao Lucio Per installare Wireguard basta usare il tuo script https://gitlab.com/lucrus/add-wireguard-host o dobbiamo prima installare Wireguard? Pensi che lo script funzioni anche sui RaspberryPI che sono basati su CPU ARM e usano come OS Debian? Il giorno gio 6 mag 2021 alle ore 00:11 Lucio Crusca <lucio@sulweb.org> ha scritto:
Il 05/05/21 21:03, giorgio boiero via SLiP ha scritto:
Esatto, Telegram va bene, sia in termini di semplicità che sicurezza E' però limitato nell'interfaccia utente, essendo fatto per una chat e non per una Dashboard
Ah ok, ora è chiaro il perché cercate una soluzione diversa, grazie.
Il nostro timore è che la configurazione errata delle varie applicazioni IOT (MQTT Broker, Node Red, Influxdb, Grafana, etc...) porti all'akeraggio della VPS con tutti i problemi che ne conseguono
Sì, è esattamente questa la cosa che deve preoccuparvi, non tanto il VPS in sé, quanto la configurazione dei vari software che poi ci installate.
Se capisco bene la soluzione migliore è installare la VPN (Wireguard) in modo che da remoto ci si collega direttamente al server domestico evitando di esporre le applicazioni IOT direttamente a Internet
Confermo, hai capito bene.
Usi openwrt sul Asus?
Sì.
Marche di router che consigli a parte Asus?
Non ho mai avuto router di altre marche, quindi non saprei dirti.
Molti usano Fritzbox, ma non so se si può cambiare il firmware con uno libero
Pare di sì, almeno un modello particolare di Fritzbox: https://openwrt.org/toh/avm/avm_fritz_box_7530
La VPN (Wireguard) deve essere installata su questo server oppure sul
Router con firmware open source?
Entrambe le soluzioni sono possibili, ma di certo installare roba extra su un normale server è più comodo e versatile che installarla nel firmware di un router. Inoltre, avendo WireGuard sul server, ti risparmi tutti i problemi di configurazione del routing della VPN, dato che l'endpoint della VPN sarebbe lo stesso server su cui ci sono i software che ti interessa raggiungere da remoto. Sul router dovresti solo aprire la porta 12345/udp verso l'indirizzo IP di rete locale del server.
-- Giorgio Boiero
Il 09/05/21 20:34, giorgio boiero via SLiP ha scritto:
Ciao Lucio Per installare Wireguard basta usare il tuo script https://gitlab.com/lucrus/add-wireguard-host <https://gitlab.com/lucrus/add-wireguard-host> o dobbiamo prima installare Wireguard?
Lo script funziona indipendentemente da WireGuard, e puoi usarlo dove vuoi, anche su un computer che non è quello su cui poi installerai WireGuard: generi i files dove vuoi e poi li copi a mano sul sistema dove vuoi mettere WireGuard. Se però hai tutto il necessario per eseguire lo script direttamente sul computer dove installerai WireGuard, è sicuramente tutto più comodo, in quanto in quel caso ti genera già i files nella posizione corretta per Wireguard (se lo esegui come utente root). Per lo script è sufficiente che ci sia il comando "wg" installato (su Debian e derivate è incluso nel pacchetto "wireguard-tools") ed altri comandi di shell che su un sistema server o desktop GNU/Linux normalmente ci sono (bash, cat, cut, grep, sed, tee). Non so però dirti se questi comandi ci siano normalmente su Raspberry Pi OS (ex Raspbian), perché, pur essendo derivato da Debian, è pensato per soluzioni embedded e quindi di certo molte cose non ritenute essenziali dagli sviluppatori potrebbero mancare. Tieni anche conto che, per installare comodamente wireguard, potrebbe essere necessario un kernel di Linux versione 5.6 o più recente: la versione più recente di Raspberry Pi OS usa il 5.10 quindi va bene da questo punto di vista, ma non so dirti cosa usassero le versioni precedenti.
Pensi che lo script funzioni anche sui RaspberryPI che sono basati su CPU ARM e usano come OS Debian?
Lo script è indipendente dall'hardware: se su quell'hardware funziona Debian, allora funziona anche lo script. Il problema semmai, come dicevo sopra, potrebbe essere la disponibilità di wireguard stesso per quel sistema, cosa che non ho verificato.
partecipanti (3)
-
carlo b -
giorgio boiero -
Lucio Crusca