LINUX.ORG.RU
ФорумAdmin

Как заблокировать умного бота?

 , , , ,


0

1

Привет, ЛОР!

Приключилась такая беда, на сайте поселился умный бот. Стучится головой об капчу пытаясь авторизоваться, меняет ip и UA как перчатки, но пытается авторизоваться всегда с одной и той же страницы /faq/. Еще отличительная особенность - на сайт лезет всегда с указанием порта.

http://fpaste.org/B5uL/ логи деятельности. По ссылкам неудавшихся авторизаций на моменте ввода капчи прекрасно видно пациента - один и тот же сценарий действий. Наблюдается эта котовасия уже дня три. Как можно отловить и заблокировать существо? Варианты с fail2ban и .htaccess не подойдут по двум причинам:

1. ip постоянно меняется. Иногда прямо во время деятельности, иногда бот берет перерыв, после чего возвращается.

2. записи в /var/log/httpd/error_log не сыпятся, ибо робот не лезет куда не надо (запреты в robots.txt), все официально идет в access_log.

Но ведь за что-то же можно зацепиться?

★★

Последнее исправление: kir64 (всего исправлений: 1)

Забанить POST HTTP/1.0 запросы в /faq/
На nginx'е элементарно банится, про апач не скажу, но держать его без фронт-энда уже года три не комильфо. И кстати, по этим же запросам можно сначала отловить все ей айпишки и заодно побанить пачку анонимайзеров.

pekmop1024 ★★★★★
()
Последнее исправление: pekmop1024 (всего исправлений: 1)
Ответ на: комментарий от pekmop1024

Получается, если пойти таким путем - есть возможность порезать юзеров, решивших авторизоваться на этой странице?

kir64 ★★
() автор топика
Ответ на: комментарий от pekmop1024

Спасибо за подсказку, буду разбираться!

kir64 ★★
() автор топика
Ответ на: комментарий от kir64

Тебе надо соблюдение двух условий, иначе ты побанишь всех юзеров вообще.

        if ($server_protocol ~* "HTTP/1.0") {
        set $oldbot H;
        }
        if ($request_method = POST) {
        set $oldbot "${oldbot}P";
        }
        if ($oldbot = HP) {
        return 444;}

pekmop1024 ★★★★★
()
Ответ на: комментарий от pekmop1024

Т.е. в моем случае полностью рабочим вариантом должна быть такая запись в конфиг:

location ~ ^(/faq) {
 if ($server_protocol ~* "HTTP/1.0") {
        set $oldbot H;
        }
        if ($request_method = POST) {
        set $oldbot "${oldbot}P";
        }
        if ($oldbot = HP) {
        return 444;}
}

Или можно такое для всего корня указать, на случай, если он начнет ломиться по тому же принципу но с других страниц?

kir64 ★★
() автор топика
Ответ на: комментарий от kir64

И сделать это в отдельный локейшн /faq/, да еще и с логированием айпишек - ну, чтобы побанить анонимайзеры, если тот же бот будет ломиться куда не попадя.

pekmop1024 ★★★★★
()
Ответ на: комментарий от GNU-Ubuntu1204LTS

Любви и ласки, очевидно :) Авторизоваться пытается на сайте. Но не может побороть капчу.

kir64 ★★
() автор топика
Ответ на: комментарий от pekmop1024

Значит,

location ~ ^(/faq) {
}
вполне должно хватить?

kir64 ★★
() автор топика
Ответ на: комментарий от GNU-Ubuntu1204LTS

Да все они только одного и хотят. А как жениться - так сразу в кусты.

kir64 ★★
() автор топика
Ответ на: комментарий от pekmop1024

К сожалению, пляски продолжаются:

142.0.35.138 - - [03/Dec/2012:05:28:39 +0400] "GET /faq/?login=yes&auth_service_error=1 HTTP/1.0" 200 52141 "http://mysite.ru/faq/?login=yes&auth_service_error=1" "Opera/9.80 (Windows NT 5.1; U; MRA 6.0 (build 5680); ru) Presto/2.10.289 Version/12.00"

142.0.35.138 - - [03/Dec/2012:05:28:58 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=0a160c815d42d597af1089b1d1a73803%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes&auth_service_error=1" "Opera/9.80 (Windows NT 5.1; U; MRA 6.0 (build 5680); ru) Presto/2.10.289 Version/12.00"

142.0.35.138 - - [03/Dec/2012:05:29:02 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=04b714fccf6d9c7af5b7eb4d280cd20b%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"

142.0.35.138 - - [03/Dec/2012:05:29:26 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=0a160c815d42d597af1089b1d1a73803%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes&auth_service_error=1" "Opera/9.80 (Windows NT 5.1; U; MRA 6.0 (build 5680); ru) Presto/2.10.289 Version/12.00"

142.0.35.138 - - [03/Dec/2012:05:29:28 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=0a160c815d42d597af1089b1d1a73803%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes&auth_service_error=1" "Opera/9.80 (Windows NT 5.1; U; MRA 6.0 (build 5680); ru) Presto/2.10.289 Version/12.00"

142.0.35.138 - - [03/Dec/2012:05:29:28 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=04b714fccf6d9c7af5b7eb4d280cd20b%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"

142.0.35.138 - - [03/Dec/2012:05:29:29 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=0a160c815d42d597af1089b1d1a73803%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes&auth_service_error=1" "Opera/9.80 (Windows NT 5.1; U; MRA 6.0 (build 5680); ru) Presto/2.10.289 Version/12.00"

142.0.35.138 - - [03/Dec/2012:05:29:31 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=04b714fccf6d9c7af5b7eb4d280cd20b%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"

142.0.35.138 - - [03/Dec/2012:05:29:33 +0400] "GET /faq//%5C%22/bitrix/tools/captcha.php?captcha_sid=04b714fccf6d9c7af5b7eb4d280cd20b%5C HTTP/1.0" 404 53863 "http://mysite.ru/faq/?login=yes" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"

Конфиг nginx с блокировокй сейчас выглядит таким образом:

        location ~ ^(/faq) {
                if ($server_protocol ~* "HTTP/1.0") {
                        set $oldbot H;
                }
                if ($request_method = POST) {
                        set $oldbot "${oldbot}P";
                }
                if ($oldbot = HP) {
                        return 444;}
        }

        location ~ ^(/faq) {
                if ($server_protocol ~* "HTTP/1.0") {
                        set $oldbot H;
                }
                if ($request_method = GET) {
                        set $oldbot "${oldbot}P";
                }
                if ($oldbot = HP) {
                        return 444;}
        }


        location ~ ^(/) {
                if ($server_protocol ~* "HTTP/1.0") {
                        set $oldbot H;
                }
                if ($request_method = GET) {
                        set $oldbot "${oldbot}P";
                }
                if ($oldbot = HP) {
                        return 444;}
        }


        location ~ ^(/) {
                if ($server_protocol ~* "HTTP/1.0") {
                        set $oldbot H;
                }
                if ($request_method = POST) {
                        set $oldbot "${oldbot}P";
                }
                if ($oldbot = HP) {
                        return 444;}
        }

Почему его не останавливают такие правила? Вроде он же попадает под обе проверки.

kir64 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.