Connessioni SSH attraverso un proxy HTTP
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)