[HowTo] mod_evasive für Apache2

Hallo.

Habe da noch 2 Fragen.

Eine zu mod_evasive:

Beim Kompilieren kommt bei mir folgende Fehlermeldung:

chmod 644 /usr/lib/apache2/modules/mod_evasive20.so
apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
apxs:Error: At least one `LoadModule' directive already has to exist..

Muss das was in die httpd.conf rein, und wenn ja, was?


Dann zu mod_security:

Wo bekommt man dieses Modul her? Kann das nicht vom Server aus direkt installieren, weil das nicht vorhanden ist.


mfg

schweich1
 
Zitat von g0db0x Beitrag anzeigen
kann ich dies auch auf einen 64Bit System installieren ?
Ja.
huschi.

Woher weißt du, das es auch für n 64-Bit works ?

Ich (so scheint es) habe damit Probleme.

--------------------------------
yast -i apache2-devel

cd /usr/local/src/
wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz

tar xfvz mod_evasive_1.10.1.tar.gz
cd mod_evasive/
apxs2 -iac mod_evasive20.c

/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIC -Wall -fno-strict-aliasing -DLDAP_DEPRECATED -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/apache2 -I/usr/include/apr-1 -I/usr/include/apr-1 -c -o mod_evasive20.lo mod_evasive20.c && touch mod_evasive20.slo
mod_evasive20.c: In function 'access_checker':
mod_evasive20.c:212: warning: implicit declaration of function 'getpid'
mod_evasive20.c:212: warning: format '%ld' expects type 'long int', but argument 3 has type 'int'
mod_evasive20.c:229: warning: ignoring return value of 'system', declared with attribute warn_unused_result
mod_evasive20.c: In function 'destroy_hit_list':
mod_evasive20.c:301: warning: control reaches end of non-void function
mod_evasive20.c: In function 'create_hit_list':
mod_evasive20.c:118: warning: control reaches end of non-void function
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_evasive20.la -rpath /usr/lib64/apache2 -module -avoid-version mod_evasive20.lo
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/lib64/apr-1/build/libtool' mod_evasive20.la /usr/lib64/apache2
/usr/lib64/apr-1/build/libtool --mode=install cp mod_evasive20.la /usr/lib64/apache2/
cp .libs/mod_evasive20.so /usr/lib64/apache2/mod_evasive20.so
cp .libs/mod_evasive20.lai /usr/lib64/apache2/mod_evasive20.la
PATH="$PATH:/sbin" ldconfig -n /usr/lib64/apache2
----------------------------------------------------------------------
Libraries have been installed in:
/usr/lib64/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.
----------------------------------------------------------------------
chmod 755 /usr/lib64/apache2/mod_evasive20.so
activating evasive20


Die Module selbst wurden schon vom Install-Prozess hinzugefügt:

#vi /etc/sysconfig/apache2
APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user authn_dbm autoindex cgi dir env expires include log_config mime negotiation setenvif ssl suexec userdir php5 rewrite vhost_alias mod_status evasive20"

#vi /etc/apache2/sysconfig.d/loadmodule.conf
LoadModule evasive20_module /usr/lib64/apache2/mod_evasive20.so

Fehlt also nur noch die config für dieses Modul. Und hier scheint es zu hängen. (aber erstmal von vorn)

#vi /etc/httpd/conf.d/mod_evasive.conf
<IfModule mod_evasive20.so>
#DOSHashTableSize gibt die Größe der Hashtabelle in Bytes an
DOSHashTableSize 3097

#DOSPageCount gibt die Anzahl der Seitenaufrufe eines Clients pro DOSPageInterval-Zeitintervall
DOSPageCount 5

#DOSSiteCount gibt die Anzahl der Seitenaufrufe auf einen Child-Prozess pro DOSSiteInterval-Zeitintervall
DOSSiteCount 50

#DOSPageIntervall und DOSSiteInterval werden in Sekunden angegeben
DOSPageInterval 1
DOSSiteInterval 1

#DOSBlockingPeriod gibt die Sperrzeit in Sekunden an
DOSBlockingPeriod 60

#DOSEmailNotify gibts die eMail Adresse an, an welche eine Warnmail geschickt wird
DOSEmailNotify info@<domain>.de

#DOSSystemCommand führt bei einem Angriff weitere Programme/Scripte aus wenn gewünscht
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"

#DOSWhitelist beinhaltet eine Aufzählung aller IP-Adressen für die mod_evasive NICHT gilt
DOSWhitelist 127.0.0.1
</IfModule>

Damit diese *conf auch inkludiert wird, folgendes noch in die:
#vi /etc/apache2/httpd.conf
Include /etc/apache2/conf.d/*.conf

Apache restart und perl test.pl durchgeführt.
Laut Config + Whitelist SOLLTE ich ohne Probleme durchkommen. Aber leider nur 403.

#grep Blacklisting /var/log/messages
Feb 22 12:04:25 System mod_evasive[14780]: Blacklisting address 127.0.0.1: possible DoS attack.
SCHEINT also soweit zu funktonieren. Auch wenn ich über n Browser eine Seite öfters ausführe, scheint mod_evasive meine Dyn. IP zu erkennen und trägt diese in die message ein.

Ein
#dir /tmp
-rw-r--r-- 1 wwwrun www 6 22. Feb 12:04 dos-127.0.0.1
-rw-r--r-- 1 wwwrun www 6 22. Feb 12:12 dos-84.175.18.108
zeigt, das anscheind alles o.k. ist.

ABER: Ich habe im Browser niemals ein 403 bekommen. Ebendfalls ist nie eine Mail gekommen. Auch wenn die das ganze umstelle (laut Huschi's Howto) erhalte ich nichts.

Meine Verdacht lagerte sich erst auf die mod_evasive.conf. Denn anscheind wird diese nicht inkludiert. Packe ich dort aber
LoadModule evasive20_module /usr/lib64/apache2/mod_evasive20.so
in den Kopf rein, sagt mir der Apache, das dieses Modul schon geladen worden ist. Was ja dafür spricht, das diese Datei selbst schon mal gegriffen wird.

Ergo bleibt nur noch der Verdacht, das die Zeile:
<IfModule mod_evasive20.so>
nicht das Modul anspricht. Aber so wird es doch geladen bzw. so heißt es doch.
Ändere ich es auf <IfModule mod_evasive20.c> scheint es gleich garnicht zu gehen. Selbst 127.0.0.1 wird nicht in /tmp eingetragen und die messages sagt auch nichts

:confused:
 
SCHEINT also soweit zu funktonieren. Auch wenn ich über n Browser eine Seite öfters ausführe, scheint mod_evasive meine Dyn. IP zu erkennen und trägt diese in die message ein.

ABER: Ich habe im Browser niemals ein 403 bekommen. Ebendfalls ist nie eine Mail gekommen. Auch wenn die das ganze umstelle (laut Huschi's Howto) erhalte ich nichts.

Ich habe vor einiger Zeit unter Debian (32 Bit) mod_evasive installiert und die Erfahrung gemacht, dass das Teil nicht so arbeitet wie man es erwartet:

• die Mailbenachrichtigung fkt. bei mir ebenfalls nicht
• manchmal "springt" evasive an, manchmal nicht

Scheint wohl ein generelles Problem zu sein?!
 
Wenn Du mein Wort anzweifelst, dann lass es halt.
...
huschi.

:D eieiei.... na SO hatte ich das nicht gemeint.
Hätte je sein können, das du ggf. selbst auf ein 64 Bit einsetzt oder aber der Author irgendwo vermerkt hat, das es auch 64-Bit tauglich ist. (README steht nix)

Nun gut.

Fehlermeldung kommt garkeine. Es läuft ja soweit auch.
#grep Blacklisting /var/log/messages
Feb 22 11:25:18 System mod_evasive[10392]: Blacklisting address 127.0.0.1: possible DoS attack.
(erzeugt durch perl test.pl)

Ebendso klappt es bei meiner dyn. IP von @home. Auch diese wird erfolgreich geloggt und in /tmp eine entsprechende Datei erzeugen.

Nur was nicht geht: Ich erhalte kein 403.
"Angeblich" soll meine IP ja nun geblockt sein. Dennoch kann ich fröhlich weitersurfen. (Auf der HP)

Desweiteren erhalte ich keine Email. Weder im Orginal Zustand noch nach Änderung gemäß deines Howto's.

(Wobei ich aber auf die Email auch verzichten kann)
 
Anleitung für Debian

Hallo zusammen, da ich in diesem Thread viele offenen Fragen bezüglich mod-evasive lese, dachte ich mir ich poste mal den Link zu meinem Howto:

Howto mod-evasive 2.0 und mod-security 2.5.7

Hoffe dies klärt ein wenig die offenen Fragen. Sollten dennoch offene Fragen da sein, schreibt einfach einen Kommentar beim Beitrag - diese sehe ich schneller und kann euch dann auch individuell helfen.

grüsse aus Basel

griesgram
 
@griesgram
Warum antwortest Du dann nicht auf die offenen Fragen?
Denn ich sehe auch in Deinem Blog keine Antworten zu diesen Fragen. (Geschweige denn die Fragen selbst.)

Also warum wurde dieser Thread nach 3 Wochen nochmal aus der Versenkung geholt?
Nur um Dein Blog zu verlinken, oder?

huschi.
 
MOD: Full-Quote entfernt!
Halli Hallo!

Mich würde das mit der Emailbenachrichtigung ebenfalls interessieren.
Ich habe mod_evasive erfolgreich installiert, es arbeitet auch so wie es soll. Leider funktioniert das mit der Email nicht, die mir zugestellt werden soll.

Ich arbeite mit QMail unter ubuntu, muss hier der Pfad angepasst werden?

Vielen Dank und viele Grüße!

beedy
 
Last edited by a moderator:
Hallo beedy und willkommen an Board!

Schau mal unter huschi.net beim Punkt "Installation mod_evasive" nach. Da steht was zur Mail-Einstellung.

huschi.
 
Hallo huschi!

Herzlichen Dank für die Antwort!

Ich hatte ganz den zweiten Teil vergessen zu editieren und hatte nur die Änderungen unter "define Mailer" geändert. Habe das jetzt nachgeholt, jedoch mit dem selben Ergebnis, dass keine Mail ankommt.

Nach einem Test mit dem Perl-Script sind im Error Log die Einträge vorhanden:
[Thu May 07 07:52:46 2009] [error] [client 127.0.0.1] client denied by server configuration: /var/www/


Unter /usr/bin/ ist sowohl der Eintrag mail als auch mailx vorhanden.

Viele Grüße!

beedy
 
bei mir hat die Installation auf anhieb geklappt. nach anleitung von Huschi.

Die Mail Benachrichtigung geht bei mir jedoch auch nicht. Debian Lemmy mit apache 2.2.11 selfe made :)

Dazu muss ich sagen, dass der Server noch nicht live ist. Aber in den syslog's müsste ich doch sehen, wenn der mail-befehl eine Mail versendet.

hat sich in debian lemmy etwas geändert ??

liebe Grüße, Brian
 
habe das ganze gestern auf einem meiner Server mit Debian 4 installiert. da läuft die Mail Benachrichtigung ohne Probleme. :/
 
Der Thread ist zwar etwas älter, aber ich denke ich habe die Lösung für die Probleme mit der Email:

Da ich meine Anleitung gerade selber mal wieder durch arbeite, fällt mir ein kleiner Fehler auf:
Für die Email wird vorgeschlagen mod_evasive.c zu bearbeiten.
Diese gilt aber nur für Apache 1.3.x!
Wer Apache 2 hat, muss die Änderungen natürlich in mod_evasive20.c machen.

huschi.
 
Kommt es mir eigentlich nur so vor oder arbeitet das Modul nicht richtig ?
Kompiliert wurde alles ohne probleme und es konnte auch problemlos in Betrieb genommen werden..

Wenn ich mir jetzt aber die Resultate diverser Tests ansehe, ist es nicht ganz das, was ich erwartet habe.

Wenn ich das Modul auf 50 Seitenaufrufe eingestellt habe, werden bei 100 Anfragen, ab ca. 50 Aufrufe auch geblockt, veränder ich die Anzahl der simulierten Anfragen von 100 auf zb. 200 oder mehr taucht zwischendurch auch immer wieder ein Block unterschidlicher grösse mit 200er Statusmeldungen auf.

Egal womit ich teste. (mitgeliefertes testscript, eigenes testsctip, siege und ab)

Kann das jemand nachvollziehen ?
 
Last edited by a moderator:
Welche konkreten Einstellungen hast Du denn getätigt?
Und rufst Du im Testscript immer exakt die selbe URL auf?

huschi.
 
Meine verwendeten Einstellungen :

<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 10
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
</IfModule>

Ich rufe auch immer das selbe Ziel auf. Eine index.htm oder index.php, auch mit Bildern habe ich es getestet, immer wieder das gleiche Resultat.

Ein paarmal 200, dann 403 Meldungen mit kleinen Blöcken 200 Meldungen.
 
Output Apache-Logs:

ClientIP - - [23/Feb/2010:11:49:20 +0100] "GET /index.html HTTP/1.1" 403 212 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 376
ClientIP - - [23/Feb/2010:11:49:20 +0100] "GET /index.html HTTP/1.1" 403 212 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 376
ClientIP - - [23/Feb/2010:11:49:20 +0100] "GET /index.html HTTP/1.1" 403 212 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 376
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 200 89 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 326
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 200 89 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 326
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 200 89 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 326
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 200 89 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 326
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 200 89 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 326
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 200 89 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 326
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 403 212 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 376
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 403 212 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 376
ClientIP - - [23/Feb/2010:11:49:21 +0100] "GET /index.html HTTP/1.1" 403 212 "-" "JoeDog/1.00 [en] (X11; I; Siege 2.66)" 164 376

Das ist ein beschriebener 200er Block. Die Blacklist scheint aktiv zusein, da ein 403 zurück gegeben wird.

Dieser Test wurde mit siege durchgeführt

# siege -c10 -t1M <URL/index.html>

HTTP/1.1 403 0.00 secs: 212 bytes ==> /index.html
HTTP/1.1 403 0.00 secs: 212 bytes ==> /index.html
HTTP/1.1 403 0.00 secs: 212 bytes ==> /index.html
HTTP/1.1 200 0.98 secs: 89 bytes ==> /index.html
HTTP/1.1 200 0.98 secs: 89 bytes ==> /index.html
HTTP/1.1 200 0.97 secs: 89 bytes ==> /index.html
HTTP/1.1 200 0.97 secs: 89 bytes ==> /index.html
HTTP/1.1 200 0.94 secs: 89 bytes ==> /index.html
HTTP/1.1 200 0.93 secs: 89 bytes ==> /index.html
HTTP/1.1 403 0.00 secs: 212 bytes ==> /index.html
HTTP/1.1 403 0.00 secs: 212 bytes ==> /index.html
HTTP/1.1 403 0.00 secs: 212 bytes ==> /index.html

Lifting the server siege... done.
Transactions: 1166 hits
Availability: 100.00 %
Elapsed time: 60.02 secs
Data transferred: 0.23 MB
Response time: 0.04 secs
Transaction rate: 19.43 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 0.84
Successful transactions: 66
Failed transactions: 0
Longest transaction: 1.00
Shortest transaction: 0.00

Das sind beides gekürzte Auszüge.
 
Problem bei Installation

Hallo,

habe auch versucht mod_evasive zu installieren.

Habe einen Starto V-Server mit Suse 11.1 und Plest 9.5.2

nötige Pakete für apxs2 nachinstalliert

danach:
Code:
h11*****:/usr/local/src/mod_evasive # whereis apxs2
apxs2: /usr/sbin/apxs2 /usr/share/man/man8/apxs2.8.gz

das ist doch so in Ordnung oder ?

Nach entpacken und anpassen der mod_evasive20.c dann:

/usr/sbin/apxs2 -cia mod_evasive20.c gemacht, jedoch siehe:

Code:
h11*****:/usr/local/src # /usr/sbin/apxs2 -cia mod_evasive20.c
/usr/lib/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -march=i586 -mtune=i686 -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIC -Wall -fno-strict-aliasing -DLDAP_DEPRECATED  -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -pthread -I/usr/include/apache2  -I/usr/include/apr-1   -I/usr/include/apr-1   -c -o mod_evasive20.lo mod_evasive20.c && touch mod_evasive20.slo
env: gcc: No such file or directory
apxs:Error: Command failed with rc=65536

Was kann das sein, habe bisher keine Lösung finden können ;-(
Oder wo liegt vielleicht ja auch mein Fehler ?!


Wäre über Hilfe sehr Dankbar.

*****************************

da bei : rcapache2 start

Code:
h11*****:/usr/local/src # rcapache2 start
Starting httpd2 (prefork)

kommt, hab ich auch diese Variante versucht /usr/sbin/apxs2-prefork -cia mod_evasive20.c ...gleicher Fehler.


Da ich aber keine httpd2-prefork.conf habe sondern nur eine httpd.conf und ein ps aux dieses zeigt:

Code:
/usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL

müsste /usr/sbin/apxs2 -cia mod_evasive20.c richtig sein oder ??

lG. und besten Dank im voraus ... bacci
 
Last edited by a moderator:
Back
Top