Home Area Tecnica Amministrazione di Sistema Come saltare il proxy «blocca-tutto» aziendale

Donazioni

Ti è piaciuto questo articolo? Fai una donazione di all'autore affinché ne scriva altri!
[suggerimento: offri 1€ o 2€ - PayPal trattiene circa 0.40€]

Servizi

Elenco dei Professionisti e Consulenti ICT
L'avvocato risponde
Libri Consigliati
Cerco e Offro Lavoro ICT

Sponsor

GALLACCI.COM

I più attivi

Dati e punteggi dell'ultimo anno

Rodolfo Giometti Rodolfo Giometti
121 articoli
32.063 punti totali
Calogero Bonasia Calogero Bonasia
87 articoli
13.278 punti totali
Giovanna Casamassima Giovanna Casamassima
16 articoli
0.789 punti totali
Nanni Bassetti Nanni Bassetti
15 articoli
0.507 punti totali
Luigi Carbone Luigi Carbone
7 articoli
0.198 punti totali

I più votati

  1. Rodolfo Giometti
    - 100%
  2. Calogero Bonasia
    - 100%
  3. Luigi Carbone
    - 100%
  4. Nanni Bassetti
    - 100%

Web Partner

CFI - Computer Forensics Italy
Better Software 2010
Area Networking
ILIT match 2010
TechnologyBIZ
WorkCity
spiare.com

Ci hanno visitato

Oggi:44
Ieri:957
Totali (14/04/09):190243

I nostri numeri

Articoli pubblicati: 337
Iscritti al portale: 258
Iscritti all'Elenco: 125
Iscritti ML Discussioni: 222
Iscritti ML Articoli: 14
Iscritti ML Lavoro: 106
Come saltare il proxy «blocca-tutto» aziendale Stampa E-mail
(0 voti, media 0 di 5)
Area Tecnica - Amministrazione di Sistema
Scritto da Rodolfo Giometti   

Mi capita spesso, ma non sempre, di andare da dei miei clienti e non potermi connettere al computer dell'ufficio perché è presente un proxy (con firewall annesso) che blocca tutte le connessioni tranne quelle HTTP(s).

Per me è un grosso problema perché se dovessi leggere la posta privata o accedere ad un documento che sta sul mio server, tramite connessione SSH, non potrei farlo!

Per fortuna che cercando un po' in rete ho trovato una soluzione la quale, sebbene un po' macchinosa, mi permette di fare login via SSH sulla mia macchina anche in presenza di «protezioni» aziendali di questo tipo.

La soluzione è quella di usare un tunnel con APACHE-proxy dove far passare una connesisone SSH.

Quello che vi serve quindi è un server Apache opportunamente configurato in grado di aprirvi una connessione sulla porta 22 del vostro server SSH. Vediamo come ho fatto io.

Innanzi tutto creiamo un server virtuale ad hoc. Utilizzeremo questo server per il nostro tunnel e quindi possiamo ridirigere tutte le altre richieste HTTP su di un'altro URL; io uso l'indirizzo web del mio studio.

Ecco cosa ho messo nel file di configurazione

goldrake:/etc/apache2/sites-available# cat virtual.ssh.enneenne.com
<VirtualHost *:80>
        ServerName ssh.enneenne.com
        ServerAlias ssh.enneenne.it
        ServerSignature Off
        Redirect / http://www.enneenne.com/

        ErrorLog /var/log/apache2/ssh.enneenne.com-error.log
        CustomLog /var/log/apache2/ssh.enneenne.com-access.log common

        # THIS IS THE CONFIG NEEDED FOR OUR TUNNELLING
        # Deny all proxying by default...
        <Proxy *>
                Order deny,allow
                Deny from all
         </Proxy>      
        # Allow proxy connect (forward-proxy) to servers only on port 22 (SSH)
        ProxyRequests On
        AllowConnect 22
        HostnameLookups On

        # Access is controlled here based on source host/IP instead of user auth.
        <ProxyMatch ssh\.enneenne\.com>
                Order deny,allow
                Allow from all
        </ProxyMatch>
</VirtualHost>

In questo modo ogni connesisone HTTP a ssh.enneenne.com viene rediretta a www.enneenne.com, mentre le richieste proxy a ssh.enneenne.com verso la porta 22 verranno accettate.

Ora attiviamo il virtual host:

goldrake:/etc/apache2/sites-available# cd ../sites-enabled/
goldrake:/etc/apache2/sites-enabled# ln -s ../sites-available/virtual.ssh.enneenne.com 900-ssh.enneenne.com

e quindi il mod_proxy che implementa il meccanismo:

goldrake:/etc/apache2/sites-enabled# cd ../mods-enabled/
goldrake:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.* .
goldrake:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy_connect.load .

poi facciamo ripartire Apache per rendere effettive le modifiche:

goldrake:/etc/apache2/mods-enabled# /etc/init.d/apache2 restart

Testiamo il server con una normale connessione HTTP:

giometti@jettarobot:~$ links2 -dump ssh.enneenne.com
Studio EnneEnne
Menu                 [USEMAP]                  Adsense
Home                   Fortune cookie           Calendar
What                  Absent, adj.:                     June 2010
Where                 Exposed to the attacks   Sun Mon Tue Wed Thu Fri Sat
Staff                 of friends and                   1   2   3   4   5
GITweb                acquaintances; defamed;  6   7   8   9   10  11  12
Projects              slandered.               13  14  15  16  17  18  19
Wiki                                           20  21  22  23  24  25  26
Demos                                          27  28  29  30
Archive                                         Partners
Links                                                      GNU
News                                           Trinity
New Office                                       GNU GNU           Linux
(11/08/2008)                                         Debian Debian
...

Perfetto! Il redirect funziona.

Nota: ho dovuto aggiungere al mio DNS il nome dell'host ssh.enneenne.com.

Ora occorre installare un programmino che ci dovrà creare il tunnel sul nostro client: useremo proxytunnel. La mia Ubuntu non ha un pacchetto pronto, quindi me lo sono scaricato dal sito e me lo sono compilato.

Ecco come:

giometti@jettarobot:/opt$ svn co https://proxytunnel.svn.sourceforge.net/svnroot/proxytunnel/ proxytunnel
giometti@jettarobot:/opt$ cd proxytunnel/trunk/proxytunnel/
giometti@jettarobot:/opt/proxytunnel/trunk/proxytunnel$ sudo aptitude install libssl-dev  asciidoc
giometti@jettarobot:/opt/proxytunnel/trunk/proxytunnel$ make && make install

Una volta finito provo a fare un collegamento di prova verso il mio server Apache:

giometti@jettarobot:/opt/proxytunnel/trunk/proxytunnel$ proxytunnel -v -p 10.0.1.21:3128 -r ssh.enneenne.com:80 -d localhost:22 -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\nHost: www.example.com\nContent-Length: 0\nPragma: no-cache"
Connected to 10.0.1.21:3128 (local proxy)

Tunneling to ssh.enneenne.com:80 (remote proxy)
Communication with local proxy:
-> CONNECT ssh.enneenne.com:80 HTTP/1.1
-> Host: ssh.enneenne.com:80
-> Proxy-Connection: Keep-Alive
-> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\nHost: www.example.com\nContent-Length: 0\nPragma: no-cache
<- HTTP/1.0 200 Connection established

Tunneling to localhost:22 (destination)
Communication with remote proxy:
-> CONNECT localhost:22 HTTP/1.1
-> Host: localhost:22
-> Proxy-Connection: Keep-Alive
-> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\nHost: www.example.com\nContent-Length: 0\nPragma: no-cache
<- HTTP/1.1 200 OK
<- Date: Thu, 10 Jun 2010 08:39:02 GMT
<- Server: Apache/2.2.13 (Debian)
<- X-Powered-By: PHP/5.2.11-1
<- Transfer-Encoding: chunked
<- Content-Type: text/html

Tunnel established.
1f76

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Studio EnneEnne</title>
<link href="/config/style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff">
...

Come si vede il giro è chiaro: dal mio client (jettarobot) mi collego al proxy locale blocca-tutto (10.0.1.21:3128) il quale farà la richiesta proxy sulla porta 80 di ssh.enneenne.com che poi girerà la richiesta di connect sulla porta 22 sempre di ssh.enneenne.com (indicato nell'esempio con localhost:22 poiché l'indirizzo è relativo al proxy remoto).

Ci siamo, per chiudere il cerchio devo solo dire ad SSH di passare per proxytunnel. Basta aggiungere al file ~/.ssh/config le righe:

giometti@jettarobot:~$ cat ~/.ssh/config
Host ssh.enneenne.com
DynamicForward 1080
ProxyCommand proxytunnel -v -p 10.0.1.21:3128 -r %h:80 -d %h:%p -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\nHost: www.example.com\nContent-Length: 0\nPragma: no-cache"
ServerAliveInterval 30

Il comando ServerAliveInterval serve per evitare che la connessione cada da sola.

A questo punto se provo la connessione SSH ottengo:

giometti@jettarobot:~$ ssh ssh.enneenne.com
Connected to 10.0.1.21:3128 (local proxy)

