Apache Webserver

Was ist der Apache Webserver?

Der am meisten genutzte Webserver im Internet stammt von der Apache Software Foundation und heißt Apache HTTP Server. Er ist eine freie Software. Der Vorteil des Servers liegt unter Anderem darin, dass er eine große Anzahl an Betriebssystemen unterstützt. Dazu gehören vor allem Unix, Linux, NetWare und Win32. Gab es anfangs noch kleinere Probleme mit der Geschwindigkeit und Stabilität bei Systemen ohne Unix, wurde dies in der zweiten Version 2.0 deutlich verbessert. Nun werden die wirklichen Stärken, die jedes der unterschiedlichen Betriebssysteme mit sich bringt, deutlich besser genutzt. Dies wird durch die Apache Portable Runtime APR Bibliothek möglich wird, da diese wichtige Systemaufrufe verallgemeinern kann. Die aktuellste Version 2.2. ist die zurzeit neueste Version für den Einsatz.

Zusätzlich bietet Apache diverse MPMs, sogenannte Multiprocessing-Module, die für jede Plattform verschiedene Lösungen offeriert, damit zeitgleich die Bedienung mehrerer Client-Anfragen erfolgen kann.

Der Webserver Apache gliedert sich in Module, durch die er dann komplexe Manipulationen von HTTP-Kopfdaten und URLs machen kann. Er lässt sich dadurch auch als Proxserver benutzen oder kann die Kommunikation, die zwischen Browser und Webserver stattfindet, verschlüsseln.

Mit Apache ermöglicht dem Nutzer durch serverseitige Skriptsprachen wie PHP, Ruby, Perl oder anderen die dynamische Erstellung von Webseiten. Die Sprachen sind nicht von vornherein im Webserver integriert, sondern bedürften einer Einbindung als Modul oder einer Ansprache über das CGI. In der Installation von Apache ist aber das modclude enthalten, das in der Lage ist, SSI Server Side Includes auszuführen. So lassen sich einfache dynamische Webseiten leicht erstellen. Zudem kann man den Verwaltungsaufwand von statischen Webseiten auf ein Minimum reduzieren.

Ein solcher Webserver benötigt natürlich entsprechende Sicherungen an, um sich vor Angriffen zu schützen. Auch die nötige Serverhardware von Dell gehört zu einem guten Server. Und wer sich beruflich mit dem Thema auseinandersetzt, wird dem im Informatikstudium in Deutschland auf den Grund gehen können. Auf den folgenden Seiten werden all diese Themen genauer erläutert, damit der Umgang mit dem Apache Webserver problemlos von statten geht.

Apache absichern

Wenn man den Apache Webserver absichern möchte, kann man dafür eine Firewall nutzen. Dienlich ist hier eine Application-Level-Firewall wie modscurity. Diese Firewall benötigt keine einzelnen TCP-Pakete, sondern integriert sich komplett in zu Applikation, die man mit ihr schützen möchte. Dadurch begreift die Firewall auch die individuellen Details des verwendeten HTTP Protokolls. Dadurch ist eine differenzierte Reaktion auf den Inhalt der HTTP-Verbindungen reagieren. Hier liegt ihr Vorteil gegenüber Firewals, die in Paketen filtern. Firewals wie IPTables oder die Windows-Firewall verarbeiten zwar die Nutzdaten, die sich in den Paketen befinden, verstehen die darin befindlichen Informationen aber nicht. Bei diesen Firewalls zählt nur, welche Pakete welcher Netzverbindung angehören, wo sie herkommen und wo sie hingehen. Diese Paketfilter versagen oftmals schon, wenn sie Webseiten sperren soll, auf denen sich schädliche Links befinden oder TCP-Pakete mit bekannten Exploits. Oftmals bedingt die Fragmentierung, dass das Muster, das gefunden werden soll, sich außerhalb eines der einzelnen Pakete befindet. Die verwendeten Übertragungsprotokolle zeigen die Daten oftmals vom Format her nicht einheitlich an. Eine Firewall, die nur Pakete ausfiltert, kann zudem nicht zuverlässig bestimmen, ob die zu prüfenden Daten einer HTTP-Verbindung angehören. Da heute viele Dinge über Verbindungen mit SSL-Verschlüsselung laufen, bekommen Paketfilter zusätzlich Probleme. Eine Application-Level-Firewall für den Apache Webserver, die auch als Level-7-Filterung bezeichnet wird, hat diese Probleme nicht, weil sie auf der Ebene arbeitet, über die zum Beispiel der Browser und der Webserver miteinander kommunizieren.

