Blockieren des Apache-Zugriffs über die Benutzeragentenzeichenfolge

8

Ich habe einen Scripter, der einen Proxy verwendet, um eine Website anzugreifen, die ich bediene.

Ich habe festgestellt, dass sie dazu neigen, über Software mit einer bestimmten allgemeinen Benutzeragentenzeichenfolge auf die Site zuzugreifen (z. B. http://www.itsecteam.com/de/projects/project1_page2.htm "Havij Advanced SQL Injection Software" mit einer Zeichenfolge user_agent von Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Havij). Ich bin mir bewusst, dass jede Cracking-Software, die es wert ist, gesalzen zu werden, wahrscheinlich in der Lage sein wird, die Zeichenfolge des Benutzeragenten zu ändern, aber ich bin damit einverstanden, dass der Scripter sich irgendwann mit dieser Funktion befassen muss.

Gibt es also eine Software, mit der der Zugriff automatisch blockiert und dauerhaft auf die schwarze Liste gesetzt werden kann, indem die Zeichenfolgen der Benutzeragenten abgeglichen werden?

Kzqai
quelle

Antworten:

18

Sie können den Zugriff durch BrowserMatch verweigern und über SetEnvIf verweigern. Beispiel:

SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot
<Directory "/var/www">
        Order Allow,Deny
        Allow from all
        Deny from env=bad_bot
</Directory>

Um sie dauerhaft zu blockieren, müssen Sie eine benutzerdefinierte Protokolldatei schreiben und beispielsweise fail2ban verwenden, um sie mit iptables zu sperren

Erstellen Sie beispielsweise LogFormat

LogFormat "%a %{User-agent}i" ipagent

Fügen Sie Ihrem vhost / serverweit die Protokollierung hinzu

CustomLog /var/log/apache2/useragent.log ipagent

/etc/fail2ban/filter.d/baduseragent.conf

[Definition]
failregex = ^<HOST> Mozilla/4\.0 \(compatible; MSIE 7\.0; Windows NT 5\.1; SV1; \.NET CLR 2\.0\.50727\) Havij$

/etc/fail2ban/jail.conf

[apache-bad-user-agent]

enabled  = true
port     = 80,443
protocol = tcp
filter   = baduseragent
maxretry = 1
bantime  = 86400
logpath  = /var/log/apache2/useragent.log
Dmytro Leonenko
quelle
Ja, das würde fehlerhafte Benutzeragentenzeichenfolgen blockieren, aber ich möchte noch einen Schritt weiter gehen und IPs, die mit den fehlerhaften Benutzeragentenzeichenfolgen verknüpft sind, automatisch verbieten, sodass Sie ab diesem Zeitpunkt durch die Verwendung der Benutzeragentenzeichenfolge gesperrt werden auf dieser ip. Ich würde fail2ban verwenden, aber ich habe noch keinen Weg gefunden, dies auf http-Anfragen anzuwenden.
Kzqai
Versuchen Sie meinen Vorschlag in bearbeitetem Beitrag
Dmytro Leonenko
6

Ich glaube ich verstehe deine Frage. Ich werde eine detailliertere Erklärung geben, falls dies das ist, wonach Sie suchen. (Dies wird auch als Falle für andere Dinge funktionieren)

  • Aktivieren Sie die mod_rewrite-Engine in apache2
  • Erstellen Sie eine trap.php, die Sie besuchen können, was Sie möchten. Zum Beispiel habe ich dafür gesorgt, dass die IP-Adresse aller Besucher zu einer schwarzen Liste hinzugefügt wird, die den Zugriff auf mein Web verweigert.
  • Erstellen Sie eine Datei mit den Benutzeragenten, die Sie nicht mögen, eine pro Zeile wie diese
    bas_useragent [tab] schwarz
    useragent_bad [tab} schwarz
  • Fügen Sie nun Ihren mod_rewrite hinzu, der mit der Karte von fehlerhaften Benutzeragenten übereinstimmt, und schreiben Sie ihn dann in Ihre Falle, wenn eine Karte vorhanden ist. Die Regel könnte folgendermaßen aussehen:

    RewriteMap badlist txt:~/bad_useragent_list
    RewriteCond %{HTTP_USER_AGENT} .* [NC]
    RewriteCond ${badlist:%1|white} ^black$ [NC]
    RewriteRule (.*) "/trap.php" [L]

  • Dadurch wird der Benutzeragent im Wesentlichen mit den Schlüsseln in Ihrer Datei abgeglichen. Wenn er nicht gefunden wird, wird davon ausgegangen, dass er "weiß" ist und die Anforderung unverändert bleibt. Wenn es gefunden wird und der zugehörige Wert "schwarz" ist, wird die Anforderung neu geschrieben, in Ihre trap.php-Datei zu wechseln, die alles tut, was Sie möchten.
  • Einige mögliche Ideen. Lassen Sie ein anderes Skript eine allgemeine Datei überwachen, in die trap.php eine IP schreibt. Wenn sich diese allgemeine Datei ändert, liest dieser Watcher die neuen Informationen, analysiert IP-Adressen und fügt IP-Tabellen eine Regel hinzu, die den gesamten Datenverkehr von dieser Adresse blockiert. Ich hoffe das hilft! Wenn Sie weitere Informationen wünschen, antworten Sie einfach hier.
blerbl
quelle
Fast vergessen, können Sie über mod_rewrite hier lesen: httpd.apache.org/docs/current/mod/mod_rewrite.html
blerbl