27 settembre 2017

tutorial: come configurare un access point (o wi-fi extender) con tor e vpn sul raspberry pi 3


Benvenuti!
Questo tutorial vi fornirà una panoramica su come configurare il raspberry pi 3 (qui trovate tutti i miei focus sul dispositivo) per trasformarlo in un piccolo Access Point da sfruttare principalmente in 3 scenari: 1) per creare una rete Guest domestica, 2) per estendere la copertura Wi-Fi in ambienti "problematici", e soprattutto 3) per trasformarlo in un router VPN o TOR.

Nota: il presente articolo contiene una infarinatura generale ed alcuni dettagli sono stati tralasciati. Se volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto il video di supporto a questa guida che ho pubblicato sul mio canale YouTube:


Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per creare un Access Point occorrono:
  • un raspberry pi 3 (o un qualsiasi altro single board computer o PC dotato di due o più interfacce di rete) + una microSD + un alimentatore (da almeno 2A) + un cavo di rete
  • un PC
  • Raspbian OS Lite
  • una connessione ad internet + un router

Per quanto riguarda il primo punto non occorre altro: il raspberry pi 3 sarà acceduto sempre da remoto e sarà autonomo nelle sue attività, quindi non sarà necessario utilizzare alcuna periferica collegata al pi. Sarà invece indispensabile avere un alimentatore che eroghi in uscita almeno 2A ed un cavo di rete per collegarlo direttamente al router via ethernet.
Tutta la configurazione verrà fatta da remoto da PC quindi si utilizzerà la versione lite di Raspbian OS per occupare il minimo possibile di risorse.
Serve commentare il quarto punto (=D)?

Nota: ovviamente tutte le configurazioni qui descritte possono essere fatte senza problemi anche sul raspberry pi zero o su qualsiasi altro dispositivo che abbia una doppia connettività di rete, cioè che abbia la combo ethernet + Wi-Fi, oppure due ethernet oppure due Wi-Fi, etc, e che monti una qualsiasi distribuzione Linux. Quelli qui di seguito riportati sono i passaggi per un pi 3 collegato via ethernet ad un modem e con interfaccia Wi-Fi a disposizione per fare da hot spot; su di esso va montata l'ultima versione di Raspbian Lite, quella rilasciata l'8 Settembre 2017 (scaricabile da qui): è fondamentale utilizzare proprio tale versione (o versioni più aggiornate) poiché con l'arrivo di Stretch sono cambiate un po' di cose a livello di gestione delle interfacce di rete; ed in più le prime versioni di Raspbian OS rilasciate dalla fondazione inglese raspberry pi erano buggate, ed anche partendo da esse ed aggiornandole si potrebbe incorrere in problemi di varia natura.


2. l'idea e la configurazione iniziale


L'idea alla base del progetto è quella di aggiungere un livello intermedio che faccia da gestore della connettività tra modem/router di casa e dispositivi che vogliono accedere ad internet. Ovviamente se si dispone di un router molto flessibile, con tantissime configurazioni ed opzioni, probabilmente questo strato aggiuntivo non darà alcun vantaggio particolare; in ogni caso, però, una volta configurato a dovere il raspberry pi, si ha anche la possibilità di portarlo in giro e sfruttarlo come Access Point in situazioni "problematiche" al di fuori delle mura domestiche.
Il pi 3 può permettere la creazione ad esempio di una rete Guest (utile per non condividere la propria password di rete con ospiti od estranei), oppure può fare da ripetitore di connettività tra piani diversi di casa o verso stanze più lontane e mal servite, o ancora può instaurare connettività VPN o TOR da condividere immediatamente tra più dispositivi senza l'obbligo di ripetere particolari e complicate configurazioni su ognuno di essi.

Nota: come anticipato, è indispensabile avere un pi 3 con Raspbian Lite ed un cavo di rete per collegare il dispositivo al router oppure, in alternativa, può essere utilizzato un dongle USB che aggiunga una o più interfacce Wi-Fi secondarie, ma questo secondo scenario non sarà qui trattato.

Il primo passaggio è quello di installare Raspbian Lite Stretch su una microSD con il classico procedimento valido per qualsiasi OS per raspberry pi (quindi via Etcher, dd o Image Writer su Ubuntu, oppure Win32DiskImager). Una volta pronta la microSD, sarà necessario entrare nella partizione boot per creare al suo interno un file vuoto chiamato ssh (senza estensione né altro che servirà per abilitare l'accesso ssh al pi, fondamentale per accedervi da remoto). A questo punto il setup iniziale è completo: inserita la microSD nel pi 3 e collegato quest'ultimo al modem/router via cavo ethernet e all'alimentatore da almeno 2A, il sistema si auto-configurerà e dopo pochi istanti sarà possibile accedere sul pi via SSH dal PC tramite l'indirizzo IP che il router gli ha assegnato. Nome utente e password da utilizzare sono i classici "pi" e "raspberry".

Una volta collegati, la prima cosa da fare assolutamente è quella di cambiare la password di default del pi, digitando passwd ed inserendo la vecchia password, quindi quella nuova. Una volta fatto ciò è bene assicurarsi di avere il sistema aggiornato tramite i comandi sudo apt-get update e, una volta completato il processo, sudo apt-get dist-upgrade.


3. pi 3 come Access Point


Il passo iniziale per trasformare il raspberry pi 3 in un Access Point (o Wi-Fi Extender) è quello di installare due utility chiamate hostapd e le bridge-utils. Il primo tool consente la creazione vera e propria del punto di accesso per dispositivi esterni, mentre il secondo pacchetto consente di dirottare il traffico in entrata sull'interfaccia di rete Wi-Fi a quella ethernet (e quindi al router, visto che il pi 3 è connesso ad esso via cavo LAN) fornendo connettività internet a qualsiasi device si connetti al pi. Il comando sudo apt-get install hostapd bridge-utils permette di ottenere l'occorrente e, prima di procedere oltre, occorre bloccare il demone di hostapd appena installato con il comando sudo systemctl stop hostapd visto che va appositamente configurato prima di poter essere utilizzato.

L'idea è quella di sfruttare le due interfacce di rete (eth0 e wlan0) creando un ponte tra di loro, impedendo -tra l'altro- al sistema operativo di associare a tali interfacce eventuali indirizzi IP in maniera automatica. Si dovrà perciò creare un bridge vero e proprio tra eth0 e wlan0 al quale poi il router assegnerà un indirizzo IP, e sarà lui a gestire tutta la connettività.
Con il comando sudo brctl addbr br0 verrà creata la nuova interfaccia di rete bridge (denominata br0), e con il comando sudo brctl addif br0 eth0 wlan0 si potranno associare a questo nuovo bridge br0 le due interfacce ethernet e Wi-Fi.
Il passo successivo è quello di indicare il bridge al sistema operativo: con il comando sudo nano /etc/network/interfaces si aprirà il file di configurazione delle interfacce di rete, e alla fine di esso vanno aggiunte le seguenti configurazioni:

iface eth0 inet manual
iface eth0 inet6 manual
iface wlan0 inet manual
iface wlan0 inet6 manual

auto br0
iface br0 inet manual
    bridge_ports eth0 wlan0

Per chiudere e salvare le modifiche basta usare la combinazione di tasti Ctrl + X, quindi digitare y ed infine premere il tasto invio.
Non è tutto: sarà necessario istruire il servizio DHCP affinché ignori le interfacce di rete eth0 e wlan0 sfruttate dal bridge e allo stesso tempo fare in modo che DHCP assegni un indirizzo IP statico al bridge stesso. Entrambe le configurazioni vanno effettuate nel file dhcpcd.conf con il comando sudo nano /etc/dhcpcd.conf inserendo al suo interno, alla fine di tutto, le seguenti istruzioni:

denyinterfaces eth0 wlan0

interface br0
static ip_address=192.168.1.200/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8

Nota: se il router assegna indirizzi IP in una rete privata differente dalla 192.168.1.X ovviamente andranno modificati gli indirizzi con quelli corretti. Inoltre si è scelto l'indirizzo 192.168.1.200 per evitare possibili collisioni con altri indirizzi IP che il router assegna automaticamente, ma è possibile utilizzare qualsiasi indirizzo si voglia.

Per chiudere e salvare le modifiche basta usare la combinazione di tasti Ctrl + X, quindi digitare y ed infine premere il tasto invio.
A questo punto è necessario configurare hostapd cosicché il pi 3 possa trasformarsi effettivamente in un Access Point. Va creata una nuova configurazione tramite il comando sudo nano /etc/hostapd/hostapd.conf il quale andrà a creare un nuovo file al cui interno vanno specificati i seguenti parametri:

interface=wlan0
bridge=br0
#driver=nl80211
ssid=NomeDellaWiFi
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=PasswordDellaWiFi
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Nota: in SSID è possibile inserire il nome desiderato per la nuova rete che verrà generata dal pi 3 ed in wpa_passphrase la rispettiva password. Da notare anche i primi due parametri, interface e bridge, che specificano interfaccia e bridge che ricevono e gestiscono le richieste.

Per chiudere e salvare le modifiche basta usare la combinazione di tasti Ctrl + X, quindi digitare y ed infine premere il tasto invio.
Una volta creato il file esso va associato al tool hostapd: con il comando sudo nano /etc/default/hostapd si può modificare la configurazione di default del tool e va sostituita la linea #DAEMON_CONF con DAEMON_CONF="/etc/hostapd/hostapd.conf" cosicché il programma possa conoscere il percorso completo del file di configurazione poc'anzi creato.
Per chiudere e salvare le modifiche basta usare la combinazione di tasti Ctrl + X, quindi digitare y ed infine premere il tasto invio.

Il passaggio finale consiste nell'avvio di hostapd tramite il comando sudo service hostapd start più un rapido riavvio del pi 3 tramite il comando sudo reboot -n così da poter verificare che tutto sia correttamente funzionante. Dopo un'attesa di qualche istante dovrebbe essere possibile rilevare tra le reti Wi-Fi disponibili intorno (controllando su PC, telefonino, tablet o qualsiasi altro device) l'Access Point appena creato e connettersi ad esso tramite la password specificata.

A questo punto quello che succede è che qualsiasi dispositivo esterno può collegarsi al vostro router in due modi: o in quello "tradizionale" quindi tramite connessione diretta (ethernet o Wi-Fi) come è stato sempre possibile finora; oppure sfruttando l'Access Point generato dal pi 3 che, così configurato, funge fondamentalmente da secondo router. Ciò permette effettivamente di poterlo usare: 1) sia per aggiungere connettività wireless a modem che magari non la hanno o a cui si vuole tenerla spenta per motivi vari; oppure 2) consentire di muovere il pi 3 in giro per casa (collegandolo al router via cavo ethernet oppure sfruttando un dongle USB Wi-Fi che, ovviamente, va configurato adeguatamente) per avere un Extender della rete domestica e coprire con il Wi-Fi aree altrimenti mal servite; o, ancora, 3) come semplice rete Guest senza l'obbligo di condividere SSID e password principali del vostro router con estranei. Chiaramente configurando un firewall sul pi 3, oppure impostando particolari restrizioni ulteriori, è possibile limitare e/o controllare il traffico e quant'altro in aggiunta a quanto visto finora.


4. pi 3 come router TOR/VPN


Una volta completato il passo precedente sarà possibile potenziare il progetto e far sì che il pi 3 possa diventare uno strumento per anonimizzare il più possibile lo scambio dati con il web tramite l'utilizzo della rete TOR o di una VPN.
VPN e TOR sono due sistemi per creare connessioni criptate su Internet e in teoria entrambi i metodi permettono di offuscare le attività di navigazione da occhi indiscreti. Poiché non è banale utilizzare contemporaneamente i due sistemi, l'idea è sceglierne uno o l'altro in base alle proprie esigenze e configurare il pi affinché lo sfrutti a dovere.



TOR, o The Onion Router, è una tecnologia che cripta e distribuisce i dati scambiati tra mittente (es. il nostro PC) e destinatario (es. un sito web) su una rete di computer fino all'ultimo nodo di uscita (ed ogni nodo conosce solo l'indirizzo di chi lo ha contattato e sa verso chi spedire a sua volta). Questo rende complicato se non impossibile ricostruire da dove la richiesta sia partita e quali dati siano stati effettivamente scambiati (a meno di intercettazioni dopo il nodo di uscita). Inoltre TOR permette di accedere al cosiddetto Dark Web, il lato nascosto ed oscuro di internet.


