[Server 2] File

Download Report

Transcript [Server 2] File

AIRVPN + TORRENT on RPi Si vuole creare una configurazione che protegga il nostro anonimato sulle reti torrent, senza sacrificare significativamente le prestazioni, assicurandoci l’anonimato anche in caso di (1)​
(2) vpn failover​
ed evitando gli attacchi per correlazione​
DISCLAMER: Questa guida è a solo scopo formativo, e non mi assumo alcuna responsabilità per eventuali danni o errate configurazioni che possiate provocare seguendola. Configurazione Per raggiungere tale scopo e ottimizzare i risparmi energetici, farò uso di un ​
Raspberry Pi ​
1 (model B) ­ che funziona dignitosamente, ma è consigliato almeno il modello 2 (di cui non dispongo) per via della grande mole di dati che dovrà processare. L’idea è quella di collegare il suddetto ad un servizio VPN tramite il quale dirottare il traffico Raggiungendo quindi Internet con un IP diverso dal nostro. Occorrente ●
●
●
1 Raspberry Pi (o equivalente piattaforma linux) 1 Servizio VPN (possibilmente non free) Configurazione dei software (openvpn, transmission­daemon,ufw,iptables) VPN La mia scelta cade su AirVPN​
. Ad oggi, il web pullula di servizi VPN, anche free. E molti di questi promettono la non conservazione dei log, a tutela del cliente. Al di là del fatto che questo sia vero o meno, ci sono più di un paio di considerazioni per le quali non dovreste scegliere un servizio free per questo tipo di applicazione: 1) Non vorrete mettere la vostra sicurezza in mano a un servizio free I servizi free sono spesso approssimativi nelle configurazioni e poco tempestivi nella chiusura delle falle (tipo ​
questa, abbastanza recente​
) Inoltre, un servizio VPN malconfigurato può esporvi ad attacchi di ogni tipo da ​
altri utenti all’interno della stessa VPN. ​
Per l’appunto, i servizi free sono anche più comuni all’essere inondati da botnet per attacchi automatizzati di massa 2) Possono porre limiti di traffico e/o di banda Naturalmente tra i punti del nostro obiettivo, è continuare ad usufruire dei servizi senza sacrificare le prestazioni, e sarebbe addirittura ridicolo nel caso venissimo limitati ad un totale di traffico al mese 3) Non sempre garantiscono una banda minima Questo può spesso essere causa di azioni sconsiderate da parte dell’utente, come interrompere la VPN in un momento di fretta, compromettendo la privacy 4) Non tutti permettono il port forwarding Alla base del p2p è lo scambio reciproco. Volente o nolente, dovremo esporre una porta al pubblico, se vogliamo usare con profitto nostro torrent client 5) Alcuni possono bloccare determinati protocolli Leggete sempre rigorosamente le condizioni del servizio offerto, non solo i servizi free possono bloccare i protocolli p2p e molti altri. Perciò… occhi aperti! 6) Attenzione all’uso di TOR In ogni caso, non utilizzate mai la vostra vpn come tor exit point, o l’ip verrà per lungo tempo bannato, compromettendo l’esperienza di navigazione a voi e agli altri utenti della VPN. questa direttiva è valida per tutti i servizi di VPN ma alcuni servizi a pagamento in particolare, ​
permettono la connessione alla VPN da un nodo TOR​
, rendendovi quindi anonimi alla VPN stessa. Si tratta di un livello di sicurezza in più, importante in alcune occasioni. Configurazione dei servizi necessari VPN Dato che non è disponibile alcun client AirVPN compilato per Raspberry/ARM ( ​
https://airvpn.org/enter/​
) utilizzeremo il client open source ​
openvpn​
. 1) installiamo openvpn: apt­get update && apt­get install openvpn 2) Creiamo la configurazione per AirVPN: rechiamoci sulla pagina ​
Config Generator​
e selezioniamo quanto segue: 1) Linux 2) Europe 3) Direct, protocol UDP, port 443 4) Accettiamo e premiamo su “Generate” il browser scaricherà un file di configurazione con estensione .ovpn 3) Setup di OpenVPN potete trasferire questo file di configurazione sul Raspberry con scp: scp AirVPN­config.ovpn [email protected]:/home/pi sia da Mac che da GNU/Linux. Per Windows, scaricate un programma per l’scp Copiamo la configurazione nella cartella di openvpn: mv AirVPN­config.ovpn /etc/openvpn/openvpn.conf Abilitiamo openvpn all’avvio automatico ln ­s /etc/init.d/openvpn /etc/rc3.d/S02openvpn 4) Configurazione dei forward Sul portale di AirVPN, recatevi alla pagina ​
Forwarded Ports​
e inserite la porta che volete usare per il vostro torrent client. Inserite lo stesso numero di porta sia in ​
external​
(primo campo) che ​
local ​
port.​
​
NB: dovrete fare più di un paio di tentativi, molte saranno già occupate da altri utenti Ripetete la stessa operazione con una seconda porta, se volete rendere accessibile dall’esterno ​
l’interfaccia web di transmission Fatto ciò, assicuratevi che la suddetta porta non sia nattata/forwardata verso L’esterno dal vostro router TORRENT installiamo transmission daemon con web interface per la gestione da browser: apt­get update && apt­get install transmission­daemon transmission­remote­cli il file di configurazione si trova in ​
/etc/transmission­daemon/settings.json fermate il demone di transmission prima di modificarlo: service transmission­daemon stop vi ​
/etc/transmission­daemon/settings.json oppure nano /etc/transmission­daemon/settings.json Vi rimando a ​
Questo video​
su come eseguirne la configurazione è fondamentale che impostiate la stessa ​
peer­port​
per cui avete scelto di fare il forward dal pannello di AirVPN, eventualmente, lo stesso si applica anche alla ​
rcp­port​
nel caso aveste deciso di accedervi da remoto. VPN KILL SWITCH Punto cruciale ​
della nostra configurazione, è configurare un ​
kill switch​
, ovvero un sistema che, in caso di failover/caduta della connessione VPN, impedisca al nostro applicativo torrent di scambire traffico sulla rete normale (vanificando quindi lo scopo della VPN) Dato che le VPN sono tutt’altro che infallibili, non possiamo permetterci di lasciare al caso la nostra sicurezza. Negli applicativi client AirVPN per Mac e Windows, questa funzione è disponibile semplicemente spuntando “network lock” o una voce simile. Purtroppo OpenVPN ne è sprovvisto Sopperiremo a questa mancanza con l’uso di un firewall FIREWALL Costringeremo i pacchetti a passare sulla scheda di rete della VPN (​
tun0​
) bloccando il traffico verso l’esterno per ​
eth0 Perfezione la perfezione non esiste, ma probabilmente ​
questa soluzione ​
ci si avvicina molto. Ad ogni modo, se torrent è l’unico servizio verso l’esterno che il vostro Raspberry fornisce e/o è trascurabile su quale linea questi vengano erogati, data la complessità della suddetta guida, potreste essere interessati nel trovare un Compromesso Ovvero l’uso del firewall ​
ufw ​
­ ​
U​
ncomplicated ​
F​
ire​
W​
all (che altro non è che un interfaccia semplificata di iptables) Per forzare ​
tutto il traffico ​
sulla scheda virtuale VPN ​
tun0,​
anziché dirigergli soltanto il traffico bittorrent Installazione di ufw apt­get install ufw Configurazione di ufw lanciate questi comandi, ufw si occuperà di salvare le regole permanentemente in iptables #permettiamo tutto il traffico in uscita dalla porta 443 udp (usata da openvpn per collegarsi) ufw allow out 443/udp #consentiamo l’accesso da e verso tutti gli indirizzi locali ufw allow to 192.168.1.0/24 ufw allow in from 192.168.1.0/24 ufw allow out to 192.168.1.0/24 #permettiamo il traffico tramite ​
tun0​
(scheda creata da openvpn, controllate con ifconfig) ufw allow in on tun0 from any to any ufw allow out on tun0 from any to any #impostiamo la politica di divieto per tutte le altre connessioni in entrata e uscita ufw default deny incoming ufw default deny outgoing #abilitiamo il firewall con le regole appena impostate ufw enable Abbiamo appena bloccato qualsiasi genere di traffico verso l’esterno tramite qualsiasi porta che non sia la ​
tun0 ​
di openvpn. Ottimo, no? In realtà no, perché ​
tun0 è un’interfaccia virtuale​
, che deve comunque appoggiarsi ad eth0​
per collegarsi al server VPN di AirVPN. Per questo motivo, come prima regola, abbiamo concesso la porta 443 udp verso l’esterno su tutte le interfacce di rete. Ma non è sufficiente​
, perché nel file di configurazione di openvpn: /etc/openvpn/openvpn.conf troviamo la riga remote europe.vpn.airdns.org 443 tutto ok, la porta 443 è concessa… ma come farà a collegarsi all’host europe.vpn.airdns.org se non ne conosce l’indirizzo ip? vi ricordo che abbiamo bloccato tutto, compreso le richieste dns verso l’esterno. EVITARE I CORRELATION ATTACKS Dobbiamo quindi permettere a openvpn di risolvere l’ip dell’host europe.vpn.airdns.org, per potervisi collegare, instaurare la connessione VPN e permetterci di usare l’interfaccia ​
tun0 su cui stiamo costringendo tutto il traffico Sebbene sarebbe più semplice limitarsi a concedere la porta 53 (usata per le richieste DNS) su tutte le interfacce (esattamente come abbiamo fatto per la porta 443), questo ci esporrebbe al rischio dei correlation attacks. ES: scarichiamo un torrent su vpn cifrata, ma quando transmission interroga la lista dei tracker, fa richieste dns dal n
​ostro ip reale,​
passando dalla porta 53 dell’interfaccia ​
eth0 La mia soluzione? permettere, su tutte le porte, soltanto la richiesta DNS per europe.vpn.airdns.org Così facendo, a openvpn sarà possibile risolvere l’ip e collegarsi sulla porta 443. Da questo momento in poi, tutte le altre richieste potranno passare tramite la scheda ​
tun0 (​
come il resto del traffico) Creiamo questo script in /etc/cron.d/allow­airvpn.sh #!/bin/bash iptables ­I INPUT ­p udp ­­dport 53 ­m string ­­algo bm ­­hex­string '|06|europe|03|vpn|06|airdns|03|org|' ­j ACCEPT iptables ­I OUTPUT ­p udp ­­dport 53 ­m string ­­algo bm ­­hex­string '|06|europe|03|vpn|06|airdns|03|org|' ­j ACCEPT (se vi state chiedendo il perché di questa denominazione, ​
date un’occhiata qui​
) e diamogli i permessi di esecuzione chmod +x /etc/cron.d/allow­airvpn.sh infine, creiamo una voce in /etc/crontab per eseguirlo ​
ad ogni avvio,​
dato che iptables non salva permanentemente le regole. (salvo l’uso di iptables­save e iptables­restore, che non vogliamo usare in presenza di ufw) @reboot
root
sh /etc/cron.d/allow­airvpn.sh VERIFICARE L’OPERATO Riavviamo, naturalmente. Vogliamo assicurarci che ad ogni avvio, tutto sia “up and runnning” senza necessità di nostro intervento. Ricolleghiamoci alla console e controlliamo se tutto funziona correttamente: Sono connesso ad internet? ping www.google.com PING www.google.com (173.194.45.84) 56(84) bytes of data. 64 bytes from par03s13­in­f20.1e100.net (173.194.45.84): icmp_req=1 ttl=54 time=57.9 ms 64 bytes from par03s13­in­f20.1e100.net (173.194.45.84): icmp_req=2 ttl=54 time=58.3 ms Se il risultato è simile, la risposta è affermativa Con che IP sto uscendo? wget http://ipinfo.io/ip ­qO ­ dovrebbe restituirvi un ip diverso da quello che vedete visitando la medesima pagina da un altro pc: ​
http://ipinfo.io/ip E i correlation attacks? mettiamoci in ascolto per nuove connessioni sulla porta 53 dell’interfaccia eth0 tcpdump port 53 and '(tcp­syn|tcp­ack)!=0' ­i eth0 su un’altra shell eseguiamo: ping ​
www.google.com Se nulla compare, abbiamo fatto un buon lavoro. Se compaiono le richieste, controllate le regole del firewall. a riprova di ciò, dovremmo invece vedere le richieste DNS, mettendoci in ascolto su tun0 tcpdump port 53 and '(tcp­syn|tcp­ack)!=0' ­i tun0 CONSIDERAZIONI FINALI è sconsigliabile (quando addirittura non applicabile, come per il mail server) fornire servizi esternamente, in forward su VPN di questo tipo. Specialmente se si tratta di servizi che prevedono un autenticazione, specialmente se questa non è cifrata (vedi: ftp, http, ecc) dal momento che stiamo facendo uso di una rete non di nostra proprietà. A tal proposito, possiamo utilizzare iproute e iptables per dirottare specifici servizi su una specifica scheda (​
eth0 nel nostro caso​
) evitando che questi servizi vengano erogati sulla rete VPN tramite la scheda tun0. ES: forzare su eth0 l’invio delle email (​
es:mail ­s "subject" ­r [email protected] [email protected] < a.txt​
) Abilitiamo il forwarding IPv4, decommentando ​
net.ipv4.ip_forward=1 ​
in​
/etc/sysctl.conf #Aggiungiamo una tabella di routing chiamata eth­route echo “200 eth­route” >> /etc/iproute2/rt_tables #Configuriamo la tabella appena aggiunta con un default gateway ip route add default via 192.168.1.1 dev eth0 table eth­route #Tutti i pacchetti con questo fwmark utilizzeranno la suddetta routing table ip rule add fwmark 0x1 table eth­route #Marchiamo i pacchetti desiderati così che iproute possa passarli alla routing table eth­route iptables ­I OUTPUT ­t mangle ­o tun0 ­p tcp ­­dport 25 ­j MARK ­­set­mark 1 #Riscriviamo l’scr­addr per assicurarci di ricevere le risposte iptables ­I POSTROUTING ­t nat ­o eth0 ­p tcp ­­dport 25 ­j SNAT ­­to 192.168.1.10 dove 192.168.1.1 è il gateway della rete locale e 192.168.1.10 è l’ip del raspberry. LINKS ufw basic documentation: ​
https://help.ubuntu.com/community/UFW iptables basic documentation: ​
https://help.ubuntu.com/community/IptablesHowTo openvpn official website: ​
https://openvpn.net/ transmission official website: ​
http://www.transmissionbt.com/ the TOR project: ​
https://www.torproject.org/ AirVPN website: ​
https://airvpn.org/ traffic correlation attacks: ​
https://blog.torproject.org/blog/traffic­correlation­using­netflows Route on interfaces based on port: http://unix.stackexchange.com/questions/21093/output­traffic­on­different­interfaces­based­o
n­destination­port