IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Apache2.4 mod_evasive HTTP/1.1 400 Bad Request


Sujet :

Apache

  1. #1
    Invité
    Invité(e)
    Par défaut Apache2.4 mod_evasive HTTP/1.1 400 Bad Request
    Apache2.4 mod_evasive HTTP/1.1 400 Bad Request
    Tester mod_evasive sur Apache 2.4

    J'ai fais une synthèse de l'utilisation de mod_evasive qui semble complète :
    https://www.visionduweb.eu/wiki/inde...an#Mod_Evasive

    Pourtant, cela ne semble pas fonctionner avec ma configuration.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <IfModule mod_evasive20.c>
     DOSHashTableSize 3097
     
     # Pas plus de 2 pages par seconde.
     DOSPageCount 2
     DOSPageInterval 1
     
     # Pas plus de 150 requetes par seconde (Images, CSS, ...)
     DOSSiteCount 150
     DOSSiteInterval 1
     
     # Période en seconde durant laquelle on bloque le client.
     DOSBlockingPeriod 600
     
     # Ajouter une ou plusieurs adresse IP en liste blanche.
     # L'adresse IP locale peut être mise en liste blanche.
     DOSWhitelist 127.0.0.1
     # Les 3 adresses IP sont celles du Bot de Google.
     DOSWhitelist 66.249.65.*
     DOSWhitelist 66.249.66.*
     DOSWhitelist 66.249.71.*
     
     # Notifier l'alerte avec un mail.
     DOSEmailNotify admin@example.org
     
     # Chemin vers le dossier de log de Apache2, mod_evasive.
     # Le fichier contiendra les adresses IP blacklistées.
     DOSLogDir "/var/log/apache2/mod_evasive/"
     
     # Lancer une commande avec DOSSystemCommand.
     # Lancer par exemple un script Iptables :
     # DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP"
     # Écrire les logs :
     # DOSSystemCommand "/bin/echo %s >> /var/log/mod_evasive/dos_evasive.log && /bin/date >> /var/log/mod_evasive/dos_evasive.log"
    </IfModule>
    Tester si le module mod_evasive fonctionne ou non :
    Utiliser le script perl "test.pl" situé dans le répertoire /usr/share/doc/libapache2-mod-evasive/examples/.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/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=> "127.0.0.1:80");
     if (! defined $SOCKET) { die $!; }
      print $SOCKET "GET /?$_ HTTP/1.0\n\n";
     $response = <$SOCKET>;
     print $response;
     close($SOCKET);
    }
    Puis, lancer le script depuis le terminal.
    sudo perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl

    Le script effectue 100 demandes sur votre serveur Web.
    Le code de réponse 403 indique que l'accès est refusé par le serveur Web.

    HORS ! Lors de mes essais, j'ai la réponse suivante :
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    Source : https://www.visionduweb.eu/wiki/inde...er_mod_evasive

    ( Je suis sur Debian SID. )

    /var/log/apache2$ cat other_vhosts_access.log m'affiche bien les 100 requêtes, mais, en erreur 400 également.
    vpsxxx.vps.ovh.ca:80 127.0.0.1 - - [07/Nov/2018:04:23:50 +0100] "GET /?96 HTTP/1.0\n" 400 0 "-" "-"
    vpsxxx.vps.ovh.ca:80 127.0.0.1 - - [07/Nov/2018:04:23:50 +0100] "GET /?97 HTTP/1.0\n" 400 0 "-" "-"
    vpsxxx.vps.ovh.ca:80 127.0.0.1 - - [07/Nov/2018:04:23:50 +0100] "GET /?98 HTTP/1.0\n" 400 0 "-" "-"
    vpsxxx.vps.ovh.ca:80 127.0.0.1 - - [07/Nov/2018:04:23:50 +0100] "GET /?99 HTTP/1.0\n" 400 0 "-" "-"
    vpsxxx.vps.ovh.ca:80 127.0.0.1 - - [07/Nov/2018:04:23:50 +0100] "GET /?100 HTTP/1.0\n" 400 0 "-" "-"
    Ce serrait du à mes différents VirtualHosts ?
    Source : https://www.visionduweb.eu/wiki/inde...port_HTTP_80_2

    Configuration de l'écoute du port HTTP 80

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # VirtualHost du domaine green-nrj.com
    <VirtualHost *:80>
    ServerName www.green-nrj.com
    ServerAlias green-nrj.com
    DocumentRoot /var/www/html
     
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
     
    # Redirection http://(www).domaine.ext vers https://
    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{HTTPS} !on
       RewriteRule ^(.*)$ https://www.green-nrj.com$1 [QSA,L,R=301]
    </IfModule>
    </VirtualHost>
    Dernière modification par NoSmoking ; 10/11/2018 à 09h48. Motif: Balise [QUOTE] pour message d'erreur.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Après un test sur une Debian Stretch par défaut, je rencontre la même erreur.
    perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    Dernière modification par NoSmoking ; 10/11/2018 à 09h47.

  3. #3
    Membre habitué Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 187
    Points
    187
    Par défaut
    Salut Zeroocool,

    Il y a quelque chose qui est bizarre dans ton test. Tu envoies une requête http avec le protocol HTTP 1.0, et tu reçois une réponse en HTTP 1.1.
    Ton problème vient peut-être de la. Je m'explique. Si tu as plusieurs VirtualHost, alors tu as besoin d'utiliser un paramètre "Host" dans tes requêtes http. Or ce paramètre n'existe pas avec le protocole HTTP 1.0. Par défaut, le serveur apache va essayer de servir le premier virtualhost. Si il n'y arrive pas il renvoie une erreur 400.
    source= https://stackoverflow.com/questions/...ocol-in-apache

    Tu peux modifier le script Perl pour qu'il envoie des requêtes HTTP 1.1 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print $SOCKET “GET /?$_ HTTP/1.0\n\n”;
    To:
    print $SOCKET “GET /?$_ HTTP/1.1\n\nHost: 127.0.0.1\n\n”;
    ps: il y a plusieurs posts web qui évoquent une possible erreur de "codage" \n\n -> \r\n. Mais je ne suis pas sur. Je pense que ça dépend plus de ta plate-forme OS (Linux <-> Windows) que de Apache.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print $SOCKET “GET /?$_ HTTP/1.0\n\n”;
    To:
    print $SOCKET “GET /?$_ HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n”;


    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
    - Ne vous privez pas pour voter pour ma réponse si elle vous plaît bien
    - Ne pas hésiter à cliquer sur "Résolu" quand votre problème posé a trouvé une solution. Et un petit merci fait toujours plaisir

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merci de ton retour.
    Il me semble que j'avais testé, mais, je vais voir à tester à nouveau.

    Je prend note de cette piste :
    Forcer le protocole HTTP 1.1 pour Apache2 : https://stackoverflow.com/questions/...ocol-in-apache

    Entre temps, j'ai tout de même pu avancer, je pense que malgré tout, la mod_evasive est fonctionnelle.
    Malgré tout, si j'arrive à avoir un retour en code 200 et 403, je crois que ce serrait mieux.
    Je reste dans l'inconnu avec le retour erreur que j'obtiens actuellement.

    # Après avoir modifié le script test.pl de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/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=> "139.99.173.195:80");
     if (! defined $SOCKET) { die $!; }
     #  print $SOCKET "GET /?$_ HTTP/1.0\n\n";
     print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 139.99.173.195:80\r\n\r\n";
     $response = <$SOCKET>;
     print $response;
     close($SOCKET);
    }
    # Quand je met 127.0.0.1 dans la liste blanche depuis le fichier de configuration, j'obtiens l'erreur 400.
    HTTP/1.1 400 Bad Request
    HTTP/1.1 400 Bad Request
    ...
    # Quand je ne met pas 127.0.0.1 dans la liste blanche depuis le fichier de configuration, j'obtiens l'erreur 503 puis l'erreur 403 attendue.
    # Je ne comprend pas pourquoi le code 503 est retourné sur mon test en production, mais, le passage au code 403 semble signifier que mod_evasive fonctionne.
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    ...
    HTTP/1.1 403 Forbidden
    HTTP/1.1 403 Forbidden
    ...
    Synthèse de cette recherche sur mod_evasive : https://www.visionduweb.eu/wiki/inde...le=Mod_evasive
    Partagée sur le wiki officiel de Debian : https://wiki.debian.org/fr/Apache/mod_evasive
    Dernière modification par NoSmoking ; 11/11/2018 à 08h02. Motif: Balise [QUOTE] pour message d'erreur.

  5. #5
    Membre habitué Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 187
    Points
    187
    Par défaut
    Hello,

    As tu essayé de mettre
    HTTP/1.1
    au lieu de HTTP/1.0 ?

    dans le script perl : test.pl ?


    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
    - Ne vous privez pas pour voter pour ma réponse si elle vous plaît bien
    - Ne pas hésiter à cliquer sur "Résolu" quand votre problème posé a trouvé une solution. Et un petit merci fait toujours plaisir

Discussions similaires

  1. HTTP/1.1 400 Bad Request curl
    Par new70 dans le forum Unix
    Réponses: 0
    Dernier message: 24/03/2015, 15h58
  2. [WD12] HTTPRequete() et HTTP/1.0 400 Bad request
    Par zouzoukha dans le forum WinDev
    Réponses: 3
    Dernier message: 18/05/2012, 16h39
  3. WebService HTTP 400 Bad Request
    Par mrkinfo dans le forum Services Web
    Réponses: 3
    Dernier message: 09/12/2009, 16h41
  4. IIS et HTTP 400 Bad Request
    Par cgone dans le forum IIS
    Réponses: 0
    Dernier message: 29/09/2009, 18h54
  5. C++ Requete GET Http Erreur 400 Bad Request
    Par gy0m76 dans le forum C++
    Réponses: 2
    Dernier message: 02/07/2008, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo