Wie kann ich einen Benutzeragenten von allen Sites auf meinem Server blockieren?


9

Ich habe dies ursprünglich auf webmasters.stackexchange.com gepostet , aber mir wurde gesagt, dass ich hier einen besseren Empfang bekommen würde.


In den letzten Tagen habe ich an einem (vermutlich unbeabsichtigten) DDOS-Angriff gelitten. Ich habe so viele Anfragen von einem Agenten erhalten, der sich als "Mozilla / 4.0 (kompatibel; ICS)" identifiziert, dass Apache den gesamten verfügbaren Speicher verschlingt.

Infolgedessen möchte ich alle Anfragen blockieren, die von diesem Benutzeragenten begleitet werden. Deshalb habe ich versucht, dies in httpd.conf zu tun:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

Aber wenn ich Apache neu starte, beschwert es sich über die Verwendung denyhier. Gibt es eine Möglichkeit, den Zugriff auf den gesamten Server zu verweigern, ohne ihn in einen locationoder einen directoryBlock einschließen zu müssen, was bedeuten würde, dass ich für jede Site einen neuen Block hinzufügen müsste?


UPDATE: Der Fehler, den ich bekomme

  • Neustart des Webservers apache2
    Syntaxfehler in Zeile 4 von /etc/apache2/httpd.conf: Verweigern hier nicht erlaubt [fehlgeschlagen]

Antworten:


7

Sieht jetzt aus wie eine alte Frage, aber ich wollte das Gleiche tun und fand die Antwort von oben. Es ist nicht ganz richtig wie es ist - scheint mir, dass es sein sollte <Location "/">, und das SetEnvIfbraucht einen regulären Ausdruck, so dass die Klammern zitiert werden müssen.

Dies funktionierte für mich, um die Zugriffskontrolle auf alle vhosts anzuwenden:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

Fügen Sie dies einfach vor den vhost-Definitionen ein.


(Für das Äquivalent in Apache 2.4) Seien Sie vorsichtig, <Location>da es alle anderen Autorisierungsbeschränkungen in <Directory>außer Kraft setzt , es sei denn, Sie fügen hinzu AuthMerging And. Siehe die Sicherheitswarnung Requirein den Apache-Dokumenten: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight

4

mod_rewrite kann auf Serverebene gemäß den folgenden Dokumenten konfiguriert werden:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

Vergessen Sie nicht, dem regulären Ausdruck in der RewriteCond


1
Achtung: Der Bindestrich ist beim Kopieren kein echter Bindestrich. Ich habe versucht zu bearbeiten, aber SF wird sich beschweren, dass meine Bearbeitung zu klein ist. Trotzdem danke, funktioniert ein Vergnügen!
Thibaut Barrère

@ ThibautBarrère Wenn Sie wirklich brauchen, können Sie das kleine Bearbeitungslimit umgehen, indem Sie ein unsichtbares <!-- -->zum Bearbeiten
hinzufügen

1

Vorausgesetzt, die Syntax in den SetEnv-Zeilen ist korrekt, sollten Sie in der Lage sein, dies wie folgt in die conf zu werfen:

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

Sollte es ermöglichen, dass dies auf allen virtuellen Hosts funktioniert - gerade auf 2.2.24 getestet, hat wie ein Zauber funktioniert.


Dies ist insofern besser, als es keine Fehler gibt, aber während ich meinen Benutzeragenten fälsche, werde ich nicht abgelehnt. Irgendeine Idee warum das sein könnte?
Tom Wright
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.