Назад | Перейти на главную страницу

Неудачные боты с ошибкой apache log regex

Попытка заблокировать плохих ботов с помощью fail2ban, читающего журнал доступа Apache, и застряла в настройке правильного регулярного выражения. Строка, которую я хочу сопоставить в журнале доступа:

5.10.83.65 - - [18/Mar/2014:09:06:38 +0400] "GET /catalog/product_compare/
,,/form_key/QLZ6ZkIwX3FWqme3/ HTTP/1.1" 302 522 "-" "
Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"

И упрощенное регулярное выражение, которое я пытаюсь использовать:

failregex = ^<HOST>*(AhrefsBot)

Но что бы я ни пытался, это не работает. Нашел этот пост вот чего я пытаюсь достичь бадботы


Вот что я в итоге сделал, чтобы заблокировать их все, не создавая больших списков, используйте на свой страх и риск, поскольку это может заблокировать законных посетителей, если слова совпадают. Я использовал ignoreregex, чтобы разрешить хорошие, и заблокировал других ботов, пока они называют себя ботами:

failregex = ^<HOST> -.*compatible;.*(Bot|bot)
ignoreregex = (Google|Yandex|Mail|bing)

Это далеко не идеально, но блокирует 99% нежелательных ботов-сканеров, быстро и грязно освобождая сервер.

Вы почти у цели * не делает то, что вы думаете, поскольку соответствует 0 или более из предыдущего символа попробуйте

^<HOST> -.*(AhrefsBot)

например

fail2ban-regex '5.10.83.65 - - [18/Mar/2014:09:06:38 +0400] "GET /catalog/product_compare/,,/form_key/QLZ6ZkIwX3FWqme3/ HTTP/1.1" 302 522 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"' '^<HOST> -.*(AhrefsBot)'
Running tests
=============

Use   failregex line : ^<HOST> -.*(AhrefsBot)
Use      single line : 5.10.83.65 - - [18/Mar/2014:09:06:38 +0400] "GET /...


Results
=======

Failregex: 1 total
|-  #) [# of hits] regular expression
|   1) [1] ^<HOST> -.*(AhrefsBot)
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1] Day/MONTH/Year:Hour:Minute:Second
`-

Lines: 1 lines, 0 ignored, 1 matched, 0 missed