mod_security auf Debian Sarge und Apache 2 installieren

Heute „durfte“ dieser Webserver eine Spam-Attacke ungeheuren Ausmaßes aushalten (drum auch der kurze Ausfall heute Mittag(was zu viel ist, ist zu viel…), weshalb ich nun endlich mod_security auf dem Server eingerichtet habe. Wie das geht, zeige ich nun im folgenden.

Werbung


Was ist überhaupt mod_security?

ModSecurity is an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure.

Ganz einfach eine z.B. in einen Webserver integrierte Firewall, welche keine Packete analysiert, sondern direkt die Befehle fürs HTTP-Protokoll. So erkennt diese z.b. SQL-Injections, phpBB-Exploit-Attacken und vieles mehr.

Wie man über ein schnelles apt-cache search libapache2-mod-security herausfinden kann, gibt es bereits ein packet für apache2 und mod-security auf Debian. Leider ist dieses älter als 1.9 (momentan ist es um genau zu sein 1.8.7-1), weshalb man den „exclude“-Befehl, mit welchem man bestimmte Seitenaufrufe (welche irrtümlich von mod_security als Angriff eingeschätzt werden) wieder ausschließen kann, leider nicht verwenden kann.

„Geht gar nicht“ dachte ich mir und wollte schon fast selbst kompilieren (wäre auch ok gewesen, immerhin gibts ja schon mod_security2.0.4….), da stolperte ich auf der Hersteller-Seite auf der Downloadseite über einen Link zu debian-unofficial.org (Link nicht mehr verfügbar), welche das Packet in einer Version > 1.9 dort anbieten.

Ein kurzes einfügen in die /etc/apt/sources.list von:

deb http://ftp.debian-unofficial.org/debian sarge main contrib non-free restricted

und anschließendes:

apt-get update
apt-get install libapache2-mod-security

brachte mir die Software auf den Server. Doch aktivieren musste man sie auch noch:

a2enmod mod-security

Damit war’s im Apachen aktiviert, doch noch nix konfiguriert.
BITTE DEN APACHE2 NOCH NICHT NEUSTARTEN!
Folgender Inhalt muss in eine Datei (Name beliebig) in /etc/apache2/conf.d/:

SecFilterEngine On
SecAuditLog /var/log/apache2/audit.log
SecFilterDefaultAction deny,log,status:500.
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckCookieFormat On
SecFilterCheckUnicodeEncoding Off
SecFilterNormalizeCookies On
SecFilterCookieFormat 1
SecServerResponseToken Off
SecFilterForceByteRange 1 255
SecServerSignature "Server secured with the Help of Uli's Blog - https://wolf-u.li"
SecUploadDir /tmp
SecUploadKeepFiles Off
SecAuditEngine RelevantOnly
SecFilterDebugLevel 0
Include /etc/apache2/mod-security/exclude.conf
Include /etc/apache2/mod-security/rules.conf
Include /etc/apache2/mod-security/rootkits.conf
Include /etc/apache2/mod-security/apache2-rules.conf
Include /etc/apache2/mod-security/useragents.conf
Include /etc/apache2/mod-security/proxy.conf
Include /etc/apache2/mod-security/blacklist.conf
Include /etc/apache2/mod-security/blacklist2.conf
Include /etc/apache2/mod-security/recons.conf
Include /etc/apache2/mod-security/badips.conf

Damit obige Config funktioniert muss noch etwas heruntergeladen werden. Nämlich die Rules, welche festlegen, was geblockt werden soll. Entweder man verwendet hier ganz einfache Rules oder professionelle(zweiteres beschreibe ich im folgenden):

cd /etc/apache2/
wget http://www.gotroot.com/downloads/ftp/mod_security/apache2/apache2-gotrootrules-latest.tar.gz
tar xfvz apache2-gotrootrules-latest.tar.gz
mv apache2 mod-security

Nun muss der Apache2 noch neu gestartet werden:

/etc/init.d/apache2 restart

Damit ist der WebServer mit mod_security ausgestattet. Aber man sollte auf jeden Fall die logs monitoren, ob nicht vielleicht Seiten geblockt werden, die eigentlich ok sind. Die kann man über das Logfile /var/log/apache2/audit.log anschauen 😉

Übrigens kann man die Regeln (welche immer mal wieder aktualisiert werden) auch automatisch herunterladen lassen, wozu es hier ein Script gibt.

Bei Fehlern,Fragen, Anmerkungen oder Anregungen einfach einen Kommentar hinterlassen 😉
Greetz

PS: Übrigens sehr interessant ist das Handbuch zur Software!

Veröffentlicht von

Uli

IT-Nerd und Admin

30 Gedanken zu „mod_security auf Debian Sarge und Apache 2 installieren“

  1. Nach etwa 30 mins sind direkt mal 7MB Log-Files aufgelaufen (vor allem Spamattacken auf dieses Blog, weshalb ich nun Logging abgeschalten habe, bis ich eine bessere Lösung habe 😉
    Laufen tut wohl alles

  2. servus uli,

    erst mal danke fuer dein kleines aber sehr feines howto 🙂

    hab nen kleinen bug gefunden. in der zeile

    „… Datei (Name beliebig) in /etc/apache/conf.d/:“

    muss das verzeichnis – wenn ich mich jetzt nicht komplett taeusche – /etc/apache2/conf.d/ lauten.

    gruesse, torben

  3. Ich habe noch eine kleine frage rein aus interesse da ich nicht der super apache kenner bin.

    Wie stelle ich mod-security ab und wie deinstalliere es? (mit apt-get remove libapache2-mod-security ist es doch bestimmt nicht getan 😀 )

    Könnte ja der Fall auftreten das was nicht so läuft wie es sollte und da möchte ich es zumindestens ausschalten können^^

    Ach ja und mir fällt dabei noch eine Frage ein:

    Folgender Inhalt muss in eine Datei (Name beliebig) in /etc/apache2/conf.d/

    Name belibig dort liegt schon eine phpmyadmin.conf woher weiß mod_security welche datei er nehmen soll? (ich habe sie mal mod-security.conf gennant)

    Sorry für die vielen fragen, ich werde mich auf die Antwirt freuen.

  4. Zum ersten Beitrag von dir: Ja war nen Fehler, danke, habe ich ausgebessert

    deinstallieren: Einfach:
    apt-get remove --purge libapache2-mod-security

    Dann noch die ganzen Verzeichnisse von mod-security entfernen und gut is.

    der name der .conf ist total egal, da in apache alle configs in diesem Verzeichnis lädt, egal wie diese heissen.

    Hoffe das hilft dir 🙂
    Gruß
    Uli

  5. … wäre doch zu schön gewesen, aber:

    The following packages have unmet dependencies:
    libapache2-mod-security: Depends: apache2-common but it is not installable
    E: Broken packages
    server:/etc/apt# apt-get install apache2-common -s
    Reading package lists… Done
    Building dependency tree… Done
    Package apache2-common is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source
    However the following packages replace it:
    apache2.2-common apache2-utils
    E: Package apache2-common has no installation candidate
    btf-online:/etc/apt# apt-get install apache2.2-common apache2-utils -s
    Reading package lists… Done
    Building dependency tree… Done
    apache2.2-common is already the newest version.
    apache2-utils is already the newest version.
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

    An dieser Stelle endet leider mein Debian-Wissen, aber ich komm‘ hier gern noch einmal vorbei …

  6. habe mir die Pakete herunter geladen und installiert:
    dpkg -i mod-security2-common_2.1.1-0_all.deb libapache2-mod-security2_2.1.1-0_i386.deb

    Das hat funktioniert und es läuft. Leider ist bei Teil 2 eine ganze Menge anders. Ich konnte praktisch nichts von deiner Konfiguration verwenden; bereits bei „SecFilterEngine On“ musste ich „SecRuleEngine On“ wählen und das zieht sich durch alle Bereich, auch die Filter!

    Oder habe ich komplett etwas verpasst? Ich arbeite mal weiter dran … und teile meine Erfahrungen hier mit, falls ich nicht zwischen durch alles hin werfe 😉

  7. bei mir geht’s irgendwie auch nicht:

    web14250:~# apt-get install libapache2-mod-security2
    Reading Package Lists… Done
    Building Dependency Tree… Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.

    Since you only requested a single operation it is extremely likely that
    the package is simply not installable and a bug report against
    that package should be filed.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
    libapache2-mod-security2: Depends: apache2.2-common but it is not going to be installed
    E: Broken packages
    web14250:~# apt-get install apache2.2-common -s
    ….
    Hat geklappt

    web14250:/etc/apt# apt-get install libapache2-mod-security2
    Reading Package Lists… Done
    Building Dependency Tree… Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.

    Since you only requested a single operation it is extremely likely that
    the package is simply not installable and a bug report against
    that package should be filed.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
    libapache2-mod-security2: Depends: apache2.2-common but it is not going to be installed
    E: Broken packages

  8. Ich hab das gefühl, dass unter Debian nicht mehr alles so geht, wie es damals war 😉

    Ich fahre ja mittlerweile Gentoo, daher kann ich net sagen,was los ist. Mein Debian Sarge mag mod_security noch 😉

  9. Hi,

    ich habe nach der Installation ein Problem einen htaccess Schutz einzurichten. Folgendes habe ich gemacht:

    zu schützendes Verzeichnis: var/www/vhosts/abc.de/httpdocs/privat/

    .htaccessfile:
    AuthUserFile /var/www/vhosts/abc.de/httpdocs/privat/.htpasswd
    AuthGroupFile /dev/null
    AuthName „PRIVAT – Finger weg“
    AuthType Basic

    require valid-user

    .htpasswd
    loginname:vnEyGDe.4ADEF

    Als Fehlermeldung erhalte ich:

    Authentisierung fehlgeschlagen!

    Der Server konnte nicht verifizieren, ob Sie autorisiert sind, auf den URL „/privat“ zuzugreifen. Entweder wurden falsche Referenzen (z.B. ein falsches Passwort) angegeben oder ihr Browser versteht nicht, wie die geforderten Referenzen zu übermitteln sind.

    Sofern Sie für den Zugriff berechtigt sind, überprüfen Sie bitte die eingegebene User-ID und das Passwort und versuchen Sie es erneut.

    Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.

    Error 401
    http://www.abc.de
    Wed Mar 26 11:06:33 2008
    Server secured with the Help of Uli’s Blog – http://blog.w-bros.de

    Woran kann das liegen? Der Nutzername und das Passwort (Buchstaben, Sonderzeichen, Zahlen) stimmen definitiv.

    Danke!

    Grüße
    Martin

  10. Hoi,
    sehe doch bitte in den Logs von Apache nach, was der Fehler ist. Normalerweise stehen dort weitere Infos. Sollte es ein Fehler von mod_security sein, so sollte dies in den Logs von Apache oder mod_security zu finden sein.

  11. Hallo,

    ich habe alles installiert, aber ich habe keinen Plan wo ich nun neue Regeln hinzufügen kann.

    in welcher Datei muss ich dieses Eintragen. Auf dem Debain Etch habe ich ein Verzeichnis /etc/apache2/modsecurity

    CHANGELOG
    LICENSE
    mod-security.conf
    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
    modsecurity_crs_50_outbound.conf
    optional_rules
    README

    ich versuche schon fast den ganzen tag das awstats zum laufen zu bringen, könnte mir da jemand zur Seite stehen.

    Danke

    LG Jochen

  12. Hallo Jochen,
    soweit ich mich erinnern kann, wird doch in einem Logfile auch ausgegeben, welche Regel gerade problematisch war.

    Neue Regeln kannst du einfach in einer neuen Datei anlegen. z.B. modsecurity_crs_60_myrules.conf Diese sollte automatisch geladen werden. Wenn nicht, dann musst du mal in deiner mod-security.conf nachlesen und evtl diese config hinzufügen.

    Beste Grüße
    Uli

  13. Was muss man mit der erstellten Datei unter /etc/apache2/conf.d/ eigentlich machen? Oder wo wird sie eingebunden, damit der Apache die kennt?

  14. Wenn ich mich an deine Anleitung halte bekomm ich leider immer diese Fehlermedlung beim restarten des Apache Webservers.

    „Starting web server: apache2apache2: Syntax error on line 278 of /etc/apache2/apache2.conf: Syntax error on line 40 of /etc/apache2/conf.d/modsecurity: Syntax error on line 204 of /etc/apache2/mod-security/apache2-rules.conf: /etc/apache2/mod-security/apache2-rules.conf:204: <\xc7k{\x96\xc7\xd2H\xbf’\xfd\xb6\xf4\x0f\xa5\x7f> was not closed.
    failed!“

    Biite um hilfe

  15. Hat mir leider nichts weitergebracht, leider ist mein Englisch auch sehr eingerostet. Ich werde mal weiter suchen.

    Trotzdem danke 🙂

Kommentare sind geschlossen.