[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, transmissiondaemon,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: aptget update && aptget 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 AirVPNconfig.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 AirVPNconfig.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: aptget update && aptget install transmissiondaemon transmissionremotecli il file di configurazione si trova in
/etc/transmissiondaemon/settings.json fermate il demone di transmission prima di modificarlo: service transmissiondaemon stop vi
/etc/transmissiondaemon/settings.json oppure nano /etc/transmissiondaemon/settings.json Vi rimando a
Questo video
su come eseguirne la configurazione è fondamentale che impostiate la stessa
peerport
per cui avete scelto di fare il forward dal pannello di AirVPN, eventualmente, lo stesso si applica anche alla
rcpport
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 aptget 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/allowairvpn.sh #!/bin/bash iptables I INPUT p udp dport 53 m string algo bm hexstring '|06|europe|03|vpn|06|airdns|03|org|' j ACCEPT iptables I OUTPUT p udp dport 53 m string algo bm hexstring '|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/allowairvpn.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 iptablessave e iptablesrestore, che non vogliamo usare in presenza di ufw) @reboot
root
sh /etc/cron.d/allowairvpn.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 par03s13inf20.1e100.net (173.194.45.84): icmp_req=1 ttl=54 time=57.9 ms 64 bytes from par03s13inf20.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 '(tcpsyn|tcpack)!=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 '(tcpsyn|tcpack)!=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 ethroute echo “200 ethroute” >> /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 ethroute #Tutti i pacchetti con questo fwmark utilizzeranno la suddetta routing table ip rule add fwmark 0x1 table ethroute #Marchiamo i pacchetti desiderati così che iproute possa passarli alla routing table ethroute iptables I OUTPUT t mangle o tun0 p tcp dport 25 j MARK setmark 1 #Riscriviamo l’scraddr 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/trafficcorrelationusingnetflows Route on interfaces based on port: http://unix.stackexchange.com/questions/21093/outputtrafficondifferentinterfacesbasedo
ndestinationport