mod_security als Teil der Apache Sicherheit
geschrieben von | einsortiert in Webserver - Apache | geschrieben am 09.06.2011
Laden Sie sich das Modul mod_security von http://www.modsecurity.org und entpacken es auf die lokale Platte.
Für Apache2 gehen Sie in dem Verzeichnis, in dem die Dateien entpackt wurden, in das ./apache2 Verzeichnis und kompilieren dort das Modul mit der DSO-Methode. Dies geht einfacher und schneller.
1
apxs2 -cia mod_security.c
Falls das apxs2 Programm nicht gefunden wurde, so muss das Paket apache2-devel.-2.0.x.rpm installiert werden, dort ist das Tool apxs2 enthalten. Das Programm möchte die /etc/apache2/httpd.conf-prefork aktualisieren, was aber nicht unbedingt sein muss, normalerweise heisst diese Datei auch /etc/apache2/httpd.conf.
Nun müssen wir noch einen symbolischen Link anlegen:
1 2 3
# cd /usr/lib/apache2-prefork
# ln -s ../apache2/mod_security.so mod_security.so
Manuell kann man diese Konfiguration auch machen: Fügen Sie in die /etc/apache2/httpd.conf folgende Zeilen ein:
1 2 3 4 5
# Security Module
LoadModule security_module /usr/lib/apache2-prefork/mod_security.so
Include /etc/apache2/modsecurity.conf
Wenn Sie ein separates Verzeichnis für das audit und das debug Lofilge möchten, so legen Sie dieses an, z.B.
1
# mkdir /var/log/apache2/security
Nun müssen wir noch die Security-Richtlinien /etc/apache2/modsecurity.conf erzeugen und mit Inhalt füllen. Hier eine Beispieldatei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
# Enable ModSecurity
SecFilterEngine On
# Reject requests with status 403
SecFilterDefaultAction "deny,log,status:403"
# Some sane defaults
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding Off
# Accept almost all byte values
SecFilterForceByteRange 1 255
# Server masking is optional
# SecServerSignature "Microsoft-IIS/5.0"
# Designate a directory for temporary files
# storage. It is a good idea to change the
# value below to a private directory, just as
# an additional measure against race conditions
SecUploadDir /tmp
SecUploadKeepFiles Off
# Only record the interesting stuff
SecAuditEngine RelevantOnly
#SecAuditEngine On
# Uncomment below to record responses with unusual statuses
# SecAuditLogRelevantStatus ^5
SecAuditLog /var/log/apache2/security/audit_log
# You normally won't need debug logging
SecFilterDebugLevel 0
SecFilterDebugLog /var/log/apache2/security/modsec_debug_log
# Only accept request encodings we know how to handle
# we exclude GET requests from this because some (automated)
# clients supply "text/html" as Content-Type
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Type "!(^application/x-www-form-urlencoded$|^multipart/form-data;)"
# Do not accept GET or HEAD requests with bodies
SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Length "!^$"
# Require Content-Length to be provided with
# every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
# Don't accept transfer encodings we know we don't handle
SecFilterSelective HTTP_Transfer-Encoding "!^$"
Dies ist nur eine Beispieldatei und muss noch den Begebenheiten angepasst werden.
Als vorletzen Schritt sollte die Konfiguration zuerst überprüft werden
1
# apache2ctl configtest
was als Ergebnis Syntax OK bringen sollte.
Nun kann man den Apache2-Server reloaden:
1
# /etc/init.d/apache2 reload
oder wenn er nicht gelaufen ist neu starten:
1
# /etc/init.d/apache2 start
