mod_evasive | HTTP/1.1 400 Bad Request statt 403

Mutti

Member
Hallo,

ich habe mich nochmal mit mod_evasive beschäftigt, was ich mir vor kurzem installiert habe.

Das Testscript
Code:
# sudo perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl



#!/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);
}
soll einen 403 HTTP-Statuscode ausgeben.

Ausgegeben wird aber

HTTP/1.1 400 Bad Request

Danke voraus.
 

marce

Active Member
Ich vermute, spannender als das Testscript wären Logeintrage und die Konfiguration des Moduls.
 

GwenDragon

Registered User
@Mutti
Bei deinem GET-Request fehlt das HTTP-Feld Host.
Kein Wunder, dass der Server da den Bad Request Error 400 wirft.
 

Mutti

Member
Und wenn die Signatur des TE stimmen würde ("Ich kenne Google!"), dann wäre der TE bei einer entsprechenden Suche u.a. hierauf gestoßen:
https://i-mscp.net/thread/18343-mod-evasive-läuft-nicht-wie-es-soll/?postID=57567#post57567 :rolleyes:
Hallo, vielen Dank wieder.

Das hatte ich bereitsgefunden. Führt aber zu der Meldung
Code:
"Unrecognized character \xE2; marked by <-- HERE after t $SOCKET <-- HERE near column 17 at /usr/share/doc/libapache2-mod-evasive/examples/test.pl line 14.
"
Beste Grüße
 

GwenDragon

Registered User
Da hast du den Perl-Code verkaputticht ;)

Wenn du jetzt noch sagst wie Zeile 16-18 aussieht, würde ich ja sogar helfen.
 

Mutti

Member
Da hast du den Perl-Code verkaputticht ;)

Wenn du jetzt noch sagst wie Zeile 16-18 aussieht, würde ich ja sogar helfen.
Danke voraus.

Nachstehend der komplette Code.

Code:
#!/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";
  print $SOCKET “GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1/8\r\n\r\n”;
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}
 

GwenDragon

Registered User
Code:
print $SOCKET “GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1/8\r\n\r\n”;
Was sollen “ ” für seltsame Zeichen sein? Du musst schon Anführungszeichen "" verwenden.
Und ein Host kann hinten auch kein /8 haben. Host ist eine eindeutige Adresse, keine Netzmaske.
Woher hast du das es so sein muss? Copy&Paste kann schon mal schief egehen wie du siehst.

Wie wär es so:
Code:
print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n"
 
Last edited by a moderator:

Mutti

Member
Code:
Copy&Paste kann schon mal schief egehen wie du siehst.
[/QUOTE]

Stelle ich auch gerade fest.. Danke für die Erleuchtung.. :)
[quote="GwenDragon, post: 388410"][CODE]
Wie wär es so:
[CODE]print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n"
Vielen Dank. :)


Scheint schon fast zu funktionieren... fehlt aber noch ein Semikolon..?
Hab gerade nur keinen Plan wo..?
Code:
 (Missing semicolon on previous line?)
syntax error at /usr/share/doc/libapache2-mod-evasive/examples/test.pl line 16, near "$response "
Zeile 15 -19 sehen so aus...

Code:
  print $SOCKET "GET /?$_ HTTP/1.0\nHost: 127.0.0.1\n\n"
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}
 

Mutti

Member
Dürfte doch relativ eindeutig sein?
Hinter der "print"-Teile fehlt ein Semikolon.
KLar, hab mich durch die Zeile irritieren lassen.. :)
Code:
  print $SOCKET "GET /?$_ HTTP/1.0\nHost: 127.0.0.1\n\n";
Leider immer noch HTTP/1.1 400 Bad Request :confused:
 

Mutti

Member
Guck dir mal deine Codezeile an und dann die von GwenDragon vorgeschlagene
Fällt dir da ein Unterschied auf?:confused:
Heute ist wohl nicht mein Tag...:eek:

Der Code von GwenDragon funktioniert einwandfrei.. :)

Vielen Dank an euch alle..

Code:
print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";
 

GwenDragon

Registered User
Das ; hab ich doch glatt beim Posten vergessen. :rolleyes:
//edit: Kommt davon wenn man BBCode-Tags eben mal schnell hinwirft.
Aber Perl hat es ja auch bei dir den Fehler ngemeckert.

@Mutti Ich versteh nur nicht wieso du so ein Perlprogramm ändern willst ohne die geringste Ahnung von Perl-Programmierung zu haben.
 
Last edited by a moderator:

nexus

Active Member
@Mutti Ich versteh nur nicht wieso du so ein Perlprogramm ändern willst ohne die geringste Ahnung von Perl-Programmierung zu haben.
Der klassische Copy/Paste Fail...:rolleyes:
Man fängt an, sich mit dem Thema Server zu beschäftigen und stellt ziemlich schnell fest, daß es im Internet haufenweise Anleitungen zu allem Möglichem gibt.
Also geht man den Weg des geringsten Widerstandes und sagt sich: "Warum soll ich mich mit Grundlagenwissen beschäftigen, das kostet nur unnötig Zeit. Wenn so viele Leute irgendwelche Anleitungen ins Netz stellen, dann brauche ich die nur abarbeiten und dann wird schon alles funktionieren"
Daß diese Leute dann aber bei jedem noch so kleinen Problemchen in irgendwelchen Foren aufschlagen und Hilfe suchen und dafür unterm Strich mehr Zeit verplempern als wenn sie sich am Anfang mal hingesetzt hätten und entsprechende Literatur durchgearbeitet und wenigstens die wichtigsten Basics gelernt hätten, das erkennen die meisten garnicht oder erst ziemlich spät...
 

GwenDragon

Registered User
Nutzer dürfen ja ruhig fragen, wenn was hakt, dafür ist das Forum ja da.
//edit: Was so manche machen: Nutzer beschimpfen, herabsetzen sollte aber nicht vorkommen. Wer nicht antworten will, sollte es lassen, ansonsten bei Neulingen eben Geduld haben, auf Gefahren und Probleme hinweisen, wenn jemand einen Server betreibt.

Eben mal Server betreiben ist so nicht. Wer kein Geld in externe Admins investieren will/kann muss eben: lernen, lernen, lernen…

Ich kann nur sagen, ich hatte beim Einstig in Servernutzung viel Interesse und Neugier mich mehr mit der Materie und auch Skripten zu beschäftigen.
Sowas lernt eine nur durch vorheriges Lesen von Unix- und Linux-Büchern, Perl-Docs, Geduld und Lernen auf einem lokalen Server.
Erst dann einen Server betreiben.
 
Last edited by a moderator:

Top