Im Normalfall konfiguriert man einen Apache Webserver so, dass er unter einem individuellen Benutzer läuft und somit von vorneherein kein Recht auf den Zugriff auf Verzeichnisse hat, die kritisch sein könnten. Wer beim Apache mit einem Unix-System arbeitet, kann den Server zudem mit chroot sichern, was den Zugriff des Webservers auf einen gewissen Teil des vorhandenen Datenbaums beschränkt. Der Document Root wird hierdurch zur Wurzel des virtuellen Dateibaums.

Gegen DoS-Attacken kann man sich mit dem Modul modevasive schützen, das auf einer Blacklist basiert. Das Modul legt in einer internen Hash Tabelle alle IP Adressen der Clients ab, hält eine Zählung derselben ab und sperrt für eine gewisse Zeit den weiteren Zugriff auf die Adressen.

History des Apache Webservers

Der HTTP-Server des Apache-Projekts ist seit über 15 Jahren der am weitesten verbreitete Webserver. Die Geschichte der quelloffenen und kostenlosen Software reicht bis in die Anfangszeiten des WWW zurück.

Der NCSA HTTPd und die Anfänge des Projekts

Hier an der Universität von Illinois hatte der Apache Webserver seine Anfänge

Hier an der Universität von Illinois hatte der Apache Webserver seine Anfänge

In den Jahren nach der Entstehung des WWW wurde am National Center for Supercomputing Applications (NCSA) an der Universität von Illinois eine Software mit dem Namen HTTP daemon (HTTPd) entwickelt. Deren Programmierer Rob McCool stellte sie kostenlos zur Verfügung, und in der Folge verbreitete sich das Programm so weit, dass zeitweise mehr als 90 % aller Internetseiten darüber bereitgestellt wurden. Die Entwicklung geriet jedoch ins Stocken, als McCool das NCSA im Jahr 1994 verließ. Zu dieser Zeit waren bereits zahlreiche inoffizielle Patches und Erweiterungen für den HTTPd im Umlauf, dass der Name des späteren Apache-Webservers von der Bezeichnung „a patchy server“ abgeleitet ist, trifft zwar nicht zu, wird bis heute aber immer wieder gerne erzählt.

Diese mit der Zeit entstandenen Anpassungen wurden im Laufe des Jahres auf einer Mailingliste gesammelt, auf der man gleichzeitig ihre Weiterentwicklung koordinierte. Anfang 1995 wurde die Apache Group gegründet, die damals aus acht Mitgliedern bestand. Im April des Jahres erschien Apache 0.6.2 – die erste offizielle Version des neuen Webservers, der auf der Version 1.3 des HTTPd basierte. Zur gleichen Zeit nahm man am NCSA die Entwicklung der ursprünglichen Software wieder auf, wodurch es in der Folge zu einem Austausch von Patches und Ideen mit dem Apache-Projekt kam.

Gegen Ende der 1990er Jahre wurde die Entwicklung des HTTPd endgültig eingestellt. Der Apache-Webserver hatte nicht nur seinen Vorgänger überholt, sondern setzte sich gleichzeitig als Alternative zu dem von Netscape entwickelten Webserver und zu Microsofts IIS durch. Kurz nach der ersten offiziellen Veröffentlichung war 1995 die gründlich überarbeitete Version 0.8.8 erschienen, und am Ende des Jahres kam Version 1.0 heraus. Seit 1996 handelt es sich bei Apache um den am weitesten verbreiteten Webserver.

