Privacy, sicurezza, riservatezza dei dati, certificati digitali… quante volte oggi sentiamo queste parole nei discorsi lanciati come monito dai vari esperti di sicurezza informatica che ci avvisano (e non a torto) di quanto sia diventata pericolosa e piena di insidie la navigazione nella rete delle reti.
Non è certamente un argomento da prendere alla leggera, ma non mi dilungherò qui in argomentazioni che invece meritano il giusto spazio. Vi basti sapere che in molti oggi si stanno sensibilizzando e ponendo il problema e in molti suggeriscono svariate soluzioni per rendere quanto più complicata possibile la vita degli spioni.
La combinazione VPN + TOR
Una delle possibili è l’uso combinato di una VPN abbinata al famoso browser TOR. Esula da questo articolo spiegarvi i vantaggi della combinazione, ma invito i più curiosi che non conoscono TOR a una sana lettura su wikipedia.
Abbiamo invece già parlato di VPN, in particolare di quelle “fatte in casa”, ma in questo caso mi riferisco a quelle offerte da provider dedicati (i migliori sono ExpressVPN, CyberGhost, ZenMate, NordVPN, ma ne esistono anche molti altri). Sono servizi a pagamento che fortunatamente costano molto poco, nell’ordine di alcuni euro al mese, funzionano molto bene e ci offrono la possibilità di nascondere tutto il nostro traffico dati fino al punto di uscita su internet. Se per di più questo provider garantisce la totale non archiviazione di log generati dai loro clienti ecco che ci troviamo nella situazione di essere dei “signor nessuno” che navigano in rete con un ip geograficamente localizzato anche molto distante da noi. Se a questo aggiungiamo anche l’uso di TOR browser allora il cerchio si chiude e azzeriamo anche le tracce lasciate dal nostro classico browser.
I vari provider VPN, oltre ai loro servizi, offrono quasi sempre un’applicazione per PC, MAC, telefonini e tablet iOS e Android oltre che per altri dispositivi come router e sistemi Linux. Questo software permette a ciascun dispositivo di navigare autonomamente in internet cifrando la propria connessione. I provider VPN pubblicizzano anche la simultaneità di connessioni da diversi dispositivi ma fino a un numero massimo.
Tutto questo è molto comodo se mi trovo fuori casa o su una rete WiFi pubblica o di un albergo, ma se sono in casa e navigo su internet con un mio router a cui tutti i miei dispositivi sono collegati usando WiFi o cavo Ethernet risulta evidentemente alquanto scomodo dover installare su ciascuno il software per la navigazione in VPN e poi ricordarmi ogni volta di avviarlo.
Fortunatamente il provider stesso fornisce indicazioni su come configurare il proprio router di casa in modo che tutti i dispositivi a lui collegati possano navigare in VPN, ma questo funziona solo se il firmware del router offre la possibilità di farlo.
Come configurare il Security Gateway di Ubiquiti
Per chi invece ha optato a realizzare una rete privata usando elementi dedicati indipendenti come quelli di Ubiquiti, probabilmente sarà in possesso do un Router UniFi o di un Security Gateway UniFi che tramite il software di configurazione attualmente disponibile (l’UniFi Network Controller) può solo creare connessioni client su VPN di tipo PPTP che purtroppo sono alquanto poco sicure. Sebbene molti provider VPN offrano anche questo tipo di connessione e quindi sia possibile instaurarla nel router, è consigliabile non farlo. Finché Ubiquiti non deciderà di aggiornare la propria interfaccia di configurazione consentendo la creazione di configurazioni VPN più affidabili l’unica possibilità che ci rimane è quella di procedere manualmente.
Fortunatamente tutti i prodotti UniFi montano un sistema operativo chiamato EdgeOS accessibile tramite SSH dall’utente amministrativo del dispositivo (configurato in fase di installazione, ma modificabile anche con l’UniFi Network Controller).
E’ un sistema piuttosto semplice, che basa tutta la sua operatività su un semplice file di configurazione: /config/config.boot
EdgeOS lavora in due modalità: operativa e di configurazione. Quando accediamo al sistema
#> ssh <username>@<hostname>
entriamo nella modalità operativa e premendo il ? (punto di domanda) ci viene data la lista dei comandi disponibili. Il comando show è certamente il più utile perché ci fornisce la situazione operativa delle varie parti del dispositivo. Se digitiamo
ubnt@ubnt# show ?
ci viene data la lista delle componenti configurate e che possiamo consultare. Per esempio con il comando
ubnt@ubnt# show interfaces
ci viene mostrata la situazione delle interfacce di rete.
Il file di configurazione /config/config.boot non deve essere modificato manualmente (anche se è possibile farlo, e questo è utile ad es. per ripristinare un backup), ma nell’apposita modalità di configurazione nella quale è possibile verificare che le nostre modifiche abbiano sortito il giusto effetto prima di renderle permanenti.
Per entrare in modalità configurazione si usa da solo il comando configure.
ubnt@ubnt# configure
EdgeOS lavora usando tre tipi di configurazione:
- Operativa: Ogni modifica apportata in modalità configurazione entra in questo stato e rimane pronta per essere attivata.
- Attiva: Quando le modifiche vengono confermate diventano attive e agiscono sul funzionamento del sistema.
- Boot: Quando le modifiche attive vengono salvate rimangono permanenti anche al successivo riavvio.
Per agire sulla configurazione operativa si usano i comandi
- set: setta una specifica regola di configurazione, se seguito dal ? (punto di domanda) ci da la lista dei comandi disponibili per settare un certo componente del router
- delete: cancella una specifica regola di configurazione, se seguito dal ? (punto di domanda) ci da la lista di ciò che è stato configurato
- show: mostra una specifica regola di configurazione, se seguito dal ? (punto di domanda) ci da la lista dei settaggi che possiamo cancellare
E’ importante precisare che il file di configurazione archivia le informazioni in maniera gerarchica e quindi per accedere ai nodi più interni tramite i comandi di configurazione è necessario indicare tutti i nodi parenti di grado superiore.
Esempio di porzione di file config.boot:
... interfaces { ethernet eth0 { address dhcp description WAN } } ...
Se voglio cambiare il nome dell’interfaccia eth0 dovrò puntarla in forma completa in questo modo (usando il ? dopo ogni parola del comando avrò il suggerimento di quale usare come successivo)
ubnt@ubnt# set interfaces ethernet eth0 description 'Rete WAN'
Terminato il settaggio della configurazione operativa, posso confrontarla con quella attiva per vedere quali differenze sono state apportate usando il comando
ubnt@ubnt# compare [edit interfaces ethernet eth0] >description "Rete WAN" [edit]
mentre per renderla pienamente funzionante dovrò dare il comando
ubnt@ubnt# commit
In questa fase in caso di errori verrò avvisato dal sistema, il commit verrà interrotto, le modifiche non diventeranno attive e potrò quindi apportare le necessarie correzioni
Se invece tutto è andato a buon fine la configurazione diverrà attiva e potrò decidere se salvarla per i successivi riavvii
ubnt@ubnt# save
e poi uscire dalla configurazione, oppure uscire senza salvarla ma mantenendola attiva fino al successivo riavvio
ubnt@ubnt# exit
Se invece voglio uscire dalla configurazione scartando le modifiche fin’ora apportate dovrò specificarlo eseguendo questo comando al posto di save
ubnt@ubnt# exit discard
Come configuro la VPN su EdgeOS?
Premesso il funzionamento di base di EdgeOS torniamo ora a come configurare manualmente una VPN. Abbiamo visto che l’UniFi Network Controller permette solo di settare client VPN di tipo PPTP, ma EdgeOS ha pieno supporto per le OpenVPN, quindi, siccome sono anche più sicure, ne configureremo una.
Prima di iniziare facciamoci una copia di backup della configurazione del nostro EdgeRouter o Security Gateway, possiamo usare putty oppure scp per copiare in locale il file config.boot
#> scp <username>@<hostname>:/config/config.boot ./
Ora scarichiamo dalla nostra area riservata del provider VPN il file di configurazione per la connessione in OpenVPN e recuperiamo le relative credenziali (username e password), poi entriamo nel nostro EdgeRouter o Security Gateway e andiamo nella cartella user-data:
#> ssh <username>@<hostname> ubnt@ubnt# cd /config/user-data
Usando vim creiamo un file dal nome openvpnauth.txt
ubnt@ubnt# vi openvpnauth.txt
e scriviamo nella prima riga lo username e nella seconda la password della nostra configurazione OpenVPN
username password
Poi copiamo nella cartella /config/user-data il file .ovpn di configurazione che abbiamo scaricato in precedenza (supponiamo si chiami openvpn.ovpn). Per farlo possiamo usare tranquillamente un client ssh come putty oppure la riga di comando via scp
#> scp openvpn.ovpn <username>@<hostname>:/config/user-data
Ora modifichiamo con vim il file copiato
ubnt@ubnt:/config/user-data# vi openvpn.ovpn
e verifichiamo che contenga le direttive di connessione, le chiavi e i certificati (in teoria questi dovrebbero già esserci, altrimenti andrebbero scaricati a parte dalla solita area del nostro profilo del provider VPN e il contenuto copiato e incollato a mano nel file in calce alle direttive di connessione).
Vanno quindi aggiunti questi altri due comandi di configurazione subito dopo quelle già presenti
auth-user-pass /config/user-data/openvpnauth.txt route-nopull
Il file assomiglierà a qualcosa del tipo
client dev tun proto udp remote <ip_o_hostname_del_server_del_proveder_vpn> <porta> resolv-retry infinite remote-random nobind tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 persist-key persist-tun ping 15 ping-restart 0 ping-timer-rem reneg-sec 0 comp-lzo no remote-cert-tls server verb 3 pull fast-io cipher AES-256-CBC auth SHA512 key-direction 1 auth-user-pass /config/user-data/openvpnauth.txt route-nopull <ca> -----BEGIN CERTIFICATE----- MIIFCjCCAvKgAwIBAgIBATANBgkqhkiG9w0BAQ0FADA5MQswCQYDVQQGEwJQQTEQ .... tutto il certificato ... PApL8PytggYKeQmRhl499+6jLxcZ2IegLfqq41dzIjwHwTMplg+1pKIOVojpWA== -----END CERTIFICATE----- </ca> <tls-auth> # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- e685bdaf659a25a200e2b9e39e51ff03 ... tutta la chiave ... 3f8a56ddb2e64eb67adfc9b337157ff4 -----END OpenVPN Static key V1----- </tls-auth>
Abbiamo quasi finito.
Ora dobbiamo configurare EdgeOS, dirgli di attivare la VPN e instradare tutto il traffico della nostra rete verso il tunnel.
Entriamo in configurazione
ubnt@ubnt# configure
creiamo una nuova interfaccia (la vtun0) dando in sequenza questi comandi
set interfaces openvpn vtun0 config-file /config/user-data/openvpn.ovpn set interfaces openvpn vtun0 description 'OpenVPN VPN tunnel' commit
creiamo una regola per il mascheramento della rete locale.
set service nat rule 5000 description 'OpenVPN Clients' set service nat rule 5000 log disable set service nat rule 5000 outbound-interface vtun0 set service nat rule 5000 source group network-group corporate_network set service nat rule 5000 type masquerade commit
Attenzione alla regola
set service nat rule 5000 source group network-group corporate_network
questa usa un nome (network-group) che in teoria è preconfezionato nella configurazione config.boot e contiene gli ip della rete locale. In caso è possibile essere più specifici e creare una regola esplicitando gli ip come in questo esempio
set service nat rule 5000 source address 192.168.1.0/24
Ora non ci rimane che instradare tutto il traffico 0.0.0.0/0 verso la VPN
set protocols static table 1 interface-route 0.0.0.0/0 next-hop-interface vtun0 set firewall modify SOURCE_ROUTE rule 10 description 'traffic from network-group corporate_network to vtun0' set firewall modify SOURCE_ROUTE rule 10 source group network-group corporate_network set firewall modify SOURCE_ROUTE rule 10 modify table 1 set interfaces ethernet eth1 firewall in modify SOURCE_ROUTE commit
Alcune precisazioni
- Anche qui le due regole
set firewall modify SOURCE_ROUTE rule 10 description 'traffic from network-group corporate_network to vtun0' set firewall modify SOURCE_ROUTE rule 10 source group network-group corporate_network
- possono fare riferimento a IP specifici e non a quelli predefiniti, quindi possono diventare ad esempio
set firewall modify SOURCE_ROUTE rule 10 description 'traffic from 192.168.1.0/24 to vtun0' set firewall modify SOURCE_ROUTE rule 10 source address 192.168.1.0/24
- La regola
set interfaces ethernet eth1 firewall in modify SOURCE_ROUTE
fa riferimento all’interfaccia della rete locale. I vari dispositivi Ubiquiti possono definirla in modo differente a seconda del loro hardware, come ad esempio
set interfaces switch switch0 firewall in modify SOURCE_ROUTE
Ora, se il commit non ha dato errori, posso salvare la configurazione
ubnt@ubnt# save
e verificare che la VPN sia operativa visualizzando il log
ubnt@ubnt# run show log
Se scorrendolo trovo “initialization sequence completed” è tutto OK, posso uscire dalla configurazione
ubnt@ubnt# exit
A questo punto la VPN è attiva e funzionante e tutta la rete locale definita nelle regole può sfruttarla.
Come disattivo / disinstallo la VPN?
Per completezza vediamo sia le operazioni per disattivare la VPN senza rimuovere le regole che quelle per la rimozione completa.
Disattivazione
configure set interfaces openvpn vtun0 disable commit save exit
Riattivazione
configure delete interfaces openvpn vtun0 disable commit save
Disinstallazione, rimozione completa delle regole
configure set interfaces ethernet eth1 firewall in modify LOAD_BALANCE commit delete firewall modify SOURCE_ROUTE delete protocols commit delete service nat rule 5000 delete interfaces openvpn vtun0 commit save
Attenzione a
set interfaces ethernet eth1 firewall in modify LOAD_BALANCE
come spiegato prima, l’interfaccia cambia a seconda del dispositivo e potrebbe non essere ethernet eth1, e neppure la regola del firewall da riapplicare potrebbe essere LOAD_BALANCE. Si consiglia di andare nel file di backup e leggere quale era la configurazione originale adeguando il comando di conseguenza.