Proxy-Server einrichten
Sicherer Server

CloudDeveloperIT-ProjekteServerSoftware

Lastverteilung und Schutz vor DoS-Attacken sind gute Gründe für den Einsatz eines Reverse-Proxys. Internet Professionell zeigt, wie Sie schnell in den Genuss dieser Leistungen kommen.

Einfacher Schutz

Proxy-Server einrichten

Immer mehr Nutzer leisten sich einen eigenen Server im Internet. Dabei legen sie vor allem Wert auf großzügig dimensionierte Hardware und ein hohes Kontingent an Freivolumen. Eine Strategie bezüglich der Erweiterbarkeit oder zum Schutz gegen Angriffe findet selten statt. Dabei ist es nicht schwer, das Angebot fit für zukünftiges Wachstum über einen Server hinaus zu machen. Ein einfacher Reverse-Proxy genügt, und schon lässt sich eine Präsenz auch auf mehrere Rechner verteilen. Als nützlichen Nebeneffekt bringt ein Reverse-Proxy Abwehrmaßnahmen gegen Attacken vom Typ Denial of Service mit.

Internet Professionell beschreibt im Folgenden, wie Sie Ihren Server unter Linux mit Hilfe des Reverse-Proxys Pound in kürzester Zeit umrüsten.


Installation: schnell und einfach

Proxy-Server einrichten

Für die Installation von Pound benötigen Sie einen Zugang mit Superuser-Rechten zur Kommandozeile des Servers, ein installiertes Compiler-Paket, die OpenSSL-Bibliotheken und natürlich den Quellcode des Reverse-Proxys selbst. Bis auf Letzteres sollten Sie alles über die Verwaltungsoberfläche der Distribution einrichten können. Die aktuellste Version von Pound erhalten Sie unter
www.apsis.ch/pound/Pound-current.tgz
.

Nach dem Herunterladen des Pakets ist dieses zu entpacken und der Quellcode mit Hilfe des Compilers zu übersetzen. Inklusive der Übertragung der Dateien an ihren Bestimmungsort sind die Schritte schnell erledigt:

tar xvzf Pound-current.tgz
cd Pound-current
./configure --enable-msdav
--enable-unsafe --sysconfdir=/etc/pound
make
make install

Über die Parameter des Configure-Befehls aktivieren Sie sowohl die Unterstützung für WebDAV (–enable-msdav ) als auch die inzwischen für Domains verfügbaren Sonderzeichen ( –enable-unsafe). Zusätzlich wird das Verzeichnis festgelegt, in dem Pound seine Konfiguration erwartet (–sysconfdir=/etc/pound).


Konfiguration: leider manuell

Proxy-Server einrichten

Nicht so komfortabel gestaltet sich das Erstellen der notwendigen Konfigurationsdatei für Pound. Im Paket ist kein Beispieldokument vorhanden, so dass Sie entweder von Null beginnen oder die auf der Heft-CD abgelegte Grundkonfiguration auf Ihren Server übertragen müssen. Für den Betrieb von Pound und Webserver auf einem Rechner sieht die in der Datei /etc/pound/pound.cfg/ zu hinterlegende Minimalkonfiguration in etwa wie folgt aus:

ListenHTTP 123.234.234.123,80
UrlGroup ".*"
BackEnd 127.0.0.1,80,1
EndGroup

Diese Vorgaben veranlassen Pound dazu, auf Port 80 der IP-Adresse
123.234.234.123
nach eingehenden Anfragen zu lauschen und diese für alle Domains ? definiert über die URL-Gruppe ».*« ? an den unter der IP-Adresse 127.0.0.1 auf Port 80 erreichbaren Webserver weiterzuleiten. Der dritte Parameter des Schlüsselworts BackEnd gibt die Priorität an, mit der Pound den Server bedient. Da anfangs nur ein Server vorhanden ist, kann die niedrigste Stufe 1 zum Einsatz kommen.

Zu beachten ist, dass bei dieser Art der Konfiguration die Settings des Webservers angepasst werden müssen. Dieser darf nicht auf den offiziellen IP-Adressen nach Paketen Ausschau halten, sondern auf der lokalen IP-Adresse 127.0.0.1. Die notwendige Änderung besteht darin, entweder in der zentralen Konfigurationsdatei httpd.conf (für die meisten Linux-Distributionen) oder aber im File
listen.conf
(Suse Linux) in den jeweils gültigen Verzeichnissen der Konfiguration die Anweisung Listen 80 durch deren erweiterte Variante Listen 127.0.0.1:80 zu ersetzen. Anschließend ist der Webserver neu zu starten und der Proxy durch den Befehl pound zu aktivieren.

Ein Abruf der auf Reverse-Proxy-Betrieb umgestellten Website zeigt vordergründig keinen Unterschied zum Normalbetrieb. Erst ein Blick in die Logdatei offenbart, dass alle Anfragen an den Server nun von der IP-Adresse 127.0.0.1 zu kommen scheinen ? ein untrügliches Zeichen dafür, dass der Reverse-Proxy korrekt arbeitet.


SSL inklusive

Proxy-Server einrichten

Was aber, wenn der Webserver auch einen per SSL geschützten Zugang bietet? Solange es darum geht, einen einzelnen Webserver per HTTPS anzusprechen, könnte dieser weiterhin unbehelligt seiner Arbeit nachgehen. Allerdings soll das endgültige Setup auch die Möglichkeit bieten, HTTPS-Anfragen auf mehrere Server zu verteilen. Um dies zu erreichen fügen Sie in die Pound-Konfiguration folgende Zeile ein:

