Mettere in sicurezza la rete di casa

Contattato da diverse persone, ho deciso di pubblicare alcuni appunti che – nel tempo – hanno costituito un argomento più volte condiviso con numerosi internauti ovvero come mettere in sicurezza la propria rete di casa, soprattutto quella parte di rete che espone i vostri documenti personali (files, fotografie, video ecc…) ai vari device collegati all’interno delle vostre mura domestiche.

La configurazione di rete che numerose famiglie si ritrovano in casa senza nemmeno saperlo, la si può riassumere con la figura seguente:

Tipicamente il modem ADSL (quello che in figura è schematizzato dal cilindro con le quattro frecce) è un dispositivo offerto in comodato d’uso dalla compagnia di telefonia. Attraverso di esso il servizio voce può essere veicolato sia in maniera tradizionale (usando uno splitter che separa il canale voce da quello dati) oppure sfruttando il medesimo canale dati (in questo caso di parla di Voice-over-IP, ovvero VoIP).

Ma passiamo all’argomento di nostro interesse: quanto è sicura la rete LAN alla quale colleghiamo i nostri dispositivi di casa? Quanto è possibile, dal mondo esterno, arrivare ai nostri documenti privati? La risposta non è semplice ma come primo tentativo si può certamente rispondere dicendo che dipende da come è configurato il modem ADSL.

Ora, non tutti forse sanno che i modem di alcune compagnie non sono configurabili a piacimento: ci sono alcune parametrizzazioni fissate “di fabbrica”, che non permettono all’utente – anche al più esperto – di configurare al meglio il proprio device. Non solo: non sempre questi dispositivi offrono il massimo della sicurezza. Un tipico esempio, seppur banale, è quello della Vodafone Station la cui password di rete (WPA2) può essere visualizzata in chiaro con una rapida sequenza di tasti eseguibile direttamente sul dispositivo. Per non parlare di chi, agli amici che lo vengono a trovare, comunica a voce la password di rete per poter condividere la connettività Internet. E via dicendo…

Insomma, ci poniamo questa domanda: è possibile creare una seconda rete più sicura all’interno di quella attualmente presente in casa? Una rete accedibile solo da alcuni dispositivi autorizzati e ben configurati? Una rete all’interno della quale i nostri documenti più preziosi sono al sicuro da attacchi esterni? Pur confidando nella buona fede dei vostri amici appena tornati dalle vacanze, con laptop alla mano per farvi vedere le loro fotografie, è possibile lasciarli collegare alla vostra WiFi senza il rischio che un virus possa cancellare i vostri dati più preziosi? La risposta è sì. Lo schema che segue ne rappresenta una configurazione minimale e funzionante:

Come prima cosa bisogna procurarsi un piccolo firewall/router (in colore blu nello schema), ovvero un dispositivo che possiede almeno 2 porte fisiche e che avrà il compito di separare la nuova rete “sicura” da quella esistente. Di questi dispositivi ce ne sono parecchi in Internet: con poche decine di euro si riescono a trovare soluzioni di buona qualità, anche con la componente wireless integrata (che vi permetterà di accedere via WiFi alla rete sicura).

Successivamente questo dispositivo andrà opportunamente configurato di modo che possa “vedere” le due sottoreti separatamente e, mediante le proprie regole interne, poter decidere quale traffico far passare e quale no. Una configurazione di esempio di questo dispositivo, considerando che il modem ADSL mappi la sottorete 192.168.0.0./24, è la seguente:

IP porta WAN:  192.168.0.2/24 (se modem ADSL su 192.168.0.1)
IP porta LAN:  192.168.1.1/24
DHCP:          attivo sul range 192.168.1.2-100
Gateway:       192.168.0.1
Primary DNS:   192.168.0.1
Secondary DNS: n/d

Nel caso in cui il modem ADSL avesse il DHCP attivato, l’indirizzo IP della porta WAN non dovrà andare in conflitto con il range di assegnazione degli IP: in taluni casi è opportuno fissare come 192.168.0.254.

La configurazione minimale è completata, anche perchè – in genere – i firewall/router possiedono già una configurazione standard sicura (nulla toglie, tuttavia, di mettere mano ad alcuni parametri).

A questo punto sarete voi a decidere a quale rete collegare i vostri dispositivi. Tipicamente i telefonini, i tablet e i device degli amici potranno continuare a collegarsi al WiFi standard del modem ADSL mentre altri dispositivi come computer desktop, laptop e dispositivi multimediali come le console da gioco (usate magari per accedere via DLNA ad un disco di rete) potranno connettersi, via cavo o via WiFi, alla rete sicura che avete predisposto.

Vodafone Station – Alcune cose da sapere

