Openvpn over Squid (with NTLM auth)

Tanti pensano che saltare il firewall aziendale in ufficio serva solo a “farsi i cazzi propri”, sbattendosene delle policy del content filter sul web (social network, siti bannati, download brutali, etc etc): bene hanno ragione ahahaha …scherzoooo !!! 😀 ..la cosa che più mi da fastidio (almeno da quando non mi occupo di Networking nel posto in cui lavoro ahahah ) è che qualcun’altro oltre me possa (teoricamente) sfogliare i siti che visito..altre cose invece non mi infastidiscono ma, ancora peggio, mi limitano nell’uso dei protocolli di comunicazione che uso per informarmi (irc ad esempio) o quelli che uso addirittura per lavoro stesso ssh, ftp, nfs, vpn, rsync, etc. etc.
(in realtà nel mio caso esistono altri motivi, uno tra tutti il funzionamento a cazzo del gestore dei pacchetti della mia distribuzione linux in concomitanza ad un proxy che richiede autenticazione ntlm)

Tempo fa scrissi un articolo dove in due righe descrivevo le mosse per effettuare una vpn che
consentisse di non usare un proxy e utilizzare una propria macchina remota come gateway,
in quel caso pero’ la macchina remota potevo raggiungerla perchè avevo un exception su quel ip..
come promesso già ai tempi, vediamo come ottenere la stessa identica possibilità senza avere
questa volta nessun privilegio da networker raccomandato :P.

Analizziamo schematicamente cosa fare per risolvere:
problema-> per uscire sul web, anzi piu’ precisamente proprio su internet, si è obbligati a passare dal proxy, cio’ quindi vale sia per il protocollo http (porta 80) sia per https (443)
soluzione-> da questo momento la vpn nella mia macchina remota girerà sulla 443, in questa
maniera potro’ cmq raggiungerla passando per il proxy.

Il primo problema da superare è che nella mia macchina remota la porta 443 è già in uso dal
mio webserver (ssl), come faro’ a fargli girare pure la vpn avendo a disposizione un solo ip?

La soluzione è sslh un multiplexer che, in ascolto sulla 443, capisce autonomamente (header dei primi pacchetti in arrivo) dove buttarti, sito web, vpn o ssh per esempio..
Ecco un esempio di configurazione di /etc/conf.d/sslh:

RUN=yes
STARTTIME=2
DAEMON_OPTS=”-u root -p ippubblico:443 –ssh 127.0.0.1:1022 –openvpn ippubblico:1194 –ssl 127.0.0.1:1443 -P /var/run/sslh.lock”

cio’ significa che questo demone rimarrà in ascolto sulla 443 e forwarderà le chiamate su sshd
che gira sulla 1022, sulla vpn (1194) o sul webserver (1443).
Ovviamente, prima di startare sslh,bisognerà bindare questi 3 servizi sulle porte specificate su.

Il secondo problema da superare è stato un po’ più complesso e ha richiesto un po’ più di tempo.
Il problema deriva dal fatto che il proxy (squid) nel mio caso prevede autenticazione NTLM
(brrrrrrrr si avete capito bene NTLM 😀 ) per carità nulla di strano se non fosse che squid ed
ntlm sono due entità poco amiche (penso che conosciate tutti bene i motivi…) e sopratutto il
loro uso congiunto è poco maturo e genera non pochi problemi se chi deve autenticarsi non è un
normale browser, come un proxy http si aspetta, ma un client per una vpn.
Dopo diverse prove (ho addirittura modificato i sorgenti di openvpn scopiazzando quello che
sniffavo durante normali sessioni autenticate con successo con firefox) ho optato per usare…..
indovinate? …Un altro proxy!… Praticamente ho installato un proxy nel mio portatile che
effettuava lui stesso le autenticazioni passandole a vpn… praticamente un relay 🙂

in questa maniera questa entità effettuava lei stessa l’auth ntlm sul proxy squid fingendosi un
browser e girava poi la connessione ottenuta al client vpn.
Non vi ho detto ancora come si chiama questo diciamo..proxyrelayer
(o come volete definirlo):
cntlm (in realtà ne esistono almeno altri due software open che fanno lo stesso
lavoro). L’ho configurato semplicemente aggiungendo:

Username
Domain
Password Header User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)

cioè l’utenza ntlm da autenticare e l’header per fregare squid fingendosi un browser…

in questa maniera openvpn bindato nella mia vps sulla 443 viene raggiunto dal client openvpn che
specifica come http-proxy quello locale (cntlm).
Ecco a seguire il conf del client (il server.conf rimane praticamente lo stesso di quel articolo
di tempo fa.. ma bindato sulla 443):

remote ipVPS
rport 443
proto tcp-client
tls-client
dev tap

ca ca.crt
key client1.key
cert client1.crt

pull
verb 6
comp-lzo

http-proxy 127.0.0.1 3128

http-proxy-option AGENT Mozilla/5.0+(Windows;+U;+Windows+NT+5.0;+en-GB;+rv:1.7.6)+Gecko/20050226+Firefox/1.0.1
http-proxy-option VERSION 1.0
http-proxy-retry

una volta istaurata la connessione alla vpn, come facevo già una volta (quando avevo l’ip in
exception), in perfetta sintonia con le policy aziendali, creo una rotta (network) per utilizzare
la mia vps come gateway per internet e il gateway aziendale per la lan (e raggiungere i servers
dove lavoro)
ip route add IPmiaVPS via IPgwAziendale (mantiene la connessione con la vpn nonostante il
comando qui sotto)
ip route del default (cancella la rotta di default gateway)
ip route add default via IPtap0 (crea la nuova rotta di default gateway)
ip route add 10.0.0.0/8 via IPgwAziendale dev eth0 (utilizzo il gateway aziendale per
raggiungere una classe 10.0.0.0/8)
ip route add 192.168.3.0/24 IPgwAziendale dev eth0 (come sopra per raggiungere un altra
classe 192.168.3.0/24)

da questo momento posso aprire il mio bel firefox togliendo il proxy dalle impostazioni e navigare
usando l’ip della mia vps (che di fatto effettua le connessioni) ma sopratutto non essere loggato
dal proxy e assicurare la mia privacy.
Salut!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.