Title: Probleme bezüglich DNS und Apache
Das Resümee zu diesem Thema könnte lauten: Konfigurieren Sie den Apache nicht so, dass er bei der Auswertung der Konfigurationsdateien auf die DNS-Auflösung angewiesen ist. Benötigt der Apache die DNS-Auflösung, um die Konfigurationsdateien auswerten zu können, kann der Server unzuverlässig werden (nicht starten) oder es kann zu Denial-of-Service- und Theft-of-Service-Attacken kommen und Benutzer können in der Lage sein, Anfragen anderer Benutzer zu "stehlen".
ServerAdmin [EMAIL PROTECTED]
DocumentRoot /www/abc
</VirtualHost>
Damit der Apache korrekt funktioniert, benötigt er unbedingt zwei
Informationen über jeden virtuellen Host: den Servernamen und mindestens eine
IP-Adresse, an die der Server gebunden wird und auf die er reagiert. Das oben
angeführte Beispiel enthält keine IP-Adresse, daher muss der Apache über DNS
die Adresse von www.abc.dom ermitteln. Steht das DNS
aus irgend welchen Gründen gerade nicht zur Verfügung, wenn der Server
seine Konfigurationsdatei analysiert, dann wird dieser virtuelle Host
nicht konfiguriert und ist daher auch nicht in der Lage,
auf Anfragen zu reagieren (vor der Apache-Version 1.2 wurde der Server nicht
einmal gestartet).
Im folgenden Auszug aus der Konfiguration wird davon ausgegangen,
dass www.abc.dom die Adresse 10.0.0.1. hat:
ServerAdmin [EMAIL PROTECTED]
DocumentRoot /www/abc
</VirtualHost>
Diesmal muss der Apache eine reversive DNS-Auflösung durchführen, um den Servernamen dieses virtuellen Host zu ermitteln. Schlägt diese reversive Suche fehl, wird der virtuelle Host partiell deaktiviert (vor der Version 1.2 wäre der Server nicht einmal gestartet worden). Handelt es sich um einen namensbasierten virtuellen Host, dann ist er total deaktiviert, während ein auf IP-Adressen basierender Host meist funktioniert. Muss der Apache aber eine vollständige URL mit dem Servernamen für den Server erzeugen, kommt keine gültige URL zu Stande.
Mit folgenden Zeilen können beide Probleme vermieden werden:
ServerName www.abc.dom
ServerAdmin [EMAIL PROTECTED]
DocumentRoot /www/abc
</VirtualHost>
Es kann zu mindestens zwei Arten von Denial-of-Service-Attacken kommen.
Wird eine ältere Version als die Version 1.2 ausgeführt, lässt sich der Server
nicht einmal mehr booten, wenn eine der oben erwähnten DNS-Suchen
für einen der virtuellen Hosts fehlschlägt. In einigen Fällen kann diese DNS-Suche
auch außer Kontrolle geraten. Ist abc.dom beispielsweise eine Ihrer
Kunden, der sein eigenes DNS kontrolliert, dann kann er Ihren Server
(vor Version 1.2) am Booten hindern, indem er einfach den Datensatz
www.abc.dom löscht.
Eine andere Form ist noch wesentlich heimtückischer. Betrachten Sie folgende Konfiguration:
ServerAdmin [EMAIL PROTECTED]
DocumentRoot /www/abc
</VirtualHost>
<VirtualHost www.def.dom>
ServerAdmin [EMAIL PROTECTED]
DocumentRoot /www/def
</VirtualHost>
Angenommen, Sie haben www.abc.dom die Adresse
10.0.0.1 und www.def.dom die Adresse 10.0.0.2 zugewiesen.
Nehmen wir weiter an, def.dom hat die Kontrolle über ein
eigenes DNS. Unter diesen Voraussetzungen ist def.dom in der
Lage, den gesamten für abc.dom bestimmten Verkehr abzufangen.
Hierfür muss lediglich www.def.dom auf die Adresse 10.0.0.1
gesetzt werden. Da die Kontrolle nicht bei Ihnen liegt, können Sie nicht verhindern,
dass www.def.dom auf eine beliebige Adresse verweist.
Anfragen für die Adresse 10.0.0.1 (einschließlich all derer, bei denen die
Benutzer URLs in der Form http://www.abc.dom/was_auch_immer
eingegeben haben) werden alle vom virtuellen Host def.dom
bedient. Um besser zu verstehen, warum das geschieht, müssen Sie etwas
mehr darüber wissen, wie der Apache eingehende Anfragen mit dem virtuellen
Host, der sie bedient, abgleicht. Eine einfache Beschreibung finden Sie unter
Tiefergehende Erörterung der Zuweisung virtueller
Hosts.
Die Erweiterung um die namensbasierten
Hosts mit der Apache-Version 1.1 macht es erforderlich, dass der Apache
die IP-Adresse(n) des Host kennt, auf dem httpd ausgeführt
wird. Diese Adresse wird entweder mit der globalen Direktive
gethostname ermittelt (die das
Gleiche zurückliefern sollte wie die Eingabe von hostname
in der Befehlszeile). Anschließend wird eine DNS-Suche für diese Adresse
durchgeführt. Zur Zeit lässt solche Suche nicht verhindern.
Ist zu befürchten, dass diese DNS-Suche fehlschlägt, weil der Server nicht
verfügbar ist, kann der Hostname in die Datei /etc/hosts
eingetragen werden (wo er vielleicht bereits steht, damit der Rechner korrekt
hochgefahren wird). Anschließend muss sichergestellt werden, dass der Rechner
so konfiguriert ist, dass er die Datei /etc/hosts auch benutzt, wenn
die DNS-Suche fehlschlägt. Je nach dem verwendeten Betriebssystem muss
hierfür die Datei /etc/resolv.conf oder die Datei
/etc/nsswitch.conf bearbeitet werden.
Muss der Server aus irgend welchen Gründen keine DNS-Auflösung
durchführen, kann das Problem auch durch Setzen der Umgebungsvariablen
HOSTRESORDER auf local umgangen werden.
Das alles hängt vom verwendeten Betriebssystem und den Auflösungsbibliotheken
ab. Wird die Umgebung nicht mit
-
Benutzen Sie in der Direktive
VirtualHost IP-Adressen. -
Benutzen Sie in der Direktive
Listen IP-Adressen. -
Geben Sie für alle virtuellen Host mit der Direktive
ServerName explizit einen Servernamen an. - Richten Sie einen
<VirtualHost _default_:*>-Server ein, der keine Seiten bedienen muss.
Die Situation hinsichtlich DNS ist sehr unerfreulich. Für Apache 1.2 wurde versucht, dass der Server bei DNS-Problemen wenigstens bootet, was aber nicht ausreichen kann. Die Verwendung expliziter IP-Adressen in Konfigurationsdateien ist im heutigen Internet, wo Neuadressierungen eine Notwendigkeit sind, auf jeden Fall ein unangebrachtes Vorgehen.
Eine mögliche Lösung des oben beschriebenen Problems der Theft-of-Service-Attacken wäre die Durchführung einer reversiven DNS-Suche für die bei der einfachen Suche zurückgegebenen IP-Adresse und ein Vergleich der beiden Namen. Stimmen sie nicht überein, würde der virtuelle Host deaktiviert. Dafür muss die reversive DNS-Auflösung korrekt konfiguriert sein (was den meisten Administratoren wegen der üblichen Verwendung der "doppelt reversiven" DNS-Suchen durch FTP-Server und TCP-Wrapper Probleme bereitet).
Auf jeden Fall scheint ein zuverlässiges Booten eines Webservers mit virtuellen Hosts unmöglich, wenn keine IP-Adressen verwendet werden. Partielle Lösungen wie die Deaktivierung von Teilen der Konfiguration können je nach den Aufgaben des virtuellen Hosts noch nachteiliger sein, als überhaupt nicht booten zu können.
Beim Einsatz von HTTP/1.1 und Browsern und Proxies die den
Host-Header benutzen, ist es möglich die Verwendung
von auf IP-Adressen basierenden Hosts gänzlich zu vermeiden. In diesem Fall
muss ein Webserver in der Konfigurationsphase keine DNS-Suchen durchführen.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
