Apache 2 sicherer machen

Einleitung
Leider gibt es nie einen Garant für absolute Sicherheit! Es ist daher notwendig zu wissen, dass ein Hacker immer 1 Schritt voraus ist und niemals auf einen Patch wartet. Vor Scriptkiddys muss man weniger Angst haben, da diese keine Exploits selbst schreiben können.

Updates
Um euren Apache zu beginn schon etwas sicherer zu machen als bei einer Standard Installation, müsst ihr stehts die aktuellste Version haben. Die aktuelleste Version findet ihr hier:

Apache httpd Download


Versteckspiel
Verstecken sie bei Möglichkeit alle Versionsnummern und sonstigen Informationen welche darauf schliessen lassen welche Version sie von Apache oder den verwendeten Modulen aktiviert haben. Die geschieht ganz einfach mit folgendem Befehl in eurer httpd.conf

ServerSignature Off
ServerTokens Prod
ServerSignaturen erscheinen bei Apache gerenderten Webseiten
ServerTokens erscheint im HTTP Header im Feld Server:

Für geübte ist es auch möglich den Servertoken in den Sources vor dem kompilieren zu ändern.


Der Indianer braucht seine eigenen Rechte
Viele standard Installationen, installieren Apache mit dem User "nobody" und auch der Gruppe "nobody". Das Problem liegt auf der Hand. Wenn der Apache und ein Mailserver mit der Gruppe "nobody" gestartet wird, und der Apache Server oder der Mailserver geknackt wird, sind beide Server gleichermassen schlimm betroffen. Dies kann man einfach umgehen indem man dem Apache Server eine eigene UID/GID gibt.

User apache
Group apache

Zugriff?
Kontrollieren sie die Zugriffsrechte vom Apache, damit eine PHP Applikation (oder sonstiges) keinen Zugriff auf Verzeichnisse unterhalb des Webroots hat.

<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /web>
Order Allow,Deny
Allow from all
</Directory>
 Achtung: wir haben "Options None" und "AllowOverride None" eingestellt. Dies setzt voraus, das für jedes Directory, welches eine Option oder einen Override braucht es explizit gesetzt werden muss.

Optionen ausschalten
Nicht nur um Resourcen zu sparen sondern auch aus Sicherheitsgründen sollten nur die Optionen verwendet werden, welche auch wirklich gebraucht werden. Deshalb fügt ihr einem Virtualhost folgende Options hinzu

Options -ExecCGI -FollowSymLinks -Indexes -Includes

.htaccess Support
Falls du Overrides brauchst, stell vorher sicher das diese nicht heruntergeladen oder geändert werden können. Eine zusätzliche Sicherheit bietet die .htaccess umzubenennen und statt dessen als Beispiel ".helloworld" zu nehmen. Zusätzlich kann man noch eine Sperre für ".ht*" Dateien erstellen. Hier noch ein Beispiel

AccessFileName .helloworld
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>

mod_security
Hmmmmmmm viele werden mir jetzt wahrscheinlich den Kopf abreissen und sagen mod_security macht nur Probleme und führt zu nichts. Zudem habe mann eine starke Leistungseinbusse.

Nun bei einem Punkt kann ich zustimmen. Mod_security mit allen Rules ist wirklich langsam. Man hat aber wie überall die möglichkeit durch Regular Expressions, seine eigenen Filter zu erstellen die den eigenen Webserver mehr schützen.


Module Friedhof
Nicht gebrauchte Module kann man getrost abstellen. Dies steigert die Performance
und nimmt einige Last von unserm Indianer.in der httpd.conf findet ihr eine Linie die sagt LoadModule. Um Module zu
deaktivieren, könnt ihr einfach an den beginn der Linie ein # hinmachen.

Hier seht ihr noch ein paar Module die typischerweise geladen werden
mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex. 


Root Access...
Kontrollieren sie bitte ob nur root die Berechtigung hat um auf die Apache Config und die Apache Binarys zuzugreifen

chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache


Timeout Value
Normalerweise ist das Timeout Value bei 300 Sekunden. Dies kann fatale Folgen bei einer DoS (Denial of Service) Attacke haben. Ändern sie diesen Wert deshalb auf 15-45...


Timeout 45

Grossmäuler stopfen
Apache hat von Haus aus viele Möglichkeiten anfragen zu limitieren. Ein wichtiger Punkt hier ist die
"LimitRequestBody" Direktive. Normalerweise ist diese auf unlimitiert eingestellt. Falls also nur Datei Uploads
kleiner 1MB erlaubt werden kann die Direktive auf den Wert von 1MB gesetzt werden

LimitRequestBody 1048576


XML Jeans zu gross
Falls ihr mod_dav (typischerweise in Verbindung mit Subversion) einsetzt, wollt ihr auch den XML Request
Body limitieren. Wie im Beispiel oben, könnt ihr diesen auf 1MB setzen



LimitXMLRequestBody 10485760


Allow from Underground
Um den Zugriff von unbefugten bösen Netzwerken zu unterdrücken, kann dies in der
Virtualhost Config erstellt werden. Ein selbsterklärendes Beispiel gibt es
natürlich noch dazu


ein Netz erlauben, alles andere blockieren:
Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16
einzelne IP erlauben, alles andere blockieren:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1

Das Gefängnis
Alle reden davon, also machen wir das doch auch.
chroot erlaubt es dir deinen Apache Webserver in einem kleinen Gefängnis zu betreiben. Dies ist wohl die Sicherste Variante, falls sich auf dem selben Server noch mehr Dienste befinden.
Nicht alle Module lassen sich in ein chroot migrieren, deshalb sollte die zuerst in einer Testumgebung probiert werden.
comments powered by Disqus