Vodafone Station RevolutionI fortunati possessori della Vodafone Station 2 e della Vodafone Station Revolution avranno scoperto, come me, alcuni chiari vantaggi di questa soluzione, primo fra tutti una maggiore e più stabile larghezza di banda, dovuta anche alla conversione in VoIP della parte fonia (che permette di sfruttare quella parte di canale “voce” per i dati, rendendo in tal modo la banda “più larga” e quindi il segnale più robusto). Anche la fibra (in tutte le sue versioni) rappresenta un ottimo servizio, che porta la banda disponibile da 50 Mbps in su. Tuttavia, abituati alle libertà di qualche altro provider tradizionale, si scoprono ben presto anche alcune limitazioni di questo dispositivo che cercherò di riassumere nel seguente elenco:

  • DHCP: nonostante un pannello di controllo abbastanza configurabile, la Vodafone Station viene fornita con un DHCP sempre attivo, non configurabile nè disattivabile. Ciò significa dover disattivare qualsiasi altro DHCP presente all’interno della vostra LAN sullo stesso spazio di indirizzi (tipico esempio un access point casalingo) ed accettare che la Vodafone Station assegni gli indirizzi nell’intero range della vostra subnet come meglio crede. Il range “standard” offerto dalla Station è la classica rete 192.168.1.0/24 configurabile a piacere con pochi click: tuttavia il DHCP vi seguirà come un’ombra. Nell’immagine sotto viene riportato l’esempio di una Station configurata nello spazio di rete 192.168.0.0/24: come si vede, non ci sono parametri per la disabilitazione del DHCP, solo la reservation.

  • Hostnames: la Vodafone Station crea un dominio DNS locale chiamato vodafone.station sul quale mappa tutti i dispositivi collegati e da lei riconosciuti. Peccato che non sia possibile assegnare un nome “ragionato” per ognuno di questi, che nel caso migliore vengono chiamati “computer” o qualcosa di ancor più generico. Nel caso sotto riportato “computer” è in realtà un router-access point della TP-Link:

  • DNS ed enrollment: è la parte più dolente della Vodafone Station. Forse impostato in questo modo per poter “interagire” con l’utente medio fin dal primo momento (imponendo alcuni pop-up via browser al primo collegamento) e per gestire al meglio il propri servizi di “rete sicura”, la Vodafone Station intercetta tutto il traffico DNS imponendo un proprio sistema di name resolution: non c’è verso di poter configurare all’interno della Station un DNS pubblico, nemmeno inserendolo esplicitamente all’interno della configurazione di rete del proprio computer. Questo meccanismo garantisce alla Vodafone Station un processo di enrollment browser-based di qualsiasi nuovo dispositivo che si aggancia per la prima volta alla LAN via protocollo HTTP, iniettando nel browser una pagina web di benvenuto (generata dalla Station) con alcuni script Java-based che leggono l’indirizzo MAC del dispositivo, lo registrano e gli assegnano un nome all’interno del dominio vodafone.station della vostra LAN. Questo processo avviene solamente una volta, al primo accesso mediante il nuovo dispositivo, dopodichè il riconoscimento è del tutto trasparente.

Vodafone Station 2Non pochi problemi ho quindi avuto con un Raspberry PI presente all’interno della mia LAN. Infatti il comando “apt-get update”, essendo http-based, non riusciva a funzionare poichè la Station, non riconoscendo l’indirizzo MAC del Raspberry ma intercettando traffico http, lo reindirizzava alla pagina HTML di enrollment (Java-based!) dando il benvenuto e chiedendo di “Abilitare” (tramite click!) la sorgente chiamante. Così pure mi si bloccavano diverse istruzioni che viaggiavano su canale http quali ad esempio “curl” e “wget”. In altre parole: qualsiasi dispositivo che viene visto per la prima volta dalla Vodafone Station, se non provvisto di browser web, non può essere “registrato” e quindi non può navigare verso Internet: ciò può accedere anche con alcune smart-TV oppure con alcuni lettori multimediali che necessitano di collegarsi ad Internet su canale HTTP, non avendo essi alcun browser web interno per confermare l’abilitazione.

Questo problema l’ho risolto con il seguente workaround: aprite un qualsiasi browser (da un computer di casa) ed inserire questa stringa, dove al posto di <indirizzo MAC> si dovrà indicare l’indirizzo MAC del dispositivo da registrare nella Station (attenzione, le parentesi non devono comparire!):

vodafone.station/?page=dashboard_wizard.html&host_mac=<indirizzo MAC>

Problema risolto!

