Beiträge mit dem Tag servertokens

Apache + PHP: stop talking!

Erstellt von am Samstag, 14 November, 2009

Apache + PHP

Bei einer kürzlichen Kontrolle

des Apache-Logfiles fielen mir massenweise folgender Meldungen auf:

[Sat Nov 07 12:00:49 2009] [error]
[client xxx.xxx.xxx.xxx] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

Da man Anfragen an einen Server ja in der Regel nicht ohne Grund stellt, ist natürlich die Frage: Was gibt denn der Server für Infos als Header raus, wenn ein HTTP-Request gestellt wird?

Wie ich feststellen musste, sind das in der Standard-Konfiguration jede Menge Infos! Darunter unter Anderem:

  • verwendetes Betriebssystem
  • verwendeter HTTP-Server mit Versionsnummer
  • installierte Mods, wie z. B. Python, SSL, Perl, etc. sowie die jeweilige Version
  • bei Aufruf einer PHP-Seite auch die PHP-Version

Kurz darüber nachgedacht… Wen gehen diese Daten etwas an? Tja, aus Sicherheitsgründen eigentlich niemanden, der nicht direkt aus Verwaltungsgründen oder Programmierfragen etwas mit dem Server zu tun hat. Also – wie bringe ich Apache und PHP bei, nicht so zu tratschen?

Die Lösung

sind zwei Einträge in den Konfigurationsdateien von Apache und PHP.

Zuerst der Eintrag für den Apache – wieviele Infos der Apache preisgeben darf legt man über den Eintrag “ServerTokens” fest. Den kann man z. B. einfach ganz in die letzte Zeile der Datei /etc/apache2/apache2.conf schreiben.

Fünf Einstellungen stehen dabei zur Auswahl:

  • Kein Eintrag oder auskommentiert = Produktname + Version, Betriebssystem und Module
  • OS = Produktname + Version und Betriebssystem
  • Min = Nur Produktname + Version
  • ProductOnly = Nur Produktname
  • Major = Nur Produktname + Haupt-Versionsnummer

Also würde bspw. ein Eintrag in der Form “ServerTokens ProductOnly” dafür sorgen, dass im Header nur noch die Info “Server = Apache” mitgesendet wird.

Die zweite Änderung betrifft die Datei /etc/php5/apache2/php.ini – hier sucht man sich den Eintrag “expose_php =” und setzt diesen auf den Wert “Off“.

Abschließend

folgt noch ein Neustart des Apache-Servers über den Befehl “/etc/init.d/apache2 restart” und schon hat das Getratsche – wie im Bild zu sehen – ein Ende.

ScreenShot Antwort-Header

ScreenShot Antwort-Header