Una VPN, o Virtual Private Network, lavora in background creando una connessione privata protetta (un tunnel) verso un server remoto il quale si occupa di completare le richieste sul web cambiando, per ognuna di esse, provenienza geografica ed indirizzo IP. Una rete VPN può essere decisamente più sicura della rete TOR se -chiaramente- chi offre il servizio è affidabile. Solitamente questa tipologia di servizi sono erogati previo pagamento di un abbonamento, ma esistono anche VPN gratuite meno affidabili visto che per forza di cose da qualche parte devono trarne guadagno...

Nota: TOR prevede poche configurazioni tra cui l'installazione di un apposito tool sul pi 3; una VPN, al contrario, richiede qualche configurazione aggiuntiva e soprattutto un account per autenticarsi sul server VPN di chi offre il servizio (solitamente a pagamento). In alternativa è anche possibile creare un proprio server VPN privato, anche se in questo caso lo scopo d'uso sarà differente, ma questo secondo scenario non sarà qui trattato.


TOR
Una volta effettuato l'accesso SSH al pi (e questa volta direttamente tramite l'indirizzo IP impostato staticamente in precedenza), con il comando sudo apt-get install tor sarà possibile procedere al download dell'apposito tool di accesso alla rete TOR e, una volta terminato il setup, con sudo service tor stop va temporaneamente interrotto poiché è necessario prima procedere alla sua configurazione. Con il comando sudo nano /etc/tor/torrc si potrà invece andare a modificarne la configurazione inserendo i seguenti parametri subito dopo la riga contenente la URL delle FAQ:

Log notice file /var/log/tor/notices.log
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 192.168.1.200
DNSPort 53
TransListenAddress 192.168.1.200

-- EDIT 06/05/2020 -- Sembra che le istruzioni TransListenAddress e TransListenAddress siano state deprecate, in caso si verificassero problemi provare ad utilizzare questa configurazione:

Log notice file /var/log/tor/notices.log
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
DNSPort 192.168.1.200:53
DNSPort 127.0.0.1:53
TransPort 192.168.1.200:9040
TransPort 127.0.0.1:9040

Nota: gli indirizzi IP devono combaciare con quello statico assegnato al pi.

Per chiudere e salvare le modifiche basta usare la combinazione di tasti Ctrl + X, quindi digitare y ed infine premere il tasto invio.
Va creato il file di log specificato nella configurazione digitando in sequenza i seguenti comandi: sudo touch /var/log/tor/notices.log, sudo chown debian-tor /var/log/tor/notices.log e sudo chmod 644 /var/log/tor/notices.log cosicché soltanto il tool tor possa utilizzarlo.

Ora va configurato iptables affinché si occupi di ruotare i pacchetti UDP e TCP passanti per il bridge br0 sulla rete TOR.
Il primo passo è quello di ripulire la attuale tabella di routing con i comandi sudo iptables -F e sudo iptables -t nat -F quindi aggiungere le regole:

sudo iptables -A FORWARD -p tcp --dport 80 -m physdev --physdev-is-bridged -j ACCEPT
sudo iptables -t nat -A PREROUTING -i br0 -p tcp --dport 22 -j REDIRECT --to-ports 22
sudo iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j REDIRECT --to-ports 53
sudo iptables -t nat -A PREROUTING -i br0 -p tcp --syn -j REDIRECT --to-ports 9040

per consentire comunque l'accesso via SSH al pi e per gestire i pacchetti UDP e TCP. A questo punto si può verificare con il comando sudo iptables -t nat -L che essi siano stati attivati.

Il tool iptables-persistent installabile tramite sudo apt-get install iptables-persistent consente di rendere tali configurazioni persistenti in modo immediato (durante l'installazione è importante digitare Yes per salvare immediatamente le modifiche apportate, altrimenti dovrete digitare il comando sudo netfilter-persistent save per salvarle in un secondo momento). E con sudo systemctl enable netfilter-persistent si rende attiva la persistenza in via definitiva per i prossimi riavvii.
Completati i precedenti passaggi, l'ultima cosa da fare è lanciare il comando sudo service tor start per avviare tor e con il comando sudo update-rc.d tor enable renderlo abilitato all'esecuzione automatica ad ogni riavvio del pi.


VPN
La VPN, come anticipato, richiede qualche passaggio in più: Linux supporta openvpn out-of-the-box e tantissimi provider che offrono servizi VPN supportano a loro volta openvpn. Ciò che occorre quindi è il certificato CA e/o la coppia username:password forniti da chi vende il servizio. Inutile sottolineare che occorrano anche il dominio del server VPN, e la porta ed il protocollo utilizzati. Una volta in possesso di tali informazioni ed effettuato l'accesso SSH al pi (direttamente tramite l'indirizzo IP impostato staticamente in precedenza), con il comando sudo apt-get install openvpn è possibile scaricare l'apposito tool di accesso al tunnel VPN e, una volta terminato il setup, con sudo service openvpn stop va temporaneamente interrotto poiché è necessario prima procedere alla sua configurazione.
Se disponibile, va salvato il certificato CA (più eventuali client.crt e client.key) fornito dal provider del servizio VPN nel path /etc/openvpn/ca.crt (e/o client.crt e client.key), e la coppia username:password può essere inserita nel path /etc/openvpn/auth così da evitare che venga richiesta ad ogni avvio: con sudo nano /etc/openvpn/auth è possibile creare tale file in cui inserire username sulla prima riga e password sulla seconda riga.
Per chiudere e salvare le modifiche basta usare la combinazione di tasti Ctrl + X, quindi digitare y ed infine premere il tasto invio.
A questo punto va configurato openvpn e con il comando sudo nano /etc/openvpn/client.conf si può accedere alla configurazione al cui interno va inserito un qualcosa come (la configurazione può variare in base a chi vende il servizio, e spesso è fornita direttamente dal provider di turno):

