Apache: Tipps & Tricks

Artikel geschrieben am 01.02.2022 um 19:47 Uhr, aktualisiert um 18:47 Uhr.

Im Grunde passt man immer die Konfiguration des Webservers an. Wenn man mehrere Server betreut oder schlicht einen speziellen Ordner hat, den man in sein Backup einfließen lassen möchte um die Standard-Installation anzupassen, bietet es sich an nach der Installation ein paar Anpassungen vorzunehmen.
Wer diese Schritte nicht machen möchte, der kann natürlich jederzeit auch die vorhandene Konfigurationsdateien anpassen.
Wie immer gehe ich von einem Debian Linux-Basisystem aus.

Nach der Installation des Apache-Pakets wird der Ordner /etc/apache2/conf-BEZEICHNER angelegt. In diesen legen wir unsere eigenen Konfigurationsdateien und überschreiben den Standard.
Danach muss in der Standard-Konfiguration von Apache (/etc/apache2/apache2.conf) dieses Verzeichnis mit angegeben werden. Es wird vermutlich die Zeile IncludeOptional sites-enabled/*.conf geben. Direkt darunter kann die zusätzliche Zeile IncludeOptional conf-BEZEICHNER/*.conf hinzugefügt werden. Bei jedem Neustart des Dienstes werden jetzt alle Konfigurationsdateien in diesem Verzeichnis ebenfalls geladen.
Um einen besseren Überblick zu behalten kann man vor die Dateien eine Zahl schreiben. Damit lässt sich sehr leicht die Reihenfolge des Einlesens von Konfigurationsdateien steuern.
In meinem Fall habe ich 1-basis.conf, 2-additional.conf und 3-security.conf für das System selbst reserviert. Dazu existiert noch eine Standard vHost-Konfiguration (7-default-vhost.conf) und die aktiven vHosts (8-vhosts.conf)

Sicherheit

Es gibt ein paar Standardeinstellungen und einige, die gerne übersehen werden, die in jedem Fall einstellt werden sollten.

  • ServerTokens Prod: Die offizielle Voreinstellung steht meist auf full, was eine vollständige Ausgabe der verwendeten Apache-Version und der einkompilierten Module enthält, z.B. Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2. Je mehr Daten ein Besucher erhält, desto höher ein möglicher Angriffsvektor! Der Wert Prod kürzt die Angabe schlicht auf Apache ein. Das macht die Serversoftware nicht grundsätzlich sicherer, aber man erschwert das Finden der installierten Version und damit die Verwendung von möglichen Sicherheitslücken.
  • ServerSignature Off: Hier ist die Voreinstellung bereits Off, allerdings schadet ein explizites Setzen dieses Wertes sicherlich nicht. Ab Apache-Version 2.0.44 wurde diese Direktive offiziell von ServerTokens abgelöst.
    Sie sorgte früher dafür, dass in servergenerierten Dokumenten eine Fußzeile mit genaueren Serverinformationen ausgegeben wurde.
  • DirectoryIndex index.php index.html: Damit legen wir die Dateinamen und die Reihenfolge fest, die standardmäßig geladen werden, falls in der Request-URI keine Zieldatei angegeben ist.
  • LogFormat "%h %l %u %t \"%r\" %>s %b %V \"%{Referer}i\" \"%{User-Agent}i\"" combined: Wer ein eigenes Log-Format für seine vHost-Konfiguration nutzen möchte sollte es ebenfalls an einer zentralen Stelle festlegen und ihm einen Bezeichner geben. Der Vorteil: In den vHosts nutzt man das definierte Format und sollte z.B. eine datenschutzrechtliche Anpassung erfolgen müssen, dann hat man eine gezielte Stelle, die aktualisiert werden muss.
    Auch mehrere Definitionen sind durchaus möglich und verdeutlichen das man unterschiedliche Formate im Einsatz hat.
  • Directory-Listing global abschalten:
    <Directory /var/www/>
    Options -Indexes -FollowSymLinks
    AllowOverride None
    Require all denied
    </Directory>
  • Verzeichnis: /var/www/kunden anlegen
    Wenn auf dem Server mehrere Kunden bzw. Seiten liegen, dann macht es Sinn ein extra Verzeichnis, neben dem üblichen html-Verzeichnis, anzulegen. Hat man nur eine Webseite, dann benötigt man diese Umstand natürlich nicht.
    Hintergrund: Ein eigenes Verzeichnis, dass nicht zur Standardinstallation von Apache gehört, wird in jedem Fall nicht automatisch erweiterte Regelungen bzw. Zugriffe erhalten. Damit ist unsere Konfiguration die einzige, die im Zweifel diesen Verzeichnissen einen Zugriff erlaubt.
    <Directory /var/www/kunden>
    AllowOverride All
    Require all denied
    </Directory>
  • Versionskontrollsysteme: Wer z.B. Git oder SVN einsetzt, der kennt die automatischen Verzeichnisse, die besser nicht öffentlich im Zugriff sind. Auch dafür kann man eine globale Regel definieren. Falls jemand unter keinen Umständen solche Verzeichnisse hat, kann er die Einstellung natürlich weglassen. Da aber immer mehr Frameworks auf solchen Plattformen verteilt werden ist es nur sinnvoll sie mit aufzunehmen, selbst wenn man sie selbst nicht aktiv einsetzt!
    <DirectoryMatch "/\.svn|/\.git">
    Require all denied
    </Directory>
  • Beim Einsatz des SSL-Moduls: Abschalten alter Protokollversionen
    Viele Protokolle sind heute nicht mehr als sicher deklariert und je nach Stufe muss eine Abschaltung sogar gewährleistet sein. In jedem Fall ist es sinnvoll, falls nicht aus irgend einem Grund benötigt, alte Protokolle global abzuschalten mithilfe von:
    <IfModule mod_ssl.c>
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    </IfModule>