Zwangs-Proxy durchtunneln

Situation: man befindet sich in einem Netzwerk, in dem man einen Proxy zum Surfen verwenden muss. Ein direkter Zugang ins Internet ist gesperrt. Aus Gründen möchte man diesen umgehen. In diesem Beispiel ist das Netzwerk so aufgebaut:

Der Proxy, der verwendet werden muss, hat die IP 192.168.120.253 und den Port 3128. Um das zu umgehen, braucht man einen Jump-Host, der z. B. via dyndns ereichbar sein muss. Im Beispiel wird jumpit.dyndns.org verwendet, der natürlich nicht existiert.

Auf diesem Jump-Host braucht man einen SSH-Server, der zusätzlich zum Standard-Port 22 auf dem Port 443, der standardmäßig für https verwendet wird, lauscht. Außerdem muss dort ebenfalls ein Proxy-Server, z. B. der leichtgewichtige tinyproxy, installiert sein. Alles dies kann man mit einem Router mit dd-wrt erledigen.

Auf dem Client im Netz braucht man Firefox-Portable, Putty oder wahlweise myentunnel-Portable

Das Ziel ist es, den Traffic durch den Proxy durchzutunneln und auf der anderen Seite mit dem Jump-Host wieder aufzudröseln, um so ins unbeschränkte Internet zu gelanen.

  • Einrichtung von myEntunnel, geht nur, wenn der Proxy den Port 443 ungefiltert durchlässt, was oft der Fall ist

  • Alternativ: Einrichtung von Putty. Dieses Setup geht auch, wenn alles durch den Zwangs-Proxy geleitet werden muss. Mit Putty dann via ssh einloggen, eingeloggt bleiben und putty dann minimieren.

  • dann Firefox-Portable wie folgt einstellen, und alles sollte wuppen.

  • Version mit SOCKS-Proxy

SOCKS hat den Vorteil, dass man auf der anderen Seite, dem Jump-Host, kein separates Proxy-Programm installieren muss. SOCKS ist ssh integriert. Allerdings muss die zu tunnelnde Anwendung SOCKS untertützen, ein Umstand, der bei Firefox gegeben ist. Es reicht also, eine ssh-Verbindung aufzubauen, in der SOCKS konfiguriert ist, bzw. SOCKS bei myentunnel zu aktivieren. In den Folgenden Beispielen wird als SOCKS-Port 1234 verwendet, das ist relativ frei wählbar, muss nur im Firefox dann genauso angegeben werden.

Folgende Einstellung ist in diesem Fall noch durchzuführen: in about:config im Firefox:

network.proxy.socks_remote_dns = true 
  • Anleitung für Linux
ssh -L 3128:127.0.0.1:3128 chrissie@doit.dyndns.org -p 443

Mit SOCKS:

ssh -D 1234 chrissie@doit.dyndns.org -p 443

Wenn man ssh durch einen HTTP-Proxy leiten muss, muss man unter Linux noch connect.c kompilieren. dieses Programm dann als connect nach /usr/local/bin kopieren

ssh -L 3128:127.0.0.1:3128 -o "ProxyCommand connect -H 192.168.120.253:3128 %h %p" \ 
chrissie@doit.dyndns.org -p 443

Mit SOCKS:

ssh -D 1234 -o "ProxyCommand connect -H 192.168.120.253:3128 %h %p" \ 
   chrissie@doit.dyndns.org -p 443 

Wenn man connect.c nicht hat, kann man es sich hier schnell laden: Download connect.c

Kompilieranleitung:

chrissie@pc1 ~ $ gcc connect.c -o connect
connect.c:1031:1: warning: return type defaults to 'int' [-Wimplicit-int]
 domain_match(const char *s1, const char *s2)
 ^~~~~~~~~~~~
chrissie@pc1 ~ $ chmod 755 connect
chrissie@pc1 ~ $ ./connect 
connect --- simple relaying command via proxy.
Version 1.100
usage: ./connect [-dnhst45] [-p local-port][-R resolve] [-w timeout] 
          [-H proxy-server[:port]] [-S [user@]socks-server[:port]] 
          [-T proxy-server[:port]]
          [-c telnet-proxy-command]
          host port
chrissie@pc1 ~ $ su
Password: 
pc1 /home/chrissie # mv connect /usr/local/bin/
  • andere Anwendung von connect.c: Man ist in einer Firma, es geht nur ein Proxy auf dem Port 80, man muss Dinge tun
  • Proxy hier: 10.89.230.30 Port 80

  • ssh
$ ssh -o "ProxyCommand connect -H 10.89.230.30:80 %h %p" chrissie@doit.dyndns.org -p 443
  • scp
$ scp -P 443 -o "ProxyCommand connect -H 10.89.230.30:80 %h %p" mysql-dump.sql chrissie@doit.dyndns.org: 
  • rsync
chrissie@server:/var/www $ rsync  -avzre 'ssh -p 443 -o "ProxyCommand connect -H 10.89.230.30:80 %h %p"' --links /var/www/ chrissie@doit.dyndns.org:~/www/

Viel Spaß im Internet!