Materiale occorrente:

Raspberry pi + microSD + un alimentatore da 2A + cavo di rete
PC
Raspbian OS Lite
Connessione ad internet

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 oppure andare nel menù di configurazione digitando sudo raspin-config). 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 update, upgrade e dist-upgrade e, una volta completato il processo,

sudo apt-get update

sudo apt-get upgrade

sudo apt-get dist-upgrade

In caso otteniate il seguente errore:
E: Il repository “http://xxxxxxxxx buster InRelease” ha modificato il valore “Suite” da “testing” a “oldstable”
N: Ciò deve essere accettato prima di poter applicare gli aggiornamenti da questo repository. Per maggiori informazioni consultare la pagina man apt-secure(8).

bisogna accettare gli aggiornamenti con

sudo apt-get –allow-releaseinfo-change update

e rifare gli aggiornamenti

Raspberry come Access Point

Il passo iniziale per trasformare il raspberry pi 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 raspberry pi è 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).

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.10.200/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1 8.8.8.8

Nota: se il router assegna indirizzi IP in una rete privata differente dalla 192.168.10.X ovviamente andranno modificati gli indirizzi con quelli corretti. Inoltre si è scelto l’indirizzo 192.168.10.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 raspberry pi 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=nl80211ssid=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 raspberry pi 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 raspberry pi 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 raspberry pi 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 raspberry pi 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 raspberry pi , oppure impostando particolari restrizioni ulteriori, è possibile limitare e/o controllare il traffico e quant’altro in aggiunta a quanto visto finora.

raspberry pi come router TOR/VPN

Una volta completato il passo precedente sarà possibile potenziare il progetto e far sì che il raspberry pi possa diventare uno strumento per anonimizzare il più possibile lo scambio dati con il web tramite l’utilizzo della rete TOR.
TOR è un sistema per creare connessioni criptate su Internet e in teoria permette di offuscare le attività di navigazione da occhi indiscreti.

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.

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
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
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
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.

Per verificare che TOR sia attivo e che la nostra navigazione avvenga effettivamente attraverso il network, possiamo collegarci a questa pagina:

https://check.torproject.org

La pagina riporterà che stiamo utilizzando TOR, altrimenti riceveremo il messaggio contrario.