Un commento finale: la Vodafone Station è sicuramente un ottimo dispositivo, con alcune fastidiose limitazioni dovute al fatto che il traffico viene in qualche modo intercettato e “proxato” da Vodafone per i suoi servizi aggiuntivi a pagamento: quindi dimenticatevi DNS alternativi a meno di non attivare un abbonamento VPN per la navigazione sicura con qualche altro servizio offerto da terzi. Dimenticatevi pure il DHCP “autonomo”. Tuttavia questo ultimo aspetto sono riuscito a risolverlo segmentando la mia rete con un router e lasciando la Station “da sola” come solo gateway di navigazione Internet e mappando il resto della mia rete (con DHCP autonomi) come meglio credevo. Ho infatti inserito la Vodafone Station all’interno della sottorete 192.168.0.0/24 separandola con un router TP-Link dalla sottorete 192.168.1.0/24. Ecco qui uno schema semplificato:

Subnet Vodafone

Aggiornamento: grazie a VMax, che ha indicato un modo per usare dei DNS alternativi. I server DNS di opendns rispondono infatti anche sulle porte 443 e 5353, non intercettate dalla Vodafone Station (che controlla solo la porta 53).

Linux backup: fstab, rsync e crontab

In questa piccola guida riassumo i passi necessari per implementare un sistema di backup automatico tra due NAS, effettuato con un server esterno Linux-based. Nel mio caso la configurazione vede interagire i seguenti tre sistemi:

  • un server Ubuntu Linux versione 12.10 montato su un Asus eeeBox B206
  • un NAS Buffalo LS-GL da 750 Gb
  • un NAS Buffalo LS-CHL-V2 da 1 Tb

L’utilizzo di un sistema esterno per effettuare i backup, anzichè le utility interne ai NAS, mi ha permesso un maggior controllo sui processi di backup rispetto a quanto offerto dalle applicazioni embedded.

Montare i NAS in modo permanente: fstab

Per montare i NAS in modo permanente, cioè in modo che ad ogni reboot del sistema Linux siano rimontati correttamente sul filesystem Linux, è necessario modificare il contenuto del file /etc/fstab con un qualunque editor. Prima però è necessario creare le directory di mount sul filesystem. Nel mio caso ho creato le seguenti due directory sotto la directory /mnt:

dr-xr-xr-x 2 root root 0 gen 21 08:00 discovery
drwxrwxrwx 2 root root 0 gen 21 08:03 voyager

Alla directory ‘voyager’ ho settato i permessi di full-control (0777) mentre per ‘discovery’ ho settato soltanto i permessi in lettura ed esecuzione (0555) in quanto essa rappresenta una condivisione in sola lettura, sorgente dalla quale effettuare il backup verso ‘voyager’.

sudo chmod 777 /mnt/voyager
sudo chmod 555 /mnt/discovery

A questo punto si edita il file /ect/fstab. Nel mio caso preferisco utilizzare jed, un editor con un minimo di interfaccia. Importante è ricordarsi il comando ‘sudo’, che permette di acquisire temporaneamente i diritti di root (tutti i files in /etc richiedono infatti speciali permessi per essere gestiti):

sudo jed /etc/fstab

Senza modificare alcuna riga già presente, ho inserito in coda al file le seguenti righe:

//192.168.1.32/share /mnt/discovery cifs guest,ro,nounix,file_mode=0555,dir_mode=0555 0 0
//192.168.1.33/share /mnt/voyager cifs guest,rw,nounix,file_mode=0777,dir_mode=0777 0 0

Le due righe aggiunte mappano gli indirizzi di rete delle cartelle ‘share’ condivise dai NAS sulle due directory menzionate in precedenza. Si noti in particolare:

  • il parametro cifs che indica una cartella remota basata su protocollo smb
  • l’opzione guest specifica il collegamento senza richiesta password
  • le opzioni ro e rw che indicano un filesystem montato in sola lettura o in lettura e scrittura
  • l’opzione nounix che disattiva la sincronizzazione dei permessi, trattando i NAS similmente a quanto accade quando si accede ad essi dai sistemi operativi Windows
  • l’opzione file_mode e dir_mode coerenti con i permessi già settati sulle directory montate in precedenza

In tal modo, si montano correttamente le cartelle condivise in rete dai NAS all’interno del filesystem Linux, superando quei tipici conflitti tra protocollo cifs e gestione dei permessi Linux: infatti ogni sistema vorrebbe fare – nativamente – a modo suo, compromettendo in tal modo la compatibilità funzionale tra i due ambienti.

Senza riavviare il sistema, si può far rileggere la configurazione di fstab con il seguente comando:

sudo mount -a

Per una verifica dei filesystem montati è possibile eseguire semplicemente il comando senza alcuna opzione, ottenendo nelle righe finali dell’output anche i due mount aggiunti in fstab:

//192.168.1.32/share on /mnt/discovery type cifs (ro)
//192.168.1.33/share on /mnt/voyager type cifs (rw)

Come si può vedere, il filesystem /mnt/discovery è stato montato in sola lettura (ro) mentre /mnt/voyager è montato in lettura e scrittura. Se si vuole, invece, verificare il dettaglio dei filesystem montati, è possibile visualizzarne tutti i parametri di mounting col seguente comando:

cat /proc/mounts

Individuare ed eseguire le procedure di backup: rsync

Prima di schedulare il backup, in modo che venga eseguito automaticamente, è necessario individuare correttamente il comando che deve essere eseguito per copiare il contenuto di una cartella sorgente in una cartella destinazione. Il tool utilizzato per sincronizzare directory è rsync, con l’opzione -nv fin quando si fanno le prove: in tal modo non viene copiato nulla (parametro n) e l’output viene comunque visualizzato a schermo (opzione v) in modo da verificare gli esiti del comando.

La sintassi base di rsync che ho utilizzato per eseguire il backup differenziale è la seguente:

rsync -ruv --delete-excluded /sorg/dir1/ /dest/dir2

Le opzioni hanno il seguente significato:

  • il parametro r indica l’esecuzione ricorsiva su tutte le sottodirectory
  • il parametro u indica l’esecuzione in modalità update: se un file esiste già nella destinazione non viene sottoposto a copia
  • il parametro v indica un output esplicito delle operazioni effettuate: si vedrà a video tutto ciò che viene eseguito
  • il parametro –delete-excluded indica la cancellazione di quei file esistenti nella destinazione che non sono presenti nella sorgente, compreso i files esclusi dall’elaborazione

E’ inoltre importante ricordarsi di inserire il backslash “/” dopo l’indirizzo sorgente, altrimenti la directory non viene correttamente interpretata in quanto tale. E’ chiaro che fin quando si effettueranno delle prove, andrà inserito pure il citato parametro “n” (cioè indicando l’opzione -ruvn).

Se è necessario escludere alcuni files, si può utilizzare il parametro “–exclude”. Nel mio caso, per non copiare i files nascosti (ad esempio i noiosissimi file ‘.DS_Store’ di OSX), ho esteso il comando nel seguente modo:

rsync -ruv --delete-excluded --exclude='.*' /sorg/dir1/ /dest/dir2

Nel mio caso, il comando individuato per effettuare il mio backup è stato dunque il seguente:

rsync -ruv –delete-excluded –exclude=’.*’ /mnt/discovery/docs/ /mnt/voyager/bkpdocs

Il comando copia l’intero contenuto della directory docs’ sul NAS sorgente (discovery) all’interno della directory ‘bkpdocs’ sul NAS destinazione (voyager). Il backup è di tipo differenziale: vengono apportate, sul sistema destinatario, solo le modifiche. E’ importante ricordare che le citate directory, stando al comando di mount fatto in precedenza, risiedono sui due NAS all’interno delle cartelle condivise ‘share’, che tuttavia non compaiono nel comando in quanto già mappate rispettivamente in /mnt/discovery e in /mnt/voyager.

Schedulare il backup: crontab

L’ultimo passo è quello di schedulare il backup, cioè far sì che sia il sistema Linux che periodicamente esegue il backup tra i due sistemi.

Nel mio caso ho deciso di effettuare il backup differenziale ogni notte alle ore 2:00, ritenendo che in quel momento tutti i sistemi non lavorino per altri scopi. Effettuando un backup giornaliero, la massima perdita dati è di un giorno, rischio ritenuto dal sottoscritto sufficiente.

La schedulazione del backup avviene modificando il file /etc/crontab con un qualunque editor. Nel mio caso preferisco utilizzare sempre jed. Importante è ricordarsi sempre il comando ‘sudo’, che permette di acquisire temporaneamente i diritti di root.

sudo jed /etc/crontab

Senza modificare alcuna riga già presente, ho inserito in coda al file la seguente riga:

00 2    * * *   root    rsync -ruv –delete-excluded –exclude=’.*’ /mnt/discovery/docs/ /mnt/voyager/bkpdocs

I parametri hanno il seguente significato:

  • le prime cinque colonne stabiliscono la periodicità di esecuzione del comando. Nel mio caso 00 2 * * * indica le 2:00 di notte di qualsiasi giorno della settimana.
  • il parametro root indica con quali autorizzazioni deve essere eseguito il comando
  • infine, il resto della riga, rappresenta il comando che deve essere eseguito

Una volta editato e salvato il file, la configurazione è già attiva.

Per comodità, è possibile redirezionare l’output su un file oppure inviarlo su una mail. Nel mio caso ho preferito la seconda opzione, installando Postfix e modificando il comando in crontab nel seguente modo:

00 2    * * *   root    rsync -ruv –delete-excluded –exclude=’.*’ /mnt/discovery/docs/ /mnt/voyager/bkpdocs | mail -s “Backup Log” mario.rossi@gmail.com

Chiaramente, al posto di mario.rossi@gmail.com, ho inserito l’e-mail desiderata.