Tag: tunnel

  • sshuttle: creiamo una VPN (via transparent proxy) con SSH

    In passato vi ho spiegato come creare un tunnel SSH per poter “tunnelizzare” il traffico Internet usando da tramite un server che esponeva il demone sshd. La scomodità di questa soluzione risiede nell’ultimo passo: dobbiamo impostare un tunnel SOCKS per ogni programma di cui vogliamo tunnelizzare il traffico. Ok, questo può non essere una scomodità vera e propria, tuttavia: per esempio, vogliamo tunnelizzare solo il traffico del browser [pensiamo di trovarci in una rete pubblica], mentre il traffico SSH [già cifrato] non ha bisogno di essere tunnelizzato.

    Oggi facciamo un passo oltre: vogliamo sfruttare la connessione SSH che abbiamo per tunnelizzare  tutto il traffico attraverso SSH. Questo è equivalente a creare una VPN con il server remoto, ma l’unica differenza importante è che non si creano interfacce di rete aggiuntive!

    Di conseguenza, l’host locale (che chiamiamo client) instaurerà una connessione SSH verso il server che si assumerà la responsabilità di instaurare la connessione verso gli altri host e di fare da “passacarte” verso il client. La configurazione è molto utile nel caso in cui il client si trovi ad utilizzare una rete pubblica non sicura (pensiamo ad esempio a Starbucks) ma allo stesso tempo voglia che tutto il traffico sia cifrato per evitare problemi di sniffing.

    Il software che ci permette di costruire la VPN (vi ricordo che non è a tutti gli effetti una VPN, anche se ne si hanno tutti i benefici) è sshuttle, disponibile per Linux e OSX.

    Una volta installato solo sul client (lo trovate nei repo di Ubuntu e in homebrew), vi consiglio di configurarlo per fare il forward di tutto il traffico (comprese le richieste DNS) nel seguente modo:

    ./sshuttle --dns -vvr username@sshserver 0/0

    [Nota: 0/0 è uno shortcut per 0.0.0.0 – se volete modificarlo per fare selective routing verso il tunnel di una particolare subnet, sapete cosa dovete modificare ;)]

    Per i più curiosi, ecco una piccola spiegazione di cosa c’è under the hood di sshuttle.

  • Creare un tunnel ssh dinamico con openssh (Linux, MacOSX, *BSD, UNIX-based OSes) e relativo use-case per Firefox

    Un po’ di tempo fa vi avevo spiegato come creare un tunnel ssh usando PuTTY, il client ssh per eccellenza su Windows.
    Ora, visto che ci siamo evoluti e siamo passati ad un sistema operativo che si basa su UNIX (come ad esempio Linux, MacOSX, Solaris, *BSD, o comunque una qualsiasi piattaforma che supporti openssh), vi spiegherò come creare un tunnel ssh usando questi sistemi operativi.

    Anche qui dobbiamo prima verificare due requisiti fondamentali:

    • di avere installato sulla macchina client (quella che deve usufruire del tunnel) openssh
    • di avere a disposizione una macchina server che metta a disposizione accesso ssh (openssh-server), che sia raggiungibile sulla porta 22/tcp (o se l’avete cambiata sapete anche su quale porta deve essere raggiungibile) e su cui abbiate utenza.

    Se avete bisogno di un tunnel ssh sono certo che sappiate come mettere in piedi queste due cose, e che sappiate già perché vi serve un tunnel ssh.

    Bene, continuiamo. Apriamo un terminale e digitiamo: ssh -D 31337 -f -C -q -N user@remoteserver

    dove user@remoteserver è il server che mette a disposizione l’accesso ssh e su cui abbiamo utenza con utente user. Vi sarà richiesto di inserire la password per l’utente user, inseritela e il tunnel verrà creato [se avete impostato l’accesso tramite chiavi asimmetriche, non dovrete digitare alcuna password].

    Veniamo alla spiegazione dei vari parametri, in modo che possiate customizzare il comportamento del tunnel:

    • -D 31337: imposta un tunnel che faccia il forward verso un indirizzo dinamico, impostato sulla porta specificata come argomento (in questo caso 31337/tcp)
    • -f: forza ssh ad andare in background dopo che abbiamo effettuato il login correttamente
    • -C: abilita la compressione
    • -q: disabilita gli warning dall’output
    • -N: non eseguire alcun comando remoto (visto che dobbiamo solo creare un tunnel)

    La creazione del tunnel è finita! Il vostro tunnel è attivo su localhost:31337 e se avete impostato tutto con criterio potete iniziare ad utilizzarlo.

    Un use-case interessante è configurare il browser Firefox per la navigazione facendo in modo che tutto il traffico sia routato attraverso il tunnel appena creato. Apriamo Firefox e digitiamo about:config nella barra dell’indirizzo. Digitate proxy nella barra del filtro, e vi comparirà la seguente schermata:

    Le voci a cui siamo interessati sono quelle marchiate da un bollino rosso, e dobbiamo modificarle a:

    • network.proxy.no_proxies_on : localhost, 127.0.0.1
    • network.proxy.socks : 127.0.0.1
    • network.proxy.socks_port : 31337. Questa opzione, come avete capito, specifica la porta su cui è attivo il tunnel
    • network.proxy.socks.remote_dns : true. Questa opzione è la più importante, perché permette di fare il forward delle richieste DNS all’host remoto. Consiglio di abilitarla.
    • network.proxy.socks_version : 5
    • network.proxy.type : 1. Questa opzione specifica se utilizzare le impostazioni appena definite per il tunnel (= 1) oppure no (= 0).

    Ora il test finale: usando Firefox controllate quale sia il vostro indirizzo IP. Se vi compare l’indirizzo del vostro server remoto, allora il tunnel funziona alla perfezione. Viceversa, c’è qualcosa di sbagliato nella vostra configurazione; ripartite dall’inizio e controllate che tutto sia configurato correttamente.

  • Come creare un tunnel SSH dinamico con PuTTY

    imageAvete bisogno di un tunnel SSH? Ci sono molteplici ragioni per utilizzarlo; se state cercando di realizzare un tunnel sicuramente ne avrete già in mente (almeno) una.

    Passiamo all’opera. Requisito fondamentale: un server Linux con accesso ssh e che permetta ssh tunneling (Ubuntu e quasi tutte le altre distribuzioni con openssh-server di default lo permettono).

    Apriamo PuTTY e cominciamo:

    1. Inserite l’host del vostro server come in figura
    2. Spostatevi nel tab Connection -> SSH -> Tunnels
    3. Nel campo Destination, impostate Dynamic
    4. Scegliete una porta TCP che sapete essere libera sulla vostra macchina locale (un numero >= 1024 potrebbe andare bene) e inserite il numero nel campo Source portimage
    5. Premete Add
    6. Premete ora su Open, connettetevi al vostro server in ssh specificando username e password e lasciate aperta la sessione

    A questo punto il tunnel è creato su localhost, sulla porta TCP che avete specificato come source port: aprite il programma con cui volete sfruttare il tunnel appena creato e specificate di usare un proxy SOCKS5 con indirizzo localhost e come porta la source port che avete scelto.

    A titolo di esempio, usiamo Firefox per sfruttare il tunnel appena creato:

    1. Aprite Firefox
    2. Controllate su www.whatismyip.com quale sia il vostro indirizzo IP e annotatelo
    3. Andate in Strumenti -> Preferenze
    4. Andate su Avanzate e poi nel tab Rete, poi su Connessioni e infine Impostazioni
    5. Cliccate su “Configurazione manuale dei proxy” e inserite nel campo Host SOCKS: l’indirizzo IP del computer locale (127.0.0.1) e come porta la source port che avete scelto in PuTTY (nel mio caso, la 17222)image
    6. Cliccate su OK e chiudete tutte le opzioni che avete aperto
    7. Aprite di nuovo il sito www.whatismyip.com e controllate l’indirizzo IP: se il tunnel sta funzionando correttamente, l’indirizzo IP mostrato è diverso da quello visualizzato al punto 2.