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.
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, 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 - http://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!











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
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
Vielen Dank für diesen Hinweis, du hast natürlich vollkommen recht!
Ist nun ausgebessert!
http://www.debianforum.de/forum/viewtopic.php?p=496429#496429
Danke
“wget http://www.gotroot.com/downloads/ftp/mod_security/apache2/apache2-gotrootrules-latest.tar.gz
tar xfvz gotrootrules-latest.tar.gz”
müsste es nicht heißen:
“tar xfvz apache2-gotrootrules-latest.tar.gz”?
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.
Zum ersten Beitrag von dir: Ja war nen Fehler, danke, habe ich ausgebessert
deinstallieren: Einfach:
apt-get remove --purge libapache2-mod-securityDann 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
Wie kann man testen ob es auch funktioniert ?
Würde mich brennend interessieren.
Gruß Thomas
Verwende einfach mal http://deinedomain.tld/index.php?goto=http://blaanderedomain.tld
z.B.: http://blog.w-bros.de/index.php?goto=http://blaanderedomain.tld
… 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 …
hmmm bei mir liefs recht problemlos durch, dein Fehler kann mit der Umstellung auf den neuen Apache2.2 zusammenhängen.
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
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
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
ich hatte probleme dieses tut mit mod-security 2.1.1 bzw. 2.1.5 unter etch und apache 2.2 zum laufen zu bekommen…
unter http://www.howtoforge.com/apache2_mod_security_debian_etch
ist ein tutorial was bei mir ohne probleme funktioniert hat
Ist zwar schon ein altes Posting aber war sehr hilfreich!
Vielen Dank!
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
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.
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
CHANGELOGLICENSE
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
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.confDiese 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
Vielen Dank … das Tutorial hatte mir sehr weitergeholfen.
Was muss man mit der erstellten Datei unter /etc/apache2/conf.d/ eigentlich machen? Oder wo wird sie eingebunden, damit der Apache die kennt?
Der Apache lädt diese Datei dank einer Direktive in einer seiner Konfigurationsdateien vollautomatisch.
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
ps: es handelt sich um Debian Lenny falls dies eine falls dies eine Rolle spielt.
Hi, ich bin dazu leider gar nimmer auf dem aktuellen Stand, da ich mittlerweile Gentoo fahre. Schaut dir mal die Anleitung von gotroot dazu an, vielleicht hilft dir das weiter?
Moin,
ich werd es mal probieren :–).
Hat mir leider nichts weitergebracht, leider ist mein Englisch auch sehr eingerostet. Ich werde mal weiter suchen.
Trotzdem danke