Mein Webserver (apache2) wird ständig von böswilligen Bots heimgesucht und fragt nach URLs wie diesen:
/blog/tag/pnphpbb2//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301
//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200
/wiki/index.php/Main:Some_Wiki_Pagename//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200
/wiki/index.php//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200
/blog/2009/01/title-of-post-here//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301
Ich möchte, dass ein nächtlicher Cron-Prozess jeden Host findet, der eine "böswillige" URL anfordert, und sie einem HTTP hinzufügt, das hosts.deny entspricht.
Ich würde mir vorstellen, dass es eine Reihe von regulären Ausdrücken geben würde, die schädliche URLs definieren, sowie möglicherweise ein Apache-Plugin, mit dem der Host problemlos abgelehnt werden kann (ohne jeden Abend einen httpd-Neustart durchführen zu müssen).
Gibt es so etwas?
Antworten:
http://www.modsecurity.org/ kann tun, was Sie wollen.
quelle
fail2ban scannt Protokolldateien wie / var / log / apache / error_log und verbietet IP, wodurch diese automatisierten Scans auf regulären Ausdrücken basieren (sogenannte Filter). Standardmäßig wird die Firewall (iptables) aktualisiert, um die fehlerhafte IP zu blockieren. Es ist sehr einfach, neue Aktionen zu schreiben, und die Implementierung einer Aktion zum Aktualisieren eines .htaccess sollte recht einfach sein. In der fail2ban-Distribution sind mehrere Beispiele verfügbar.
quelle
Ich werde zweitens fail2ban . Es funktioniert live, kann vorübergehend gesperrt werden und IP-Adressen zu Ihrer Firewall hinzufügen, sodass Apache keine Zeit damit verschwenden muss.
Noch effizienter in Verbindung mit dem ipset netfilter-Modul für iptables (das für die Verarbeitung großer Adressmengen schneller ist), und es kann sie sofort sperren, sodass sie nur ein oder zwei Anfragen stellen können, bevor sie blockiert werden.
Wenn Sie diese Leute wirklich hassen und Linux ausführen, können Sie auch versuchen, Tarpitting für iptables zu implementieren (eine schnelle Suche hat keine 2.6-kompatiblen Patches gefunden). Dies akzeptiert die Verbindung und setzt dann sofort die Fenstergröße auf 0 (verhindert, dass Daten übertragen werden), verhindert aber auch, dass das entfernte Ende die Verbindung überhaupt schließt, was bedeutet, dass jede App, die eine Verbindung herstellt, irgendwo zwischen drei und zwanzig warten muss ( !!) Minuten vor dem Ende der Verbindung am Ende.
Dies ist auch ideal, um Portscanner zu stoppen, da sie dadurch um Größenordnungen länger dauern als normalerweise.
quelle
Wenn es sich um Apache 2.0 handelt, können Sie mod_access ausprobieren: http://httpd.apache.org/docs/2.0/mod/mod_access.html
In Apache 2.2 ist es mod_authz_host: http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html
Es sieht jedoch so aus, als müssten Sie Apache signalisieren, dass die Konfiguration neu geladen werden soll, damit Änderungen an der Konfiguration des Moduls wirksam werden.
Bearbeiten: Modsecurity sieht wie gewünscht aus, im Gegensatz zum Erstellen statischer Verweigerungskonfigurationen, indem Sie Ihre Protokolldateien durchsuchen und eine der oben genannten verwenden. Ich werde diese Antwort jetzt positiv bewerten.
quelle
Eine andere Möglichkeit besteht darin, mod_rewite zu verwenden, um die URL abzugleichen, und dem Client eine 403 (oder einen beliebigen Code) zu senden. Beispiel:
Oder zum Spaß:
quelle
Ich würde mir OSSEC auf jeden Fall ansehen. Es erkennt diese Muster und kann die IP-Adressen blockieren. Es sucht auch nach Scans (z. B. mehrere 404) und blockiert die IP des Täters.
Und ja, das macht es standardmäßig.
Link: http://www.ossec.net
quelle
Ein Beispiel wäre:
Ich würde empfehlen, dies in einer separaten Datei zu haben, die Sie aus Ihrer Hauptkonfiguration einschließen, und dieses kleine Fragment einfach neu zu schreiben. Sie können ein erneutes Laden durchführen, um die Änderung zu übernehmen, wodurch Ihr Server nicht wie bei einem Neustart gestoppt wird.
quelle