SOCKS5 proxy con SSH

Questa guida descrive i passi necessari per creare un proxy SOCKSv5 tramite un tunnel SSH.

SOCKS è un particolare proxy che permette l'instradamento di pacchetti tra IP di reti differenti ed a differenza dal famoso HTTP Proxy è indipendente dal protocollo che si desidera utilizzare (es. HTTP, FTP, POP3, IMAP, etc.) e può essere utilizzato sia per le connessioni TCP che UDP, in questo modo possono essere “bybassate” le eventuali restrizioni sulla rete in cui ci troviamo. SOCKS inoltre supporta differenti metodi di autenticazione e permette di anonimizzare la connessione.

In questa utilizzaremo un proxy SOSKS attraverso un tunnel SSH in modo da aumentare la sicurezza criptando la connessione.

  • Un server con il demone sshd attivo
  • Un collegamento ad Internet
  • Una macchina client con ssh
  • Un browser che supporti SOCKS (ad es. Mozilla Firefox)

Dal server attiviamo il demone sshd e se necessario creiamo anche un utente UNIX che ci servirà per l'autenticazione.

Dal client, apriamo il terminale e digitiamo:

$ ssh -D 8888 -Nn -f [email protected]

Adesso spieghiamo le opzioni inserite:

  • -D, effettua il port-forwarding del server remoto su una porta locale
  • -N, non esegue nessun comando sul server remoto
  • -f, esegue il client ssh in background

Sempre da client apriamo il nostro browser preferito ad esempio Mozilla Firefox e configuriamo le opzioni relative al server proxy:

  • Apriamo le Preferenze
  • Andiamo su AvanzateRete
  • Clicchiamo su Impostazioni…
  • Inseriamo nei campi relativi a Host SOCKS l'host e la porta (nel nostro caso localhost e 8888)
  • Selezioniamo SOCKS v5 e DNS Remoto

L'opzione DNS Remoto permette di far effettuare le richieste DNS direttamente dal server remoto (ovvero il server SOCKS). Questa opzione è utile nel caso il server DNS che si sta utilizzando blocca la risoluzione di alcuni siti (ad es. nelle reti aziendali).

Apriamo il nostro editor di testo preferito ed incolliamo le seguenti righe di codice:

#!/bin/bash
 
LOCAL_PORT="8888"
REMOTE_HOST="example.org"
REMOTE_USER="user"
 
ssh -D ${LOCAL_PORT} -Nf ${REMOTE_USER}@${REMOTE_HOST}

Modifichiamo le variabili LOCAL_PORT, REMOTE_HOST e REMOTE_USER con i nostri dati, eseguiamo lo script ed il gioco è fatto!

Buona navigazione!