Windows Server 2008 R2 IIS 7 - Reverse Proxy

Ein Proxy ist eine Netzwerkschnittstelle mit der Aufgabe, Anfragen von einer bestimmten Seite entgegenzunehmen und mit eigener Adresse fortzusetzen. Steht ein Proxy zwischen zwei Kommunikationsteilnehmern, dann können diese miteinander "reden" ohne die IP-Adressen des anderen zu kennen. So wird eine gewisse Anonymität geschaffen. Hauptsächlich wird ein Proxy dafür genutzt, um einer Gruppe von internen Rechnern Zugriff auf ein externes Netzwerk zu gewähren. Den umgekehrten Fall, wenn ein Proxy die vermeindliche Zieladresse für einen Aufrufer darstellt, nennt man Reverse Proxy.Beliebter Anwendungsfall für einen Proxy ist der Internet Zugriff aus einem Firmennetz heraus, oder die Internetanbindungen von Internet Service Providern. Als Kunde von 1&1 z.B. befindet man sich nach der Einwahl erstmal in einer Art internem 1&1 Netz. Ruft man dann z.B. www.allvintage.net auf, läuft diese Anfrage zuerst über einen 1&1 Proxy, der die Anfrage verarbeitet und dann weiterleitet. Ein Proxy kann also durchaus unterschiedlich dimensioniert sein und verschiedene Aufgaben übernommen, die von reiner Durchreichung von Paketen bis hin zu Transformationen und Protokollierungen reichen.

Aber es gibt auch einen umgekehrten Fall. Angenommen ich habe eine Reihe von Anwendungsservern und möchte mir die Freiheit erhalten auch nach dem Livegang dort nach belieben Rechner umzuziehen und anzupassen. Gleichzeitig muss ich aber dem Kunden eine Adresse nennen, die er nutzen kann um auf die Anwendung zuzugreifen. Diese Art von Problem lässt sich mit einem Reverse Proxy lösen. Ich gebe dem Kunden einfach die Adresse des Reverse Proxies. Was ich hinter dem Reverse Proxy an Änderungen durchführe, kann dem Kunden egal sein. Solang die Adresse des Reverse Proxies immer die gleiche bleibt und dieser immer richtig konfiguriert ist, bleibt die interne Zusammenstellung und Konfiguration der Anwendungsserver verborgen.

Tools gibt es viele um Reverse Proxies zu erstellen, aber es geht auch ganz leicht mit dem IIS. Hier erkläre ich, wie das geht.

  1. Zuerst brauchen wir ein kleines Netzwerk. Ich arbeite im Folgenden mit drei Virtual Machines:
    1. Windows Server 2008 R2 Enterprise (Server 1)
    2. Windows Server 2008 R2 Enterprise (Server 2)
    3. Windows 7 Professional (Client)
  2. Auf beiden Servern installierst du den IIS. Auf dem Client ist nur der Internet Explorer notwendig. Unser Ziel ist es, auf Server 2 eine Webseite und auf Server 1 einen Reverse Proxy einzurichten. Auf dem Client rufen wir dann die Adresse von Server 1 auf und erhalten die Webseite von Server 2.
  3. Fangen wir mit dem leichten Teil an: Die Webseite. Der IIS bietet ja schon eine Default Website an. Dummerweise sieht die auf beiden Servern genau gleich aus. Ein Zweifler könnte also später behaupten, dass die angezeigte Webseite beim Aufruf von Server 1 auch die von Server 1 und nicht die von Server 2 ist. Deshalb müssen wir die Seite von Server 2 ein wenig anpassen.
    1. Dazu öffne auf Server 2 den Ordner C:\inetpub\wwwroot und bearbeite die iisstart.htm im Windows Notepad.
    2. Ganz unten in der Datei steht

      </div>
      </body>
      </html>

      Schreibe zwischen </div> und </body> einen kurzen Text, z.B. "Server 2", so dass dort steht

      </div>
      Server 2
      </body>
      </html> 
    3. Wenn du jetzt die Adresse von Server 2 mit http://NameVonServer2/ im Browser des Clients aufrufst, erhältst du wieder das Standardbild, aber diesmal steht darunter "Server". Jetzt können wir die Standardseiten der beiden Server unterscheiden, denn unter http://NameVonServer1/ passiert das nicht.
  4. Um jetzt den Reverse Proxy zu errichten, musst du dir ein kleines Paket herunterladen und zusätzlich zum IIS auf Server 1 installieren: Application Request Routing 2.0 (das Paket installiert i.d.R. das Modul URL Rewrite gleich mit. Falls das nicht der Fall sein sollte, muss URL Rewrite 2.0 ebenfalls mitinstalliert werden). Falls du in einer VMWare ohne Internetanbindung arbeitest, kannst du das Paket bei Microsoft auch als regulären Download und nicht über den Web Platform Installer beziehen. Einfach mal auf www.microsoft.com/downloads/de-de/ nach der braven Übersetzung "Microsoft Routing von Anwendungsanforderungen" suchen.
  5. Danach kannst du in der IIS-Manager Konsole den Server auswählen und dann unter "Cache für das Routing von Anwendungsanforderungen" rechts das Formular "Serverproxyeinstellungen" öffnen. Hier einfach einen Haken setzen bei "Proxy aktivieren" und die Standardeinstellungen übernehmen.
  6. Jetzt erstellen wir eine Regeln unter URL Rewrite.
    1. Wähle unter Eingehende Regeln die Vorlage Leere Regel.
    2. Als Name gibst du "Reverse Proxy" ein.
    3. Bei Übereinstimmung mit der URL schreibst du unter Angeforderte URL "Entspricht dem Muster" und Unter Verwendung von "Reguläre Ausdrücke".
    4. In das Feld Muster kommt dann unser Regulärer Ausdruck: ^(.*)
    5. Unter Aktion -> Aktionstyp wählst du dann "Umschreiben" und darunter unter URL Umschreiben schreibst du: http://NameVonServer2/{R:1}

Das war's. Prüfen kannst du das ganze, indem du auf dem Client die Adresse von Server 1 im Internet Explorer aufrufst (nicht vergessen den Cache zu leeren, oder den IE neuzustarten): Statt der Default Webseite von Server 1 bekommst du die von uns modifizierte Default Webseite von Server 2 zu sehen.