Jörg Reinholz: fail2ban: User-Regeln für Apache

Beitrag lesen

Kann das damit zusammenhängen, dass ich meine normale Domain (misterunknown.de) per Apache-Proxy-Direktive auf wp.misterunknown.de umgeleitet habe?*

Das wäre meine erste Vermutung.
Wozu übrigens der Proxy? Der ist hier fehl am Platz. Mache einfach eine normale Weiterleitung. Die spart schon mal Leistung!

Es waren bisher mehrere Angriffe, welche einige Minuten bis zu einer halben Stunde gedauert haben. Kurz nach Beginn war entweder der Apache2 oder MySQL oder beides nicht erreichbar. Im Error-Log des Apache tauchten während der Angriffe nur einige Meldungen über den Ausfall von MySQL auf; diese waren aber nicht der angreifenden Client-IP zugeordnet, sondern der IP des Servers selbst:

[Mon Mar 24 15:01:24 2014] [error] [client 109.73.50.139] WordPress-Datenbank-Fehler MySQL server has gone away f\xc3\xbcr Abfrage SELECT * FROM wp_users WHERE user_login = 'admin' von get_user_by, WP_User::get_data_by

  

> Meine Idee war für fail2ban einen Jail zu schreiben, der das Access-Log scannt und alle Majestic12-Bots banned.  
  
Gute Idee, hilft aber nicht lang. Wenn es ein Angriff ist, dann stellt der der den Client um. Warum nicht. Ich habe in den vorkonfigurierten Filtern eine Regel gefunden und den Majestic nachgetragen:  
  
  
apache-badbots.conf:  
  
~~~apache
  
# Fail2Ban configuration file  
#  
# List of bad bots fetched from http://www.user-agents.org  
# Generated on Sun Feb 11 01:09:15 EST 2007 by ./badbots.sh  
#  
# Author: Yaroslav Halchenko  
#  
#  
  
[Definition]  
  
badbotscustom = Majestic|EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider  
badbots = atSpider/1\.0|autoemailspider|China Local Browse 2\.6|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B|Industry Program 1\.0\.x|ISC Systems iRc Search 2\.1|IUPUI Research Bot v 1\.9a|LARBIN-EXPERIMENTAL \(efp@gmx\.net\)|LetsCrawl\.com/1\.0 +http\://letscrawl\.com/|Lincoln State Web Browser|LWP\:\:Simple/5\.803|Mac Finder 1\.0\.xx|MFC Foundation Class Library 4\.0|Microsoft URL Control - 6\.00\.8xxx|Missauga Locate 1\.0\.0|Missigua Locator 1\.9|Missouri College Browse|Mizzu Labs 2\.2|Mo College 1\.9|Mozilla/2\.0 \(compatible; NEWT ActiveX; Win32\)|Mozilla/3\.0 \(compatible; Indy Library\)|Mozilla/4\.0 \(compatible; Advanced Email Extractor v2\.xx\)|Mozilla/4\.0 \(compatible; Iplexx Spider/1\.0 http\://www\.iplexx\.at\)|Mozilla/4\.0 \(compatible; MSIE 5\.0; Windows NT; DigExt; DTS Agent|Mozilla/4\.0 efp@gmx\.net|Mozilla/5\.0 \(Version\: xxxx Type\:xx\)|MVAClient|NASA Search 1\.0|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|Port Huron Labs|Production Bot 0116B|Production Bot 2016B|Production Bot DOT 3016B|Program Shareware 1\.0\.2|PSurf15a 11|PSurf15a 51|PSurf15a VA|psycheclone|RSurf15a 41|RSurf15a 51|RSurf15a 81|searchbot admin@google\.com|sogou spider|sohu agent|SSurf15a 11 |TSurf15a 11|Under the Rainbow 2\.2|User-Agent\: Mozilla/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1\)|WebVulnCrawl\.blogspot\.com/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00  
  
# Option:  failregex  
# Notes.:  Regexp to catch known spambots and software alike. Please verify  
#          that it is your intent to block IPs which were driven by  
#          above mentioned bots.  
# Values:  TEXT  
#  
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$  
  
# Option:  ignoreregex  
# Notes.:  regex to ignore. If this regex matches, the line is ignored.  
# Values:  TEXT  
#  
ignoreregex =

Außerdem will ich Post-Flooding verhindern (vielleicht alle IPs bannen, die >3 POST-Requests/Sekunde schicken...?).

Da würde ich der Statistik mehr Raum geben. Ich habe in den vorkonfigurierten Filtern keine Regel gefunden, hier ein Vorschlag:

/etc/fail2ban/jails.conf -neuer Abschnitt:

[apache-dos]  
  
enabled  = false  
port     = http,https  
filter   = apache-dos  
logpath  = /var/log/apache2/access.log  
  
# Überschreibe Werte der allgemeinen Konfiguration:  
findtime = 10  
maxretry = 30  
bantime  = 3600  

/etc/fail2ban/filters.d/apache-dos.conf

[INCLUDES]  
before = apache-common.conf  
  
[Definition]  
failregex = ^.*POST.*$  
ignoreregex =