Gründung der Apache Software Foundation und die Versionen ab 2.0

Im Juni 1999 wurde die Apache Software Foundation (ASF) gegründet, eine gemeinnützige Organisation, deren Aufgabe es ist, den Apache-Entwicklern Rechtssicherheit zu verschaffen, ihre Interessen zu vertreten und die Marke Apache zu schützen. Inzwischen werden unter dem Dach der ASF zahlreiche weitere Softwareprojekte entwickelt, darunter auch die Bürosoftware OpenOffice.

Die von der ASF veröffentlichte Software steht unter der Apache-Lizenz, deren aktuelle Version 2.0 aus dem Jahr 2004 stammt. Diese ähnelt der GNU General Public License, unter der die meisten anderen Open-Source-Projekte stehen. Wer Apache-lizenzierte Software weiterentwickelt, hat jedoch die Möglichkeit, seine modifizierte Version unter einer anderen Lizenz zu veröffentlichen, und die Änderungen brauchen nicht an die Entwickler der ursprünglichen Version zurückgegeben zu werden. Die Apache-Lizenz kommt auch bei Projekten zu Einsatz, die außerhalb der ASF entwickelt wurden.

2000 wurde der Webserver in der Version 2.0 veröffentlicht, die immer noch weiterentwickelt und mit Sicherheitsupdates versehen wird. Die 1.x-Versionen werden seit 2010 offiziell nicht mehr unterstützt, auch wenn es gelegentlich noch zur Beseitigung von Sicherheitslücken kommt. Ebenfalls im Jahr 2000 fand die erste ApacheCon statt, eine Konferenz, die Softwareentwickler, Distributoren und Nutzer zusammenbringt. Die ApacheCon wird seitdem einmal jährlich in den USA abgehalten, zusätzliche Konferenzen finden in Europa und Asien statt.

2009 wurde Apache zum ersten Webserver, der mehr als 100 Millionen Seiten bereitstellte. Heute laufen weltweit mehr als die Hälfte aller Webseiten darauf.

Modernes Webhosting mit Apache

Der HTTP Apache Webserver ist der meistbenutzte Server weltweit. Sie ist ein freies und bis heute quelloffenes Produkt der Apache Foundation.

Geschichte

Im Jahre 1995 wurde der vorherige Webserver NCSA HTTPd von acht Entwicklern, insbesondere Brian Behlendorf und Roy T. Fielding, entwickelt. Der Apache HTTP Server wurde im April 1996 veröffentlicht und erlangte sehr schnell Berühmtheit, außerdem ist er bis heute sehr bekannt. Der Name wurde aus Respekt vor dem nordamerikanischen Indianerstamm, welche Apachen genannt werden, gewählt.

Versionen

Zahlreiche Sever-Versionen wurden bereits entwickelt, die erste war die Version 1.0.0, der Nachfolger war die Version 1.3.0, jedoch werden die Ausgaben aus den Jahren 1995 bis 2010 nicht mehr unterstützt, da diese bereits veraltet sind. Alle Apache Server Versionen 2.0. werden nicht mehr unterstützt und nicht weiterentwickelt, ebenso die Varianten 2.2.0 bis 2.2.25, die Versionen 2.2.26 und 2.2.27 werden jedoch noch unterstützt. Die Varianten 2.3 bis 2.4.7 sind ebenfalls veraltet, die aktuellste Version ist die Ausgabe 2.4.9, welche am 17. März 2014 veröffentlicht wurde. Der Apache HTTP Server wird von allen Webbrowsern unterstützt. Außerdem ist er in fast allen Linux-Distributionen und in Mac OS X standardmäßig enthalten.

Wichtige Versionen

