Zablokuj badbota za pomocą fail2ban za pośrednictwem agentów użytkownika w access.log

4

Jak mogę utworzyć filtr, aby zablokować je za pomocą fail2ban?

    476 Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)
    892 ltx71 - (http://ltx71.com/)
    5367 Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])
   6449 Barkrowler/0.9 (+http://www.exensa.com/crawl)

Ta lista wychodzi z tego:

sudo cat /var/log/apache2/access.log | awk -F\" '{print $6}' | sort | uniq -c | sort -n

Próbowałem apache-badbot.conf, ale wydaje się, że to nie działa ...

alebal
źródło
Są to aplikacje klienckie, a nie strony odsyłające. Z mojego doświadczenia DotBot i BLEXBot stosują się do pliku robots.txt, jeśli Disallowwyjdzie na nie dyrektywa. ltx71 ignoruje plik robots.txt i musiałem zablokować wszystkie ich adresy IP (w tym czasie: 54.174.24.200, 54.175.147.90, 54.175.196.96) za pomocą (w moim przypadku) reguł iptables.
Doug Smythies
Spojrzałem na twoje poprzednie pytania i zdałem sobie sprawę, że masz problemy od miesięcy. Nie jest dla mnie jasne, dlaczego masz tak wiele problemów z typowymi sposobami radzenia sobie z tego typu botami. Nawiasem mówiąc, moje reguły iptables dla ltx71.com są takie, że te 3 adresy IP nie identyfikują się jako ltx71za pośrednictwem ciągu agenta użytkownika. Mam również reguły przepisywania, które pozwalają ltx71 uzyskać mój plik robots.txt, ale w przeciwnym razie powiedz im, że zostały zbanowane, ponieważ nie przestrzegają pliku robots.txt.
Doug Smythies
„To są agenty użytkownika” - Masz rację… przepraszam, że się zdezorientowałem po tym całym googlowaniu. Te są w moim pliku robots.txt, ale ignorują dyrektywę. Na koniec po starym wątku utworzyłem dynamiczny plik robots.txt, który aktualizuje się jednocześnie we wszystkich moich witrynach i zawiera około pięćdziesięciu reguł działania. Jeszcze jakiś czas temu dodałem do skryptu wszystkie adresy IP niechcianych botów do UFW, ale w pewnym momencie dotarłem do tysięcy adresów IP i musiałem szukać innej drogi. Z ltx71 mam tylko dwa nowe dzisiaj (35.192.84.7, 104.155.179.226).
alebal
Po wielu problemach zrezygnowałem z 35.zzz.yyy.xxx i teraz zablokowałem 35.0.0.0/8. Nie dbam o to, aby zablokować kogoś niewinnego jako szkody dodatkowe.
Doug Smythies
Po pewnym czasie zacząłem również używać CIDR, ale były to setki, co oznacza, że ​​setki tysięcy niewinnych adresów IP zostało zablokowanych. Problemem nie jest zablokowane IP, ale jeśli serwer jest mały, kontrolowanie iptables zajmuje więcej czasu niż wyświetlanie strony przy każdym połączeniu.
alebal

Odpowiedzi:

5

Prawidłowym sposobem radzenia sobie z irytującymi botami jest zablokowanie ich w pliku „robots.txt”. Ale twoje komentarze wskazują, że ignorują tę dyrektywę. Blokowanie przez użytkownika użytkownika będzie ostatecznie grą w kotka i myszkę, ale jeśli chcesz to zrobić, musisz wykonać następujące czynności.

Musisz więc włączyć więzienie apache-badbots, które czyta dziennik dostępu Apache, jeśli jeszcze tego nie zrobiłeś. Utwórz plik /etc/fail2ban/jail.d/apache-badbots.localz zawartością:

[apache-badbots]
enabled = true

Główna część więzienia apache-badbots jest zdefiniowana, /etc/fail2ban/jail.confwięc wszystko, co musisz zrobić, to włączyć ją.

Następnie zmodyfikuj filtr apache-badbots, aby uwzględnić boty. Edit /etc/fail2ban/filter.d/apache-badbots.conf. W nim jest szczególna linia dla niestandardowych botów:

badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider

Boty są określane za pomocą wyrażeń regularnych. Wymień je lub sczep swoje na końcu oddzielone |s.

badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider|BLEXBot|ltx71|DotBot|Barkrowler
# OR
badbotscustom = BLEXBot|ltx71|DotBot|Barkrowler

Następnie będziesz chciał zmodyfikować failregexlinię, aby wyrażenie regularne pasowało do dowolnej części agenta użytkownika, a nie tylko do całości. Zmień linię:

failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$

do (zwróć uwagę na dwa dodatkowe .*):

failregex = ^<HOST> -.*"(GET|POST).*HTTP.*".*(?:%(badbots)s|%(badbotscustom)s).*"$

Na koniec załaduj ponownie konfiguracje fail2ban.

sudo fail2ban-client reload

Informacje te mogą być pomocne w celach informacyjnych.

Patrząc /etc/fail2ban/filter.d/apache-badbots.confna aktualizację serwera Ubuntu 16.04, który mam, wygląda na przestarzały. W szczególności jest ten komentarz:

# DEV Notes:
# List of bad bots fetched from http://www.user-agents.org
# Generated on Thu Nov  7 14:23:35 PST 2013 by files/gen_badbots.

Wygenerowałem nowy z repozytorium git fail2ban , ale nadal nie zawierał tych botów (być może źródło jest nieaktualne lub niekompletne). Jeśli jesteś ciekawy, możesz wygenerować nowy z następującymi.

git clone https://github.com/fail2ban/fail2ban
cd fail2ban/
./files/gen_badbots

Nowy plik będzie dostępny pod adresem config/filter.d/apache-badbots.conf. Jeśli chcesz go użyć, zastąp /etc/fail2ban/filter.d/apache-badbots.confgo.

Dla porównania jest to definicja apache-badbots z /etc/fail2ban/jail.conf.

[apache-badbots]
# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.
port     = http,https
logpath  = %(apache_access_log)s
bantime  = 172800
maxretry = 1

%(apache_access_log)sZmienna pochodzi /etc/fail2ban/paths-debian.confi jest zdefiniowany jako /var/log/apache2/*access.log.

Dla odniesienia, oto to, apache-badbots.confktóre wygenerowałem (bez modyfikacji).

# Fail2Ban configuration file
#
# 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.


[Definition]

badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider
badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|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|EmailSpider|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B|8484 Boston Project v 1\.0|Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|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|EmailSpider|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B|8484 Boston Project v 1\.0|Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|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|EmailSpider|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B|8484 Boston Project v 1\.0|Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|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|EmailSpider|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B|8484 Boston Project v 1\.0|Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|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|EmailSpider|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B

failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$

ignoreregex =

# DEV Notes:
# List of bad bots fetched from http://www.user-agents.org
# Generated on Sat Feb  9 12:59:57 EST 2019 by ./files/gen_badbots.
#
# Author: Yaroslav Halchenko
cpburnz
źródło
1
Wygląda na to, że działa z modyfikacją failregex, dzięki
alebal