client #openvpn in modalita' client
dev tun
proto [protocol] #il protocollo utilizzato dal server
remote [domain] [port] #dominio e porta del server
resolv-retry infinite #riconnessione automatica alla disconnessione
nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt #il file CA se fornito
#cert /etc/openvpn/client.crt #decommentare se il server VPN richiede il client.crt
#key /etc/openvpn/client.key #decommentare se il server VPN richiede il client.key
ns-cert-type server
#comp-lzo #decommentare se il server supporta la compressione lzo
#auth-user-pass /etc/openvpn/auth #decommentare se richiesti username e password
script-security 3 #deve combaciare con le impostazioni del server
keepalive 5 30 #mantiene la connessione attiva
verb 3
log-append /var/log/openvpn-client.log

Nota: openvpn richiede che gli orari tra client e server siano allineati. Il raspberry pi non ha un clock real-time e quindi occorrerà sfruttare il servizio NTP, installabile via sudo apt-get install ntp ed attivabile con i comandi sudo service ntp start e sudo update-rc.d ntp enable per averlo disponibile anche dopo ogni riavvio del pi.

Ora va configurato iptables e il primo passo è quello di ripulire la attuale tabella di routing con i comandi sudo iptables -F e sudo iptables -t nat -F quindi aggiungere le regole:

sudo iptables -A INPUT -i tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -j ACCEPT
sudo iptables -A FORWARD -o tun0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Nota: potrebbe essere necessario impostare regole differenti per situazioni o configurazioni differenti.

Anche in questo caso, il tool iptables-persistent installabile tramite sudo apt-get install iptables-persistent consente di rendere tali configurazioni persistenti in modo immediato (durante l'installazione è importante digitare Yes per salvare immediatamente le modifiche apportate, altrimenti dovrete digitare il comando sudo netfilter-persistent save per salvarle in un secondo momento). E con sudo systemctl enable netfilter-persistent si rende attiva la persistenza in via definitiva per i prossimi riavvii.
Completati i precedenti passaggi, l'ultima cosa da fare con i comandi sudo service openvpn start e sudo update-rc.d openvpn enable è attivare openvpn ed abilitarlo all'avvio automatico. Per verificare che la connessione con il server remoto sia effettivamente stabilita può essere comodo rimanere in lettura sul file di log syslog con il comando sudo tail -f /var/log/syslog e verificare che non ci siano problemi di autenticazione o di qualsiasi altra natura.


TOR o VPN: fasi finali
Indipendentemente dalla strada scelta, è ora possibile riavviare rapidamente il pi con il comando sudo reboot -n ed attendere che il sistema venga riattivato. A questo punto, sia se avete scelto di usare TOR oppure se avete scelto la VPN, potete usare un qualsiasi browser sul vostro dispositivo connesso alla rete generata dal pi 3 per navigare in forma anonimizzata sul web.

Nota: la rete TOR può essere più lenta perché i dati (come descritto poc'anzi) vengono spediti in giro per il web per farne perdere le tracce il più possibile prima di giungere a destinazione; invece una rete VPN può essere decisamente più veloce di quella TOR ma, chiaramente, tutto dipende dalle performance di chi vende il servizio.


5. conclusioni e ultime note


Ricapitolando brevemente è possibile sfruttare il pi 3 come router affinché generi un Access Point che può essere utilizzato: 1) per creare una rete Guest così da non condividere i dettagli relativi a quella primaria con persone estranee; 2) utilizzare il pi 3 a mo' di Extender della rete domestica in aree della casa mal servite; e 3) spingersi oltre questi usi più "banali" e anonimizzare la connessione direttamente sul pi cosicché qualsiasi dispositivo passante attraverso esso possa sfruttare le peculiarità della rete TOR o di una VPN per navigare "in sicurezza" sul web.

Nota: questi sono i principali step iniziali ed ovviamente è possibile estendere la configurazione aggiungendo maggiori limitazioni, controllando la rete in modo diretto o più attivo, oppure creando una propria VPN privata che possa essere sfruttata ad esempio fuori casa per continuare ad utilizzare la rete domestica anche in luoghi meno sicuri. Argomenti non trattati in questa sede, ma che possono essere spunto per futuri approfondimenti...

I consumi ridotti dei single board computer della fondazione inglese fan sì che possa avere senso impiegarli a mo' di router più avanzato rispetto al classico domestico.


Bene: come indicato ad inizio guida, alcuni aspetti sono stati lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o del video ad esso correlato, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

1 commento:

  1. Ciao, hai mai pensato di fare una guida per l'installazione di openwrt?

    RispondiElimina