Apache 1.x: Diese Version wurde im Jahre 1995 veröffentlicht, die Weiterentwicklung des letzten Entwicklungszweiges 1.3x lief im Februar 2010 aus. Seitdem wurde Version 1 nur noch mit Sicherheitsupdates versorgt, falls erforderlich, jedoch ist nun auch die Entwicklung der Sicherheitsupdates eingestellt.

Apache 2.x: Diese Version wurde im März 2000 veröffentlicht. Von dieser Version werden alle Entwicklungszweige, bis auf Version 2.0, weiterhin mit Sicherheitsupdates und Weiterentwicklungen versorgt, der Fokus der Entwickler liegt jedoch auf Version 2.4.

Erweiterungen und Module

Der Apache HTTP Server kann sehr gut mit sogenannten Modulen erweitert werden und zusätzliche Funktionen können hinzugefügt werden. Die Module beginnen fast immer mit „_mod“ (z. B. mod_rewrite, mod_php5, mod_ssl). Es gibt diverse Module, u.a. für:

  • SSL (mod_ssl für OpenSSL, mod_gnutls für GnuTLS)
  • Einbindung und Verwendung von dynamischen Skriptsprachen (u. a. mod_php5, mod_perl, mod_python)
  • Unterstützung von zusätzlichen Protokollen (WebDAV: mod_dav, mod_dav_fs, mod_dav_lock, mod_dav_repos)
  • Authentifizierung (mod_auth*)
  • Weiterleitung an andere Server (mod_proxy)
  • Umschreiben und Weiterleitung von Anfragen (mod_rewrite; letzteres mit Hilfe von mod_proxy)
  • Änderungen an Headerzeilen (mod_header)
  • Automatische Informationen über Dateitypen (mod_mime, mod_mime_magic)
  • Automatische Erzeugung von Statusberichten (mod_status)

Eigenschaften und Funktionen

Der Apache Server unterstützt eine Vielzahl an Betriebssystemen, wie z.B. Linux, Unix, Win32 und NetWare. In Version 2.0 wurden die Leistungen des Servers, besonders für Betriebssystemen wie Linux, Win32 und Netware, erheblich verbessert. Eine Bibliothek zur Verallgemeinerung aller wichtigen Systemaufrufe, gennant Apache Portable Runtime (APR), wurde entwickelt, um die individuellen Stärken des jeweiligen Betriebssystems ausreichend nutzen zu können.

Ebenso wurden unterschiedliche Multiprocessing-Module (MPM) eingebaut, sodass je nach Plattform verschiedene Lösungen zur gleichzeitigen Bedienung mehrerer Client-Anfragen angeboten werden.

Der Server ist modular aufgebaut, was einem ermöglicht, durch entsprechende Module beispielsweise die Kommunikation zwischen Browser und Webserver zu verschlüsseln (mod_ssl). Er kann ebenfalls als Proxyserver eingesetzt werden (mod_proxy) oder komplexe Manipulationen von HTTP-Kopfdaten (mod_headers) und URLs (mod_rewrite) durchführen.

Der Apache ist in der Lage, Webseiten dynamisch zu erstellen, was mittels Skriptsprachen ermöglicht wird. Häufig verwendete Skriptsprachen sind daher zum Beispiel PHP, Perl oder Ruby, unter anderem auch Python, JavaScript, Lua, .NET und Tcl. Jedoch sind die Skriptsprachen kein Bestandteil des Servers, da man sie ebenfalls als Modul einbindet oder über das CGI anspricht.

Webseiten dynamisch zu erstellen, sowie den Verwaltungsaufwand statischer Webseiten zu mindern, wird durch den Server Side Includes (SSI) ermöglicht. Nach der Apache-Installation ist das mod_include enthalten, das den SSI ausführen kann.

Der Apache HTTP Server ist eine freie Software, d.h., dass jeder Webbrowser und jedes Betriebssystem vom Programm unterstützt wird. Derzeit wird noch die stabile Version 2.2x unterstützt und mit diversen Sicherheitsupdates versorgt. Bei einem Produktiveinsatz empfehlen die Entwickler die Version 2.4x.