ListenHTTPS 192.168.27.101,443
/etc/pound/server.pem

In der Konfiguration des Servers sorgen Sie dafür, dass auch dessen SSL-Modul nur noch auf dem Interface 127.0.0.1 auf eingehende Anfragen lauscht. Das als Parameter angegebene Zertifikat server.pem erzeugen Sie aus Zertifikat und Public Key der Apache-Konfiguration:

cp /etc/apache2/ssl.key/server.key
/etc/pound/server.pem
cat /etc/apache2/ssl.crt/server.crt
>> /etc/pound/server.pem

Der Abruf mit Hilfe von HTTPS belegt, dass augenscheinlich alles funktioniert. Ein Blick in das SSL-Protokoll zeigt, dass dieser keine HTTPS-Anfragen bekommt.

Der Grund dafür ist, dass Pound die Dekodierung der per SSL geschützten Pakete übernimmt und die Anfragen im HTTP-Format an den Ziel-Server weiterleitet. Hier hilft ein Trick weiter: dem HTTPS-Angebot eine andere Domain verpassen, wie ssl.meinedomain.de, und für diese in der Apache-Konfiguration einen virtuellen Host anzulegen.


Anfragen verteilen

Proxy-Server einrichten

Um Pound als Load-Balancer einzusetzen, sind kleinere Änderungen an der Konfiguration notwendig. Um Anfragen an Server mit den Adressen 192.168.27.222 und 192.168.27.223 zu verteilen, ist der Block für die URL-Gruppe zu ändern:

UrlGroup ".*"
BackEnd 192.168.27.222,80,1
BackEnd 192.168.27.223,80,1
EndGroup

Soll ein Rechner mehr Anfragen bekommen als ein anderer, hilft die Änderung

UrlGroup ".*"
BackEnd 192.168.27.222,80,1
BackEnd 192.168.27.223,80,3
EndGroup

Auch die fallweise Verteilung nach Domain lässt sich realisieren. Soll die Domain mydom.de auf mehrere Server verteilt werden, während die Domain otherdom.de nur auf einem Server bereitgestellt wird, sind zwei erweiterte URL-Gruppen notwendig:

UrlGroup ".*"
HeadRequire ".*otherdom.de.*"
BackEnd 192.168.27.222,80,1
End Group
UrlGroup ".*"
BackEnd 192.168.27.222,80,1
BackEnd 192.168.27.223,80,1
BackEnd 192.168.27.224,80,1
EndGroup

Die Unterscheidung wird nicht über das Schlüsselwort UrlGroup, sondern über HeadRequire Host getroffen.


DoS-Attacken blockieren

Proxy-Server einrichten

Dieses Verhalten ist auf den ersten Blick seltsam, aber nützlich, um global für alle Domains Konfigurationseinstellungen vorzunehmen. So lässt sich eine vom Bagle-Virus durchgeführte Denial-of-Service-Attacke abblocken. Der Angriff beruht darauf, eine Website ? 5.php oder in neueren Varianten auch a.php ? abzurufen und den Server durch die Masse der Anfragen lahm zu legen. Eine URL-Gruppe am Beginn verhindert dies:

URLGroup "/.\.php.*"
EndGroup

Es ist darauf zu achten, dass nicht tatsächlich vorhandene Seiten erfasst werden. Das Beispiel filtert alle PHP-Seiten, deren Name aus lediglich einem Buchstaben besteht.


Ausblick

Proxy-Server einrichten

Beim Experimentieren mit Pound wird schnell deutlich, dass es sich hier um einen äußerst leistungsfähigen und schnellen Reverse-Proxy handelt, der zudem recht einfach zu konfigurieren ist. Da kommt schnell der Wunsch nach mehr Funktionalität auf. An oberster Stelle steht sicher ein Cache.

Gerade auf dieses Feature verzichtet der Proxy-Server Pound jedoch bewusst, da ein Cache einen erheblichen Verwaltungsaufwand mit sich bringt, der sich negativ auf die Performance auswirken würde. Pound ist aber ideal dazu geeignet, als Load-Balancer und zur Abwehr von Denial-of-Service-Attacken vor mehreren Webservern zu arbeiten, die jeweils über einen lokalen Cache wie zum Beispiel Squid verfügen. Gerade die im Vergleich erheblich einfachere Konfiguration von Pound rechtfertigt dessen zusätzlichen Einsatz.

Selbstverständlich ist auch die Wahl der Backend-Systeme nicht nur auf Linux-basierte Lösungen beschränkt. Pound arbeitet genauso gut mit Webservern unter dem Betriebssystem Windows zusammen.

Außerdem bietet der Reverse-Proxy Pound eine ganze Reihe weiterer nützlicher Funktionen, deren ausführliche Beschreibung jedoch den Rahmen dieses Beitrags bei weitem sprengen würde. Es lohnt sich also, Pound einfach einmal selbst auszuprobieren.

Eine einfache Installation, hohe Geschwindigkeit und die kostenlose Verfügbarkeit als Open-Source-Software machen den Reverse-Proxy Pound für alle Webmaster mehr als interessant. So wird sich der eine oder andere Administrator nach der Installation sicher schon bald fragen, wie er bislang ohne den Proxy-Server Pound ausgekommen ist.