transparenter Proxy




Es kann mehrere Gründe geben, den Internetzugang nur über einen sogenannten Proxy-Server zu ermöglichen. Die Aufgabe eines solchen Servers besteht z. B: darin von Client-Rechnern angeforderte Seiten im Cache zwischenzuspeichern und beim nächsten Aufruf derselben Seite den Inhalt des Caches weiterzuleiten, anstatt die Originalinhalte aus dem Netz zu ziehen. Internet-Provider (ISP) setzen deshalb Proxies ein, um auf diese Weise den Zugriff auf häufig aufgerufenen Seiteninhalte zu beschleunigen und gleichzeitig die Netzlast ihrer Backbone-Netze zu reduzieren. Daher bieten manche Provider einen Internet-Zugang nur über sogenannte "Zwangsproxies" an. Hier sind entweder die entsprechenden Proxy-Einstellungen im Browser des Kunden vorzunehmen - oder aber auch nicht. In diesem Fall erfolgt der dann der Zugang über einen transparenten Proxy, der aus der Sicht des Kunden nicht erkennbar ist und daher sind auch keine Änderungen in den Einstellungen des benutzten Browsers notwendig.

Auch aus der Sicht eines Betreibers und Administrators eines lokalen Netzwerks oder Firmennetzes gibt es Gründe einen Internet-Zugang nur per Proxy zu ermöglichen: Zum Einen ist die Leitung zum Internet naturgemäß immer zu knapp bemessen und das Bedienen häufiger Anfragen an das www aus dem Proxy-Cache entschäft die Situation u. U. erheblich; zum Anderen wird auf diese Weise ein direkter - und aus Sicherheitsgründen bedenklicher - Zugang in das Internet verhindert. In "Wirklichkeit" greift der Client im lokalen Netz nämlich nur auf ein "Abbild" des Internet zurück. Der willkürliche Zugriff über bedenkliche Ports aus beiden Richtungen lässt sich so auf einfache Weise unterbinden. Grundsätzlich ermöglichen es die Einstellungen der gebräuchlichen Browser wie MS Internet Explorer und Netscape, die Proxy-Einstellungen durch einen Server vornehmen zu lassen, aber bei einem transparenten Proxy ist dies nicht notwendig, denn er ist definitionsgemäß eben clientseitig nicht zu erkennen.

Um einen transparenten Proxy mit Cache in Betrieb zu nehmen, braucht man zunächst einmal einen - wer hätte das gedacht - echten Proxy-Server. Unter Linux sind hier üblich der "kleine" wwwoffle und die "große" Lösung, der Squid:

Zur Inbetriebnahme für den wwwoffle sind die entsprechenden Einstellungen in der Konfigurationsdatei: /etc/wwwoffle/wwwoffle.conf vorzunehmen. Wichtig ist, das den Clients aus dem lokalen Netz die Berechtigung für den Zugriff auf den Proxy erteilt wird. Der wwwoffle arbeitet standardmäßig auf Port 8080.



Für den Squid finden sich die jeweiligen Einstellungen in der Datei: /etc/squid.conf. Er ist auf Port 3128 eingestellt und auch hier ist den Clients explizit der Zugriff über die Access Control Lists (acl) zu ermöglichen. Im Gegensatz zum wwwoffle sind beim Squid für die Betriebsart als transparenter Proxy noch zusätzliche Einstellungen abweichend von den Defaulteinstellungen zu machen:

Bis jetzt hat man noch nicht mehr erreicht, als einen normalen Proxy aufzusetzen; die Browser sind hierzu für HTTP und FTP sowie für gesicherte Verbindungen per Secure Socket Layer (SSL) auf die jeweiligen Port des benutzten Proxy-Servers einzustellen. Die Server setzen die auf diese Ports (8080 bzw. 3128) gerichteten Anfragen der Client-Browser um und fordern die entsprechenden Inhalte aus dem Internet an. Dies geschieht üblicherweise für die auf TCP (Transport Control Protocol) basierenden Dienste:



Um nun einen transparenten Proxy einzurichten, sind die Anfragen der Clients auf den WWW-Port 80 umzulenken (redirekt) auf den Port des jeweiligen benutzten Proxy-Servers, sodass im Browser keine Einstellungen hierzu nötig sind. Dieses Umlenken geschieht unter Linux auf Kernelebene. Daher muss ab der Kernelversion 2.2.X auf jeden Fall das Paket ipchains installiert sein. Für die transparente Umleitung der Client-Anfragen auf Port 80 aus einem Class-C-Netz 192.168.100.X auf einen Squid-Proxy lautet die entsprechende grundlegende Syntax beispielsweise:

Diese Regel betrifft die Input-Regel (-A input) für das Protokoll TCP (-p tcp). Es werden die Anfragen aus dem Quellnetz/Source (-s 192.168.100.0/24 oder auch -s 192.168.100.0/255.255.255.0) an den Zieladressbereich/Destination betreffend Port 80 (-d 0/0 80) an die Redirect-Chain auf den Squid-Proxy-Port 3128 umgelenkt (-j REDIRECT 3128). Eine Adressangabe wie 0/0 oder 0.0.0.0/0 ist gleichbedeutend mit allen Adressen bzw. ist für jede Adresse zutreffend.

Weiterhin ist es zwingend notwendig, dass die Kernel 2.2.X Routing-Funktionen (das IP-Forwarding) aktiviert wird. Dies erledigt ein Aufruf wie:

Man kann diese Zeilen z. B. in das boot.local-Script aufnehmen, um sie nicht jedes Mal von Hand bei Start des Rechners ausführen zu müssen. Ausserdem müssen natürlich die Routing-Funktionalitäten im Kernel vorhanden sein. Bei den Standardkernels von SuSE zumindest ist dies der Fall. Nicht zuletzt muss auch das transparent proxying im Kernel aktiviert sein.



Einen entscheidenden Nachteil möchte ich zum Schluss allerdings nicht verschweigen: Weil beim Browser der Zugang per Proxy-Server auch beim Protkoll FTP nicht ausdrücklich mitgeteilt wird, sondern dies unsichtbar/transparent geschieht klappt das mit der notwendigen Protokollumsetzung nicht. Damit ist leider auch der passive FTP-Download aus dem Browserfenster nicht möglich. Man muss sich dann auf HTTP-Download-Möglichkeiten im Internet beschränken, denn von FTP-Servern funktioniert das nicht! Leider habe ich auch noch keine Konfiguration gefunden, mit der auch das möglich wäre. Schade eigentlich...


Zwar ist es auch durch Änderungen im Squid-Konfigurationsfile möglich, FTP durch den Proxy "durchzuschleifen", mit dem Effekt der Abschirmung eines lokalen Netzwerks vom direkten Internetzugang hat das dann aber nichts mehr zu tun. Aus diesem Grund macht der Einsatz eines transparenten Proxies auch eigentlich nur in Zusammenhang mit einer Firewall einen Sinn. Bei SuSE erfolgt nach der Installation des Firewall-Paketes die Einrichtung eines transparenten Proxies mit YaST:
Administration des Systems > Konfigurationsdatei bearbeiten
Hier ist (neben den übrigen Einstellungen für die Firewall) für unser Beispiel die Variable zu setzen:




..
Stand: 02.08.00





                                          - alles ohne Gewähr -                                          


Linux-Support light