Reverse Proxy: Difference between revisions

From
Jump to navigation Jump to search
Line 31: Line 31:


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.
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.

== Umsetzung ==
=== Potentielle Lösungen ===

Im Umfang dieses Seminars war nur die Evaluation von zwei Lösungen realisierbar. Zum einen handelte es sich dabei um das wohl bekannteste OpenSource Projekt zum Thema Proxy: '''Squid''' (http://www.squid-cache.org/). Die andere Lösung ist das Modul '''mod-proxy''', das zusammen mit dem Apache Webserver 2.x ausgeliefert wird. Der komplette Webserver ist von http://www.apache.org herunterladbar.

=== Squid ===

Obwohl Squid durch vielfältigeste Konfigurationsmöglichkeiten glänzt und eine großartige Cacheverwaltung hat, so findet sich in der Konfiguationshilfe kein Hinweis darauf, wie man den selektiven Zugriff auf den Webserver realsieren kann. Es kann mit wenig Aufwand ein interner Webserver gecached werden. Dabei findet aber immer ein 1:1 Matching statt, d.h. ein Proxy cached auch nur einen Webserver. Geht man hier in den Bereich der Multi-Backends, so wird nach DNS Informationen getrennt, also z.B. nach den Hostnamen in der Anfrage und nicht nach der URL in der Anfrage. Eine solche Konfiguration konnte ich nicht herstellen.

Revision as of 11:55, 25 September 2006

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.

Umsetzung

Potentielle Lösungen

Im Umfang dieses Seminars war nur die Evaluation von zwei Lösungen realisierbar. Zum einen handelte es sich dabei um das wohl bekannteste OpenSource Projekt zum Thema Proxy: Squid (http://www.squid-cache.org/). Die andere Lösung ist das Modul mod-proxy, das zusammen mit dem Apache Webserver 2.x ausgeliefert wird. Der komplette Webserver ist von http://www.apache.org herunterladbar.

Squid

Obwohl Squid durch vielfältigeste Konfigurationsmöglichkeiten glänzt und eine großartige Cacheverwaltung hat, so findet sich in der Konfiguationshilfe kein Hinweis darauf, wie man den selektiven Zugriff auf den Webserver realsieren kann. Es kann mit wenig Aufwand ein interner Webserver gecached werden. Dabei findet aber immer ein 1:1 Matching statt, d.h. ein Proxy cached auch nur einen Webserver. Geht man hier in den Bereich der Multi-Backends, so wird nach DNS Informationen getrennt, also z.B. nach den Hostnamen in der Anfrage und nicht nach der URL in der Anfrage. Eine solche Konfiguration konnte ich nicht herstellen.