Connessioni SSH attraverso un proxy HTTP

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca

Introduzione

Ci troviamo in una rete che filtra il traffico in uscita e permette solo connessioni tramite protocollo HTTP attraverso un proxy e vogliamo poterci connettere ad un server Debian remoto attraverso SSH. Il firewall sulla rete blocca il traffico SSH in uscita e il server Debian remoto risulta non raggiungibile.

La soluzione: configurare un tunnel HTTP

Con pochi passi è possibile aggirare l'ostacolo e configurare un tunnel HTTP, che altro non è se non una "tecnica utilizzata nel campo della trasmissione di dati digitali per veicolare informazioni che normalmente utilizzano altri protocolli, attraverso lo standard HTTP (creando cioè un "tunnel" attraverso la connessione Http). Tale tecnica viene utilizzata anche per bypassare i firewall, utilizzando tipologie di connessioni non bloccate per effettuare altre operazioni che normalmente verrebbero filtrate." (fonte Wikipedia)

Prima di procedere con la configurazione è bene sapere che la creazione di un tunnel HTTP può andare in contrasto con le policy aziendali di rete; si consiglia di discutere del problema con gli amministratori di rete per evitare possibili sanzioni o richiami.

Installazione del software

Il software utilizzato in questa guida si chiama corkscrew: un semplice strumento per creare tunnel in cui far passare connessioni TCP attraverso un proxy HTTP che supporta il metodo CONNECT. Durante la connessione legge da stdin e scrive su stdout, proprio come netcat. (fonte Debian Package Description)
Procediamo con l'installazione:

# apt-get install corkscrew

Se il proxy che vogliamo attraversare utilizza l'autenticazione, dobbiamo informare corkscrew sul nome utente e la password da utilizzare. Per fare questo creiamo un file di autenticazione nella nostra home:

$ cd
$ nano .corkscrew.auth

Il contenuto del file devono essere solamente il nome utente e la password da utilizzare, separati da due punti:

ferdy:passwordferdy

Salvate il file, rendetelo leggibile solo dal proprietario (chmod 600 .corkscrew.auth) e procedere alla configurazione di SSH.

Configurazione di SSH

Arrivati a questo punto dobbiamo dire a SSH di utilizzare corkscrew per creare un tunnel. Apriamo il file ~/.ssh/config:

$ nano /home/ferdy/.ssh/config)

e aggiungiamo le linee seguenti:

Host *
ProxyCommand corkscrew proxyhostname proxyport %h %p /home/ferdy/.corkscrew-auth

Ovviamente sostituite:

  • ferdy con il vostro nome utente
  • proxyhostname con il nome o l'indirizzo IP del proxy
  • proxyport con il numero di porta utilizzato dal proxy


Nota: se il proxy da attraversare non usa autenticazione eliminate la parte /home/ferdy/.corkscrew-auth dal file precedente.

Quello che abbiamo appena fatto è stato di istruire SSH a utilizzare il comando ProxyCommand per creare una connessione con tutti i PC remoti (Host *). Il comando ProxyCommand invoca il software corkscrew per creare una connessione verso il proxy utilizzando le credenziali specificate nel file di autenticazione.
Nel comando vengono utilizzate due variabili:

  • %h: è la variabile di configurazione di SSH che indica l'hostname del PC
  • %p: è la variabile di configurazione di SSH che indica la porta su cui lavorare

Attivare la connessione

A questo punto il semplice comando:

$ ssh hostremoto.com

dovrebbe permetterci la connessione.

--Ferdybassi 15:20, 21 ott 2010 (CEST)