Konfiguration

Trotz der großen Verbreitung des Apache HTTP Servers fällt die Konfiguration schwer, daher verwenden viele Webbrowser Konfigurationsdateien wie Plesk. Jedoch sind Dateien wie Plesk nicht sonderlich ressourcenintensiv, weswegen es oft hilfreicher ist, eine individuelle Konfigurationsdatei zu finden.

Konfigurationsbeispiele

Grundsätzlich kennt Apache nur eine Konfigurationsdatei, nämlich etc/apache2/apache2.conf, jedoch gibt es noch weitere:

/etc/sysconfig/apache2
/etc/sysconfig/apache2 enthält einige globale Einstellungen von Apache, beispielsweise die zu ladenden Module, die einzuschließenden Konfigurationsdateien, die beim Serverstart zu verwendenden Flags sowie Flags, die der Kommandozeile hinzugefügt werden sollen. Die Konfigurationsoptionen dieser Datei sind ausreichend dokumentiert und werden daher an dieser Stelle nicht näher erläutert. Für die Konfigurationsanforderungen eines typischen Webservers dürften die Einstellungen der Datei /etc/sysconfig/apache2 ausreichen.

/etc/apache2/
/etc/apache2/ enthält alle Konfigurationsdateien für Apache. In diesem Abschnitt wird der Zweck jeder einzelnen Datei erklärt. Jede Datei enthält mehrere Konfigurationsoptionen (auch als Direktiven bezeichnet). Die Konfigurationsoptionen dieser Datei werden ebenfalls ausreichend dokumentiert

Beispielkonfiguration des Apache

Dieses Beispiel stammt aus einem unserer ersten Tutorial vom Januar 2003.

Im Folgenden möchte ich ein paar Einstellungen der zentralen Konfigurationsdatei des Apache-Webservers, der httpd.conf, näher erläutern, auf der Basis der Erfahrungen, die ich als Webentwickler seit 1999 machen durfte. Eine Garantie für die 100%ige Richtigkeit der Angaben kann ich nicht übernehmen. Ich gehe davon aus, dass alle benötigten Module installiert und in der Konfiguration eingetragen sind.

Start- und Indexseiten festlegen

<IfModule mod_dir.c>
DirectoryIndex index.htm index.html index.shtml index.asp index.php
</IfModule>

DirectoryIndex steht für den Namen der Dateien, die als Start- und Indexseiten in einem Ordner akzeptiert werden. Soll z.B. eine Datei namens start.html als Startseite akzeptiert werden, muss diese hinzugefügt werden. Falls die obigen Zeilen mittels # nur als Kommentar gewertet werden, kann ein Surfer in jedem Ordner browsen, in dem keine index-Datei liegt – er bekommt alle Dateien innerhalb der betreffenden Webpräsenz ebenso frei angezeigt, als würde er mit dem Explorer seine Festplatte durchsuchen (mit Ausnahme des cgi-bin). Dies kann ein Sicherheitsrisiko darstellen oder eine besondere Offenheit des Webmasters.
Falls man keinen Zugriff auf die Apache-Konfiguration hat, sollte man im obersten Verzeichnis der Webpräsenz (falls nicht vorhanden) eine Datei namens .htaccess erstellen und folgende Zeile eintragen:

DirectoryIndex index.php index.html index.shtml

.htaccess

Dies ist eine der wichtigsten Dateien für einen Webmaster, um Zugriffsberechtigungen für jedes Verzeichnis auf dem Webserver zu regeln. Deshalb sollte die Zeile

AccessFileName .htaccess

auf jeden Fall ohne Raute versehen sein.

