Rezept für scharf gewürztes Mod_Security mit Apache unter SuSE 10.2

Gestern Abend habe ich mich mal mit der mod_security für den Apache befasst, und sogleich direkt installiert. Grade für den Betrieb von fertigen Scripts wie Joomla oder WordPress sollte man wohl vor SQL Injections und sonstigen Web basierten Angriffen so gut wie möglich geschützt sein.
Hier mal ein Kochrezept für SuSE 10.2 und Apache 2.x nach Art des Hauses:
Grundlegend habe ich mich bei allem an den Hersteller gehalten, welcher an sich schon eine super Doku liefert: http://www.modsecurity.org.
Leider habe ich allerdings auf meinem Server keinen Build der modsecurity-apache_2.5.0 Stable hinbekommen, weshalb ich mich dann kurzerhand für die 2.5.1 RC1 entschieden habe. Bei den kurzen Entwicklungszyklen der Mod Bastler, sollte hier wohl bald ein Stable nachkommen.
Die Grundzutaten:
Man nehme zunächst unter SuSE einen feine Prise Yast und werfe folgende Pakete in den Topf:

pcre-devel
libxml2-devel
apache2-devel
Lua (Version >=5.1)
(Auch das Apache mod_unique_id.so muss da sein. Prüft hierzu bitte das lib dir Eures Indianers.)

Nun zur Zubereitung des Hauptgerichtes.
Wir laden modsecurity-apache_2.5.1-rc1.tar.gz herunter, entpacken und bereiten uns aufs kochen vor:

wget http://www.modsecurity.org/download/modsecurity-apache_2.5.1-rc1.tar.gz
tar -xvzf modsecurity-apache_2.5.1-rc1.tar.gz
cd modsecurity-apache_2.5.1-rc1/apache2

Nun kochen wir mal die Mod Security Quellen schön aus:

.configure
make
make install

Heraus sollte so etwas in dieser Art kommen:
———————————————————————-
Libraries have been installed in:
  /usr/lib/apache2

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR‘
flag during linking and do at least one of the following:
  – add LIBDIR to the `LD_LIBRARY_PATH‘ environment variable
  during execution
  – add LIBDIR to the `LD_RUN_PATH‘ environment variable
  during linking
  – use the `-Wl,–rpath -Wl,LIBDIR‘ linker flag
  – have your system administrator add LIBDIR to `/etc/ld.so.conf‘

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
———————————————————————-

Nun noch Salz und Pfeffer für den Zugriff:

chmod 755 /usr/lib/apache2/mod_security2.so

Damit haben wir nun ein schönes Süppchen zusammengekocht. Fehlen noch die nicht minder wichtigen Beilagen, das Security Gemüse quasi:

Wir brauchen noch Regeln, nach welchen unser Mod schmecken soll:

wget http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz
tar –xvzf modsecurity-core-rules_2.5-1.6.0.tar.gz

Vorsicht: Dieses Paket baut kein Directory!

Die ausgepackten modsecurity_*.confs habe ich nun dem apache beigemengt:

mkdir /etc/apache2/mod_sec
mv mod* /etc/apache2/mod_sec/.
(Oder Ihr wart so schlau, das .tar gleich dort zu entpacken). Das Verzeichnis „optional“ habe ich gekillt, da nach Test die Regeln darin mir zunächst zu heftig waren.

Folgende Gewürze stehen bei mir nun aktiv im mod_sec:

modsecurity_crs_10_config.conf
modsecurity_crs_20_protocol_violations.conf
modsecurity_crs_21_protocol_anomalies.conf
modsecurity_crs_23_request_limits.conf
modsecurity_crs_30_http_policy.conf
modsecurity_crs_35_bad_robots.conf
modsecurity_crs_40_generic_attacks.conf
modsecurity_crs_45_trojans.conf

Nun müssen wir noch würzen, also das Mod aktivieren. Hierzu rein in die httpd.conf:

vi /ect/apache2/httpd.conf

Irgendwo weit oben bei den allgemeinen Deklarationen habe ich dann die nötigen Zeilen eingefügt:

#####Mod_Security ####
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua.so
LoadModule unique_id_module /usr/lib/apache2/mod_unique_id.so
LoadModule security2_module /usr/lib/apache2/mod_security2.so
Include /etc/apache2/mod_sec/*.conf

Ich fand den vorgeschlagenen Ort der Programmierer ganz fein, daher habe ich also ein logfile nach Entwicklerwunsch gebaut:

touch /srv/www/logs/modsec_audit.log

Dies dürft Ihr aber nach Belieben auch anders würzen, dazu müsst Ihr nur die entsprechende Zeile in der modsecurity_crs_10_config.conf finden und anpassen.

vi /etc/apache2/mod_sec/modsecurity_crs_10_config.conf

Also, wie gesagt, falls geändert – nun Logfile Zeile suchen und entspr. Anpassen…

Um den Mod wirklich scharf zu machen habe ich folgende Zeile aktiviert, also vom # befreit:

SecDefaultAction „phase:2,log,deny,status:403,t:lowercase,t:replaceNulls,t:compressWhitespace“

Zum Schluss bei SuSE so fix:

rcapache restart

Nun schaut bitte mal in Euer Apache log. Da solltet Ihr beim Restart nun eine Zeile in dieser Art finden:

[notice] ModSecurity for Apache/2.5.1-rc1 (http://www.modsecurity.org/) configured.

Wenn Ihr nun anfangen wollt, mit den regeln ein wenig zu spielen, schaut doch noch bei  Blogsecurity vorbei. Hier gibt es z.B. einen feinen Regelsatz für WordPress Installationen.

Zum Abschluss alles testen und Logfile prüfen, und…

Heiss servieren!

About the Author

David Wagner

David Wagner

IT Berater, Technology Evangelist, Nerd, Geek, Daddy of Darth Tom, Star Wars, LEGO®, Foto, und Wakeboarding. Lebt im Internet, und mit der Familie in einem norddeutschen Kaff namens Hude.