ISA Firewall/Proxy sucks! -or- How to make it disappear!

Thursday, 18. November 2010

Wir befinden uns in einem Netzwerk das duch einen Microsoft ISA firewall/proxy Server gesichert ist und uns bis auf http:/ und vielleicht https:/ nicht gestattet mit der Ausserwelt zu kommunizieren.

xmpp, imap, pop3, ftp, ssh, etc. alles zu …. aufgeben? >> Link No Way !!

Die Idee um dieses Problem in den Griff zu bekommen ist folgende: Durch einen http Tunnel wird ein ssh Tunnel aufgebaut. Durch diesen ssh Tunnel wird ein vpn Tunnel aufgebaut. Der gesamte Netzwerktraffic wird durch diesen OpenVPN Tunnel in die Freiheit geroutet.

Wir benötigen:

openssh-server – um genau zu sein einen Server im WeltWeitenNetz der uns gehorcht, dessen ssh Server wir umkonfigurieren können, sodass er auf Port 443 lauscht.

cntlm (cntlm – Fast NTLM authentication proxy with tunneling) http://iitmlug.a.wiki-site.com/index.php/Cntlm

openvpn (openvpn – virtual private network daemon) Der openvpn Server läuft auf der gleichen Maschine wie der ssh Server und lauscht auf Port 1100.

Wir nutzen cntlm um uns am Proxy anzumelden und für ssh einen http Tunnel zum ssh Server zu öffnen. Die anderen Methoden wie zb. proxytunnel (Proxy-Server umgehen – proxytunnel,ssh socks5, proxychains) funktionieren im Falle von NTLMv2 einfach nicht.

Zuerst müssen wir cntlm installieren (sudo apt-get install cntlm) und dann die Konfigurationsdatei bearbeiten (sudo nano /etc/cntlm.conf ) Die wichtigen Parameter sind:

# Cntlm Authentication Proxy Configuration
Username myusername
Domain mydomain.at
Password mypassword
Proxy 10.1.1.1:8080
# This is the port number where Cntlm will listen
Listen 3128
# How to authenticate
Auth LM
# Tunnels mapping local port to a machine behind the proxy
Tunnel 1443:myserver.com:443

Erklärung:

Username, Domain, Passwort – Diese Einstellungen sollte man wissen bzw. schaut man sich am besten von einem Windowsclient ab.
Proxy – Dies ist die IP des ISA Servers
Listen – Hier horcht cntlm als http Proxy am localhost (auch socks5 proxy kann aktviert werden)
Auth – siehe unten
Tunnel – Die wichtigste Einstellung ! hier wird definiert, dass alles was auf localhost:1443 geht durch einen Tunnel an myserver.com:443 geleitet wird.

Jetzt starten wir cntlm mit folgender Zeile:

sudo cntlm -v -M http://google.com

Wir erhalten bei erfolgreicher Anmeldung am ISA Server nun ein wenig Output und kopieren uns die 2 Zeilen “Auth” und “PassNTLMv2” – wir ersetzen nun in der Konfigurationsdatei /etc/cntlm.conf “Auth LM” mit diesen zwei Zeilen.

……. .. ..
config profile 1/11… OK (HTTP code: 301)
—————————-[ Profile 0 ]——————-
Auth NTLMv2
PassNTLMv2 79FDB5B5CD47121A714E133481478CB0

————————————————————–

(nicht aus dem Blog kopieren! Der Hash im HowTo ist ein Beispielhash)

Ist das erledigt kann man cntlm starten (vielleicht zuerst mal mit “sudo cntlm -v” um zu sehen was passiert) Jetzt sollte das Aufbauen eines ssh Tunnels zum Server funktionieren. cntlm horcht, wie in der Konfigurationsdatei definiert, am localhost am Port 1443 um einen solchen zu erstellen.

_____________________________________________

Von diesem Punkt an bieten sich zwei weitere Vorgehensweisen an:

1) Wie geplant OpenVPN durchtunneln  — einfach unten weiterlesen 🙂

2) Mit ssh ein VPN aufziehen SSH Tunnel – Virtual Private Networing with SSH

_____________________________________________

OpenVPN duch den SSH Tunnel routen

sudo ssh -C -L 1100:1.2.3.4:1100 root@localhost -p 1443

Diese Zeile baut dank “cntlm” einen ssh Tunnel zu “myserver.com:443” auf und leitet gleichzeitig alles was am localhost:1100 landet auf den Server auf Port 1100 (1.2.3.4 ist hier die IP von “myserver.com” sprich: des ssh Servers, welcher auch gleichzeitig der openvpn Server ist ). -C komprimiert den Netzwerktraffic. SuperUserRechte (sudo) werden hier benötigt!

Wir müssen nun den openvpn Client so konfigurieren, dass er sich zu “localhost:1100” verbindet. Dieser wird dann automatisch an die remote IP geleitet.

Siehe Redirect network traffic through OpenVPN tunnel

(Dieser Artikel beschreibt den letzten notwendigen Schritt um den gesamten Netzwerktraffic durch die Tunnel zu routen. Lediglich die “remote” Adresse muss auf “localhost” geändert werden.)

! OpenVPN muss als tcp-server bzw. tcp-client konfiguriert werden, sonst funktioniert das Tunneln nicht !

glhf !

🙂

——————————————————————–

Gedanken:

(Möglicherweise wäre es machbar openvpn auf Port 443 zu legen und gleich durch cntlm zu tunneln – ohne ssh Tunnel. in einem schnellen Versuch konnte die Verbindung nicht aufgebaut werden. Ich sehe aber keinen Grund warum das nicht gehen sollte. Je nachdem wie restriktiv der ISA Server konfiguriert ist, könnte es auch drin sein sich direkt per OpenVPN am Proxy anzumelden (openvpn bietet eine Möglichkeit dafür)

Ich bin für Anregungen diese Lösung effizienter zu machen sehr dankbar und werde dieses HowTo beizeiten auch noch nachbessern!

Comments are closed.