Tunneling to ssh.enneenne.com:80 (remote proxy)
Communication with local proxy:
-> CONNECT ssh.enneenne.com:80 HTTP/1.1
-> Host: ssh.enneenne.com:80
-> Proxy-Connection: Keep-Alive
-> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\nHost: www.example.com\nContent-Length: 0\nPragma: no-cache
<- HTTP/1.0 200 Connection established

Tunneling to ssh.enneenne.com:22 (destination)
Communication with remote proxy:
-> CONNECT ssh.enneenne.com:22 HTTP/1.1
-> Host: ssh.enneenne.com:22
-> Proxy-Connection: Keep-Alive
-> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\nHost: www.example.com\nContent-Length: 0\nPragma: no-cache
<- HTTP/1.0 200 Connection Established
<- Proxy-agent: Apache/2.2.13 (Debian)

Tunnel established.
Password:
Linux goldrake 2.6.30-1-686 #1 SMP Sat Aug 15 19:11:58 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jun 11 11:39:05 2010 from goldrake.enneenne.com
giometti@goldrake:~$

Bingo! Come si vede anche dai file di log del server SSH (che poi è lo stesso dove gira anche Apache) la connessione viene vista come se fosse fatta dal server localhost (l'IP 192.168.32.10 è un indirizzo locale per il server) e non dal client remoto:

goldrake:/etc/apache2/sites-available# tail -f /var/log/auth.log

Jun 11 13:45:08 goldrake sshd[21713]: Accepted keyboard-interactive/pam for giometti from 192.168.32.10 port 37105 ssh2

 

Commenti  

 
0 #1 RE: Come saltare il proxy «blocca-tutto» aziendaleIvan 2010-06-12 08:06
Beh,
esiste anche un modo piu semplice, impostare il nostro server ssh in ascolto sulla 443, e installarsi un programmino scritto in python che si chiama ntlmaps che si mette fra noi e il proxy, e si autentica per noi.
Io ho sempre fatto cosi, e la cosa e' molto veloce da fare.
Citazione
 
 
0 #2 RE: Come saltare il proxy «blocca-tutto» aziendaleRodolfo Giometti 2010-06-13 10:18
Citazione Ivan:
esiste anche un modo piu semplice, impostare il nostro server ssh in ascolto sulla 443, e installarsi un programmino scritto in python che si chiama ntlmaps che si mette fra noi e il proxy, e si autentica per noi.
Io ho sempre fatto cosi, e la cosa e' molto veloce da fare.

Sì, è vero a patto che rinunci ad avere un server HTTPs sulla tua macchina. :)

La mia soluzione ti permette di avere un server HTTP, HTTPs e SSH che girano ognuno sulla propria porta standard.
Citazione
 
 
0 #3 Ma hai mai pensato che...?Luca-Maria de Grazia 2010-06-18 17:45
Una domanda che non vuole certamente essere quella di quello che rompe sempre le scatole...ma ti sei mai posto il problema (dalle tue indicazioni questo non appare, né in positivo né in negativo) che così facendo [come hai descritto] stai violando le regole di quell'azienda?
E poi...l'azienda ti hai mai chiarito quali fossero tali regole? :-)
Poi, ci fidiamo reciprocamente e non succede alcunché, sino a quando.... :-))))))
Cordiali saluti.

(Avv. Luca-M. de Grazia)
Citazione
 
 
0 #4 RE: Come saltare il proxy «blocca-tutto» aziendaleRodolfo Giometti 2010-06-19 14:19
Citazione Luca-Maria de Grazia:
Una domanda che non vuole certamente essere quella di quello che rompe sempre le scatole...ma ti sei mai posto il problema (dalle tue indicazioni questo non appare, né in positivo né in negativo) che così facendo [come hai descritto] stai violando le regole di quell'azienda?

Io non ho violato un bel nulla! Mica ho firmato qualcosa... loro mi hanno solo dato un accesso ad internet con determinate caratteristiche , ed io le ho sfruttate. Mica ne ho usate altre che ho «estorto» in una qualche maniera. :)
Citazione:
E poi...l'azienda ti hai mai chiarito quali fossero tali regole? :-)

Nessuna regola, ti ripeto. Solo un accesso alla rete con delle porte aperte. Io ci son solo passato.
Citazione:
Poi, ci fidiamo reciprocamente e non succede alcunché, sino a quando....

Ma scusa, se uno ti mette in una stanza con delle porte chiuse e altre aperte e tu passi da quelle aperte, quali «regole» avresti infranto? :)
Citazione
 

Aggiungi commento


Codice di sicurezza
Aggiorna

 

PageRank Checking Icon

Settembre 2010
D L M M G V S
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2

Sondaggi

busyCaricamento Sondaggio...

Ultimi Commenti