Socket-Verbindung durch Proxy hindurch

Post Reply
Message
Author
ElBlues
Posts: 127
Joined: 25. Mar 2008 12:50
Contact:

Socket-Verbindung durch Proxy hindurch

#1 Post by ElBlues »

So, nach dem Google mir auf die entsprechenden Suchstichworte nur erklären mag, wie ein Proxy funktioniert, hier mal meine eigentliche Frage, vielleicht hat ja jemand einen Link.

Wie normale Netzwerkverbindungen mittels socket(), connect(), send() und recv() funktionieren ist mir klar. Nur gibt es jetzt auch den Fall, dass jemand hinter einer Firewall sitzt und nach draußen möchte. Diverse Applikationen kriegen das mit angabe der Proxy-IP und -Portnummer sowie möglicherweise auch einem Passwort hin. Nur: was steckt dahinter? Wie wird das auf Codeebene gelöst, sprich was muss ich tun um ein connect() von so einem Proxy akzeptiert zu bekommen?
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

Entweder muss das Protokoll explizit Proxies unterstützen, das ist zum Beispiel bei HTTP oder FTP der Fall. In diesem Fall wird z.B. die HTTP-Anfrage nicht direkt an den Server geschickt, den man in der URL genannt hat, sondern stattdessen an den Proxy. Der guckt in den Request-Header der Anfrage rein, dort steht die "echte" URL drin, und diese Seite fordert er dann an und liefert sie kurz darauf an den fragenden Rechner aus. Mit einem statusbehafteten Protokoll wie FTP ist es etwas komplizierter, funzt im Prinzip aber genauso.

Dann gibt es noch den Fall des "transparenten Proxies". In diesem Fall braucht man Kernel-Unterstützung, bei Linux ist das netfilter. Dieser fängt Pakete, die nach draußen gehen ab und leitet sie an den Proxy-Server, der transparentes Proxiing unterstützen muss, weiter. Dieser erkennt anhand der IP-Adresse (DNS ist zu diesem Zeitpunkt schon aufgelöst worden), dass er ein Paket bekommen hat, das für einen Internet-Host gedacht ist. Er fragt nun diesen Internet-Host bei z.B. HTTP nach der Seite, die im Paket drin steht. Diese liefert der Internet-Server an den Proxy zurück, dieser liefert sie an den netfilter zurück. Der erkennt, dass das Paket zu einer Verbindung zum Proxyserver kommt und schreibt die Quell-Adresse so um, dass es aussieht, als käme das Paket direkt vom Internet-Server. Damit ist das Proxiing von außen nicht zu erkennen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

ElBlues
Posts: 127
Joined: 25. Mar 2008 12:50
Contact:

#3 Post by ElBlues »

Ah, so weit so klar. Und wie sieht das mit den SOCKS-Proxies aus, gehören die in die Exke der transparenten Proxies?
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

SOCKS ist ein Proxy-System unterhalb der Protokollebene von HTTP, FTP etc.. Man kann es als Library in einen Client, z.B. einen Browser einbauen, dann kann der die Protokolle, die er beherrscht, über SOCKS statt direkt über TCP schicken.

Für Programme, die die SOCKS-Library nicht eingebaut haben, gibt es zum Beispiel "tsocks", das sich per LD_PRELOAD in die socket()-Aufrufe etc. einhängt und so die SOCKS-Funktionalität nachrüstet.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Post Reply