Jede .htaccess ist für den Ordner zuständig, in dem sie liegt, sowie für alle darunterliegenden Ordner. Enthält ein untergeordneter Ordner allerdings eine eigene .htaccess, bestimmt diese die Zugrifssberechtigungen. Beim Erstellen passwortgeschützter Verzeichnisse kommt eine Datei namens .htpasswd dazu, die Usernamen und verschlüsselte Passwörter enthält. In diesem Fall lautet der Inhalt der .htaccess wie folgt:

AuthType Basic
AuthName „Secured Area“
AuthUserFile /absoluter/UNIX/Pfad/.htpasswd
require valid-user

Mittels der .htaccess kann auch festgelegt werden, welche Fehler-Seiten ein User zu Gesicht bekommt, anstelle des Standards wie z.B. der beliebten 404-Fehler-Seite. Sie stellt also einen wesentlichen Beitrag hinsichtlich der Usability dar:

ErrorDocument 404 /index.html

Diese Zeile sorgt z.B: dafür, dass ein User, der eine nicht mehr oder nicht existierende Seite aufruft, einfach auf die Startseite gelenkt wird. Oder man verweist statt auf index.html auf eine extra-designte Fehlerseite.

PHP zuordnen

<IfModule mod_php4.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php-source .phps
</IfModule>

Dies bedeutet, dass alle Dateien mit der Endung .php und .php4 mit PHP4 geparst werden. Wenn bei Debian PHP4 nach PHP3 installiert wird, wird PHP3 automatisch deinstalliert. Aus Sicherheitsgründen sollte PHP3 nicht mehr zum Einsatz kommen. An dieser Stelle sollte man m.E. festlegen können, dass auch HTML-Dateien mit PHP geparst werden – für den Fall, dass man eine bereits bei Suchmaschinen gut registrierte HTML-Seite um PHP-Funktionalitäten erweitern, die Dateiendungen aber nicht ändern will. Folgende Zeile sollte dann eingefügt werden:

AddType application/x-httpd-php .html

Server Side Includes (SSI)

Wer seine Seite um dynamische Elemente erweitern möchte, ohne gleich auf PHP umzusteigen, ist mit SSI bestens beraten. Dynamisch bedeutet, dass die Seite beim Abrufen erst in dieser Form erzeugt wird.
Dafür müssen die Kommentarzeichen bei den folgenden Stellen entfernt werden:

AddType text/html .shtml
AddHandler server-parsed .shtml

Damit SSI auch ausserhalb des cgi-bin ausgeführt werden (was sich unbedingt empfiehlt), sollte auch die vorausgehende Zeile auskommentiert werden:

AddHandler cgi-script .cgi

Sollen auch Dateien mit der Endung .html geparst werden, sollte m.E. folgendes ergänzt werden (dabei ist zu beachten, dass jedes Parsen zusätzliche Serverlast erzeugt):

AddHandler server-parsed .html

Diese Befehlssätze erlauben zum einen, dass Serverinformationen beim Abfragen einer Seite direkt eingebunden werden, wie z.B. das Datum der letzten Änderung oder das aktuelle Tagesdatum:

<!–#echo var=“LAST_MODIFIED“ –>
<!–#config timefmt=“%d.%m.%Y, %H.%M“–>

Noch wertvoller ist die aus SSI resultierende Möglichkeit des modularen Programmierens. Wiederkehrende Elemente auf einer Website werden in eine Extra-Datei ausgelagert und auf jeder Seite, auf der sie auftauchen sollen, per SSI eingebunden. Soll z.B. der Header eingebunden werden, lautet der Befehl in einer Datei:

<!–#include virtual=“/inc/header.htm“ –>

Dabei empfiehlt es sich, wie in dem Beispiel mit absoluten Pfaden zu arbeiten und alle Includes in einem eigenen Verzeichnis abzulegen. Damit die Seiten entsprechend interpretiert werden, müssen sie auf .shtml enden.

Links:

Selfaktuell/Teamone: Deutsche Übersetzung der httpd.conf
Dr. Web: SSI programmieren
FH-Kiel: Beispiel für Server Side Includes