Forum Linux.général Règles mod_evasive bypassées par mod_rewrite ! à l'aide!

Posté par  .
Étiquettes : aucune
0
2
mar.
2011

Salut à tous !

J'ai mis en place une conf contre les DOS via mod_evaisve... la conf est toute simple:

cat mod-evasive.load LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 3 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSLogDir "/var/log/apache2/mod_evasive" DOSEmailNotify blabla@me.com DOSBlockingPeriod 30 DOSWhitelist 127.0.0.1 <IfModule mod_evasive20.c>

J'ai également une rules pour mon vhost http principal qui force l'utilisation du HTTPS: cat http2https <VirtualHost :80> ServerAdmin webmaster@localhost LogLevel warn ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.) https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost>

Je suis donc censé être protégé contre les DOS... Le souci c'est que quand j'utilise le script donné avec mod_evasive:

!/usr/bin/perl

test.pl: small script to test mod_dosevasive's effectiveness

use IO::Socket; use strict;

for(0..100) { my($response); my($SOCKET) = new IO::Socket::INET( Proto => "tcp",

                                  PeerAddr=> "10.10.0.130:80");

if (! defined $SOCKET) { die $!; } print $SOCKET "GET /?$_ HTTP/1.0\n\n"; $response = <$SOCKET>; print $response; close($SOCKET); }

j'ai le résultat suivant: perl attack.pl

HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found HTTP/1.1 302 Found etc etc etc...

En fait on dirait que mod_rewrite est prioritaire sur mod_evasive je veux dire par la que c'est d'abord la règle de rewrite qui est prioritaire avant le module d'analyse du nombre de connexion... en gros il bloque rien...

Par contre si je suis deja en HTTPS (via mon navigateur) et que j'appuie comme un demeuré sur la touche F5 je me fais bien insulté en allemand...

Si l'un de vous a une idée je suis preneur!!!

merci!!!

  • # heritage, surcharge des parametres, ordre des choses

    Posté par  . Évalué à 2.

    parce que le reglage du vhost est là pour surcharger les reglages du serveur.

    plutot que de mettre le rewrite dans le vhost, essaie de le mettre en .htaccess avec un peu de chance il sera pris en compte APRES la config du serveur, et donc APRES le mod_evasive

  • # je vais tester

    Posté par  . Évalué à 0.

    Salut!

    Premièrement merci pour ce retour!

    Je vois que tu es très actif sur les réponses du forum avec souvent des idées pertinentes.

    Je vais essayer cette solution et voir ce que ça donne

    Merci

  • # marche pas :-(

    Posté par  . Évalué à 0.

    Bonjour,

    Je viens de tester ça ne fonctionne pas :(

    J'ai bien mis les rules Rewrite dans le htaccess je suis bien redirigé... Mais l'attaque en perl fonctionne toujours !!!

    Une idée ?

  • # mod_rewrite, ce module qui vous veut du bien...

    Posté par  (site web personnel) . Évalué à 1.

    En fait on dirait que mod_rewrite est prioritaire sur mod_evasive je veux dire par la que c'est d'abord la règle de rewrite qui est prioritaire avant le module d'analyse du nombre de connexion... en gros il bloque rien...

    C'est quasi sûr, mod_rewrite est super proche du core. J'ai eu l'année dernière un problème avec un module de RSA : mod_rewrite et mod_rsawa_apache utilisent le même hook.

    Pour mod_rewrite :

    ap_hook_translate_name(hook_uri2file, NULL, NULL, APR_HOOK_FIRST);
    

    Ce bon sang de bon soir d'APR_HOOK_FIRST, fait que mod_rewrite passe en premier sûr ce hook. Dans notre cas, j'ai prouvé à RSA de faire un update de son module pour qu'il passe avant mod_rewrite.

    Dans ton cas, dans le fichier mod_evasive20.c, tu devrais avoir plutôt un truc du genre :

    static void register_hooks(apr_pool_t *p) {
      static const char * const aszPost[]={ "mod_rewrite.c", NULL };
      ap_hook_access_checker(access_checker, NULL, aszPost, APR_HOOK_FIRST);
      apr_pool_cleanup_register(p, NULL, apr_pool_cleanup_null, destroy_hit_list);
    };
    
    1. La première ligne est pour "déclarée" le module reloutisant.
    2. Dans la deuxième, on indique que mod_rewrite doit tourner après notre module.

    N.B. : Il y a toujours la possibilité d'utiliser HOOK_REALLY_FIRST, mais c'est à déconseiller...

    N.B.B(is). : Sachant que mod_evasive est sur access_checker et rewrite sur translate_name, j'avoue ne pas savoir la précédence relative de l'un par rapport à l'autre... En gros, tu testes et tu dous dis :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.