Chi di voi ha provato Tor Browser avrà sicuramente notato che la prima connessione, in modo particolare, è molta lenta ed è frustrante stare in attesa, tanto che presto si perde interesse in questo strumento. Per aggirare questo problema, Tor può essere installato come servizio di sistema (o demone) ma possiamo fare qualcosa in più: abbiamo già visto come si può creare una macchina virtuale minimale, vediamo adesso come configurarla come proxy Tor.
» Leggi: Creiamo un server minimale multiuso con Debian e VirtualBox
» Leggi: La Grande Guida a Tor: navigazione anonima gratuita, senza censura o VPN
I vantaggi in termini di sicurezza di questa configurazione dovrebbero essere evidenti: il servizio esposto ad internet lavorerà in un ambiente isolato dal nostro sistema e ogni possibile (anche se improbabile) compromissione dello stesso non potrà avere accesso al nostro sistema operativo, quale esso sia. Lo svantaggio, oltre ad una configurazione iniziale un po' laboriosa, è una richiesta di risorse leggermente maggiore ma credo sacrificabili senza rimpianti in cambio del vantaggio sopra descritto.
Il nostro "proxy anonimizzante" potrà essere utilizzato non solo per Tor Browser ma per qualunque altro programma (con qualche accorgimento ulteriore che vedremo più avanti), potremo utilizzare Thunderbird con TorBirdy senza dover avviare prima Tor, potremo sfruttare i DNS di Tor per aggirare la censura, potremo contribuire al progetto Tor condividendo parte della nostra banda di connessione, ....
Ma andiamo per gradi: vediamo prima di tutto come configurare la nostra macchina virtuale.
Installazione e configurazione di Tor
Il primo passo è ovviamente l'installazione di Tor! Installiamo con:
sudo apt install tor
Terminata l'installazione, configuriamolo a dovere: utilizziamo l'editor nano per modificare il file /etc/tor/torrc. Prima però dovremo scegliere una password di controllo per il servizio Tor e salvarla direttamente nel file di configurazione; il modo più semplice per farlo è utilizzare una shell di root e l'operazione di ridirezione dell'output, "aggiungi" (»); per fare questo dovremo digitare:
sudo su
tor --hash-password "SceglieteUnaPasswordRobusta!" » /etc/tor/torrc
Sostituite SceglieteUnaPasswordRobusta! con la vostra password ma mantenete le virgolette!!
Adesso chiudiamo la shell di root digitando exit
e poi andiamo ad editare torrc:
sudo nano /etc/tor/torrc
Leggiamo bene tutto e poi portiamoci in fondo dove vedremo alcune righe non commentate (senza il simbolo # davanti): dovremo cancellare le righe non commentate che si trovano prima della riga contenente un serie di caratteri alfanumerici (sono evidenziate in rosso nell'immagine poco sotto); quest'ultima riga è l'hash della nostra password!
A questo punto dovremo aggiungere una voce davanti a questo hash e poi aggiungere anche le seguenti righe:
HashedControlPassword 16:646814684618D4B6A84A6848F48DCC1684A68B64684A8BD4C6841D5A1D
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
SocksPort 192.168.56.3:9040 KeepAliveIsolateSOCKSAuth
DNSPort 5353
DNSPort 192.168.56.3:9053
TransPort 9040
ControlPort 9051
ControlListenAddress 192.168.56.3
Questa configurazione consentirà non solo di veicolare attraverso Tor tutto il traffico in ingresso su 192.168.56.3:9040 ma (con qualche regola di iptables che vedremo in seguito) anche quello generato dalla macchina virtuale stessa! Da notare che ho specificato la SocksPort anziché la TransPort per l'ascolto sull'indirizzo 192.168.56.3: questa particolare porta consente l'isolamento dei flussi di dati in modo che ogni richiesta avvenga da circuiti diversi. Questo sarà un'ottima cosa se vogliamo utilizzare la stessa porta con più programmi, ma renderà la connessione un po' più lenta nel caso di caricamento di una pagina web con molti contenuti di terze parti (infatti ogni richiesta alle terze parti verrà effettuata su un circuito di nodi diverso!). Infine abbiamo specificato anche delle porte per i DNS in modo da poter utilizzare la rete tor come risolutore dei nomi di dominio.
Salviamo e chiudiamo nano (premiamo Ctrl+X, confermiamo di voler salvare con S e poi invio per sovrascrivere il file /etc/tor/torrc).
Per utilizzare Tor come DNS predefinito sulla macchina virtuale, dovremo modificare il file di configurazione del DHCP responsabile della gestione, per così dire, dell'interfaccia di rete di uscita (eth0). Utilizziamo ancora una volta nano (con i privilegi di root) per modificare il file /etc/dhcp/dhclient.conf:
sudo nano /etc/dhcp/dhclient.conf
e andiamo ad aggiungere la seguente riga in fondo:
supersede domain-name-servers 127.0.0.1;
Senza questa modifica, il demone DHCP, imposterà come DNS quello fornito da VirtualBox che tramite NAT si appoggia alla nostra vera connessione e potrebbe rivelare il nostro vero IP. Con questa modifica, abbiamo istruito DHCP ad adottare come DNS predefinito il sistema locale dove è in ascolto il tor.
Come ultima cosa non ci rimane che avviare e attivare l'avvio automatico del servizio tor:
sudo systemctl start tor
sudo systemctl enable tor
Se non abbiamo commesso nessun errore, dalla macchina host dovremo vedere le porte in ascolto all'indirizzo 192.168.56.3; dalla macchina host con nmap scansionando il range di porte 9040-9053 dovremo ottenere un risultato come quello dell'immagine sotto
Non preoccupiamoci se la porta 9053 risulta chiusa: la scansione è fatta per il protocollo TCP mentre i DNS lavorano con l'UDP!
Configurazione di iptables
Configurare il firewall iptables ci consentirà non solo di aumentare la sicurezza del nostro sistema ma sarà assolutamente necessario se vogliamo che anche tutte le connessioni generate dalla macchina virtuale (per esempio, in caso di aggiornamento) passino attraverso tor, comprese le chiamate DNS. L'unica eccezione a questa regola sarà la connessione del processo tor che dovrà avvenire all'esterno della rete tor (tor non può connettersi attraverso la rete che deve creare lui stesso!!). Le regole iptables che possiamo inserire possono essere varie ma dopo numerose prove ho pensato di adattare quelle disponibili sulla wiki di tor per essere più versatili possibili (e in particolare per permettere a Tor Browser di utilizzare il processo tor in esecuzione su un'altra macchina).
Troverete uno script con le mie regole di iptables allegato a questo articolo.
Le modifiche apportate alle regole delle wiki sono fondamentalmente queste:
- rimozione delle regole di prerouting (non stiamo creando un proxy trasparente);
- inserimento delle regole per accettare dal solo indirizzo 192.168.56.1 (quello dove è in esecuzione la macchina virtuale) le connessioni SSH sulla porta 22 e sulla porta di controllo di tor 9051 (NB: se non viene specificato l'indirizzo queste porte saranno raggiungibili da qualunque altra macchina virtuale in esecuzione sullo stesso computer del nostro proxy, che utilizza NAT per la connessione; fa eccezione SSH se lo abbiamo configurato per accettare la connessione solo da un indirizzo);
- inserimento delle regole per accettare le connessioni dalla interfaccia di rete eth1 sulle porte dove tor è in ascolto (9040 per il proxy socks e 9053 per i DNS); queste regole sostituiscono quelle di prerouting.
Sicuramente si può fare di meglio ma ritengo che questo sia un buon compromesso. Potete eseguire lo script allegato direttamente sulla vostra macchina virtuale per creare automaticamente le regole di iptables (controllate bene lo script prima di eseguirlo!! Questa è una pratica da seguire sempre: mai eseguire script scaricati da internet alla cieca!!!). Una volta fatte le dovute prove per vedere se tutto funziona correttamente, possiamo salvare le regole nel file di configurazione principale di iptables con i comandi:
sudo su
iptables-save > /etc/iptables.rules
exit
Per assicurarsi che le regole di iptables vengano caricate al successivo riavvio, dobbiamo creare un nuovo file:
sudo nano /etc/network/if-pre-up.d/iptables
e aggiungere queste righe:
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
Già che ci siamo possiamo aggiungere in questo file anche le regole per bloccare il traffico da/per gli indirizzi IPv6:
/sbin/ip6tables -P INPUT DROP
/sbin/ip6tables -P OUTPUT DROP
/sbin/ip6tables -P FORWARD DROP
Il file creato deve poi essere reso eseguibile almeno per l'utente e il gruppo root, cambiando i permessi:
sudo chmod ug+x /etc/network/if-pre-up.d/iptables
Configurazione per Tor Browser
Adesso che abbiamo un servizio tor attivo sulla nostra macchina virtuale non c'è motivo per cui dobbiamo avviare una nuova istanza di Tor per utilizzare Tor Browser, possiamo sfruttare quella che abbiamo già. Per farlo è molto semplice basta creare delle nuove variabili di ambiente (sia su Linux/Mac che su Windows), sulla macchina host, con i valori sotto indicati:
TOR_CONTROL_PASSWD="SceglieteUnaPasswordRobusta!"
TOR_SOCKS_PORT=9040
TOR_CONTROL_HOST=192.168.56.3
TOR_SKIP_LAUNCH=1
TOR_CONTROL_PORT=9051
TOR_SOCKS_HOST=192.168.56.3
Queste nuove variabili d'ambiente sono piuttosto chiare, non dovrebbero necessitare di ulteriori spiegazioni e soprattutto verranno lette all'avvio di Tor Browser che in questo modo eviterà di avviare Tor e contatterà direttamente il servizio alle coordinate indicate in queste variabili. La sola cosa che noteremo sarà un più rapido avvio di Tor Browser dovuto alla mancanza dell'apparizione della finestra di connessione; tutto il resto funzionerà come prima!
ATTENZIONE: nonostante non ci siano chiare controindicazioni all'utilizzo di Tor Browser con questo metodo è comunque sconsigliato da torproject.org!
Configurazione di TorBirdy su Thunderbid
Abbiamo già visto TorBirdy e abbiamo detto che non ha un servizio Tor a complemento ma questo deve essere avviato manualmente. Adesso che abbiamo il nostro proxy Tor su macchina virtuale, dobbiamo indicare a TorBirdy dove può trovarlo.
Andiamo nel menù
, Componenti Aggiuntivi
e scegliamo Preferenze
riferito ovviamente a TorBirdy
; si aprirà una nuova scheda con un avvertimento, leggiamolo, prendiamone nota e clicchiamo su OK
. A questo punto avremo la possibilità di selezionare Utilizza impostazioni personalizzate per il proxy
e inserire le nostre coordinate:
Host SOCKS:
192.168.56.3
Porta:
9040
Salviamo e poi possiamo verificare le impostazioni del proxy con l'apposito tasto per verificare che tutto sia correttamente configurato.
Configurazione dei DNS
Per utilizzare il risolutore dei nomi di dominio fornito da tor sulla nostra macchina host dobbiamo modificare i DNS, semplicemente inserendo come indirizzo quello della nostra macchina virtuale (192.168.56.3). Potete aiutarvi con questi articoli per Windows e Linux mentre per Mac possiamo vederlo velocemente adesso: clicchiamo sulla mela
in alto a sinistra, Preferenze di sistema
, Network
, scegliamo la rete sulla quale vogliamo impostare i DNS e clicchiamo su Avanzate
poi DNS
e +
; inseriamo anche qui il solito indirizzo.
Come possiamo notare, in nessun caso abbiamo la possibilità di scegliere una porta per i DNS; quella che abbiamo impostato sarebbe la 9053 ma per convenzione il traffico DNS passa per la porta 53. Non dobbiamo preoccuparci di questa "mancanza": le chiamate DNS troveranno da sole la strada giusta da seguire!!
Configurazione altri programmi
Adesso che abbiamo il nostro proxy tor, niente ci vieta di utilizzarlo con qualunque altro programma vogliamo (fanno eccezione solo i programmi torrent: vi ricordo che utilizzare torrent attraverso tor rende facile essere deanonimizzati... non vorremo aver fatto tanto lavoro per nulla, no??).
Tor offre un proxy socks (non http) e può essere facilmente configurato in tutti quei programmi che offrono la possibilità di impostare questo tipo di proxy (anche con un componente aggiuntivo, in caso di browser). Tuttavia ci sono programmi che non offrono questa possibilità e in alcuni casi, altri programmi, pur con il proxy regolarmente impostato, si lasciano "scappare" del traffico al di fuori del proxy (per esempio, Google Chrome: non c'è nessuna estensione Proxy o VPN che sia che riesce ad imbrigliare il traffico generato dal Flash Player integrato!). Come fare in questi casi? Per gli utenti Mac e Linux c'è un apposito demone redsocks: correttamente configurato con l'aiuto anche questa volta di iptables, consente di "forzare" qualunque programma si voglia a passare attraverso il nostro proxy. Una soluzione più semplice è quella di utilizzare Proxychains; questo programma riesce a imbrigliare tutto il traffico generato da un programma lanciato come opzione a proxychains stesso ma prima dobbiamo modificare il file di configurazione per farlo puntare al nostro proxy. Editiamo quindi il file /etc/proxychains.conf (adesso siamo sulla nostra macchina host, potremo utilizzare il nostro editor di testo preferito; il mio rimane sempre nano):
sudo nano /etc/proxychains.conf
aggiungendo in fondo, nell'ordine, tipo, indirizzo e porta del nostro proxy:
socks5 192.168.56.3 9040
A questo punto, dopo aver salvato la modifica appena fatta, possiamo aprire un terminale e digitare proxychains
seguito dal nome del programma che vogliamo far passare attraverso tor, ad esempio:
proxychains google-chrome-stable --incognito
Noterete subito che la navigazione sarà rallentata ma il successo è garantito e, proprio con Google Chrome, possiamo apprezzare la differenza nell'utilizzare questo metodo: nell'immagine sotto, a sinistra con il proxy impostato tramite estensione mentre a destra utilizzando proxychains
Da notare che i due IP rilevati (immagine di destra), pur diversi, risultano essere entrambi appartenenti a nodi di uscita di tor. Il motivo per cui risultano diversi è dovuto all'isolamento dei flussi di dati per aver scelto la SocksPort (anziché una TransPort).
Un'altra alternativa anche questa molto semplice da utilizzare, ufficiale (sviluppata cioè da torproject.org), è torsocks. Anche questo programma consente di forzare qualsiasi applicazione a passare dal nostro proxy socks. L'utilizzo è semplice al pari di proxychains, una volta installato (potrebbe essere necessaria l'installazione da sorgenti) e modificato il file di configurazione /etc/torsocks.conf sostituendo ai valori preimpostati i nostri, soliti, valori:
TorAddress 192.168.56.3
TorPort 9040
è sufficiente aprire un terminale/console e digitare:
torsocks on
Seguito da invio; un messaggio ci avviserà che qualunque altro comando digitato sul terminale/console sarà "tor-ificato". Questo almeno secondo il manuale ma durante i miei test ho notato che torsocks non riesce a gestire correttamente tutte le applicazioni (il già citato Google Chrome, per esempio, non viene nemmeno preso in considerazione da torsocks) per questo NON lo consiglio.
Per gli utenti Mac, segnalo anche Proximac che non ho avuto modo di provare. Per Windows, invece, non ci sono programmi gratuiti e, tanto meno, opensource, da poter sfruttare. Ci si può affidare solo ad alternative commerciali che, dato il periodo di 30 giorni di prova offerto, ho avuto modo di provare:
La configurazione di Proxycap è molto semplice; una volta installato e riavviato il sistema si può configurarlo creando un nuovo proxy
con i soliti dati (socks5, 192.168.56.2, 9040) e poi, in Rules
, specificare quali e quanti programmi si vuole far passare attraverso il proxy. Anche in questo caso la prova del Flash Player è superata!
Proxifier ha una configurazione un po' meno intuitiva ma sempre gli stessi parametri vanno impostati. Da segnale che è disponibile una versione portable (che non necessita di installazione). Anche Proxifier (pur in versione portable) riesce a controllare il traffico generato dal Flash Player!
Si può fare di più!
Il lavoro fatto fin qui non è certo poco ma è bene sapere che la nostra macchina virtuale così configurata ci permette di fare molto di più e può essere ulteriormente migliorata/espansa/ampliata nelle funzionalità!
Uno dei miglioramenti da fare è sicuramente attivare una porta socks per ogni programma che vogliamo utilizzare attraverso tor.
Possiamo installare Privoxy e configurarlo come proxy "a monte" di tor, in questo modo potremo filtrare le pubblicità durante la navigazione, aumentare la nostra riservatezza e avremo a disposizione anche una porta dedicata per un proxy http.
Potremo anche ospitare un "hidden service" e creare un nostro sito/cloud personale, raggiungibile da qualunque parte del mondo attraverso la rete tor e senza necessità di avere un IP statico.
Potremo anche decidere di collaborare al progetto tor e cedere parte della nostra banda di connessione, trasformando il nostro proxy in un nodo "di mezzo" (è assolutamente sconsigliato diventare un nodo d'uscita!!); in questo modo anche il nostro anonimato ne guadagnerebbe perché sarà più difficile capire quali connessioni alla rete tor sono fatte da noi e quali sono generate dal traffico fra i nodi...
Insomma se abbiamo voglia, non siamo che all'inizio!