Reverse Proxy

From
Revision as of 11:47, 25 September 2006 by Hilbrich (talk | contribs) (→‎Einleitung)
Jump to navigation Jump to search

Einleitung

Zielstellung

Ziel war der Aufbau eines Reverse Proxy Servers, der in der Lage ist, verschiedene Webserver zu konsolidieren und in einem virtuellen Serverbaum darzustellen. Wesentlicher Aspekt dabei war die Fähigkeit zum Modifizieren von Links in angefragten HTML Dokumenten, sowie Cookie-Domain-Angaben und ggf. auch Fehlerausschriften.

Was ist ein Proxy?

Ein Proxy Server ist ein Dienst, der sich als Vermittler zwischen die klassischen Client-Server-Kommunikationsprotokolle setzen kann und damit mindestens zwei Client-Server-Verbindungen realsiert. Die bekanntesten Proxy Server sind Caching Proxy Server für HTTP Anfragen an das Internet. Ein Kunde eines Internet Service Providers, der dessen HTTP Proxy benutzt, schickt alle HTTP Anfragen nicht direkt an das Internet, sondern nur an den Proxy des Providers. Dieser guckt zunächst in seinem Cache nach, ob dieselbe Anfrage schon einmal gestellt wurde und die HTTP Antwort immer noch aktuell ist. Wenn ja, wird die Antwort aus dem Cache an den Client zurückgegeben und so unnötiger Verkehr im Internet vermieden. Ist die Antwort noch nicht in dessen Cache vorhanden, so initiiert der Proxy eine HTTP Anfrage an das eigentliche Ziel, speichert die Antwort im Cache ab und gibt sie zugleich an den Kunden zurück. Auf diese Weise agiert der HTTP Proxy als Mittler zwischen dem Browser auf dem PC des Kunden und dem Webserver im Internet.

Forward und Reverse Proxy

Es gibt nun ganz unterschiedliche Arten von Proxy Servern. Kategorisiert man nach der Topologie, in der sich der Proxy befindet, so lassen sich zwei Proxy Arten unterscheiden: Forward und Reverse Proxy. Der Forward Proxy ist der klassische Proxy, der als Mittler zwischen einem Client und dem Server agiert. Der Client muß dabei speziell konfiguriert sein, um die eigentliche Anfrage statt an den Server, zunächst über den Proxy zu leiten.

Ein Reverse Proxy ist im Gegensatz dazu meist vor verschiedenen Webserver logisch vorgeschaltet und soll den Zugriff auf diese Beschränken und so mehr Sicherheit geben. Der Client muß hier nicht speziell konfiguriert werden. Für ihn erscheint der Proxy wie ein ganz normaler Server. Hier liegt die Konfiguration viel mehr auf der Proxyseite. Der Proxy muss nun genau wissen, wohin er welche Anfragen leiten muss. Die erhaltenen Antworten muss der Proxy ggf. umschreiben, sich selber als Absender ausgeben und dann an den Client zurückgeben.

Einsatzszenario

Klassischerweise wird ein solcher Proxy zum Erhöhen der Sicherheit eingesetzt. Betrachten wir zum Beispiel das folgende Szenario. Eine Firma ist direkt an das Internet angeschlossen und betreibt einen internen Webserver, auf dem verschiedene Dienste laufen. Genau ein Dienst davon (z.b. http://serverA/dienst1) soll auch im Internet verfügbar sein. Aufgrund der Sensibilität der Daten von dienstN (N = 2,3,4 ....), muß gewährleistet sein, dass diese Dienste nicht vom Internet aus erreichbar sind.

+--------+    +--------+    +----------+
|Internet| -- |Firewall| -- |WebserverA|
+--------+    +--------+    +----------+

Die Lösung, in der Firewall einfach den Port 80 aufzumachen, würde zwar der Anforderung genügen, dass der Webserver auch vom Internet aus erreichbar ist (eine entsprechende Virtual Server Funktionalität vorausgesetzt), aber so wäre auch der dienstN (N= 2,3,4 ...) vom Internet aus erreichbar. Dies ist also keine gute Lösung.

Unter Einsatz von mehr Hardware oder besseren Firewalls können nun verschiedene Lösungsansätze präsentiert werden. Ein Ansatz besteht im Einrichten eines Reverse Proxys in der DMZ der Firma.

+--------+    +--------+    +---------------+    +--------+    +----------+
|Internet| -- |Firewall| -- | Reverse Proxy | -- |Firewall| -- |WebserverA|
+--------+    +--------+    +---------------+    +--------+    +----------+

Von draußen erscheint der Reverse Proxy nun wie ein eigener Webserver. Dessen Konfiguration impliziert aber die Weiterleitung aller Anfragen an den Dienst 1 auf dem WebserverA. (http://reverseProxy ---> http://serverA/dienst1) Diese Weiterleitung passiert für den Client völlig transparent und nur in der DMZ bzw. im Netz der Firma. Durch diese Konfiguration ist garantiert, dass nur der Teilbaum /dienst1 im Internet publiziert wird. Durch das o.g. Setup kann so noch der direkte Zugriff vom Internet auf den Webserver verhindert werden.