Защита от ботов. NGINX limit_req + белый список яндекс на основе rDNS

D
На сайте с 28.06.2008
Offline
1114
#41

А не знаете как такой фрмат подсетей 5.9.0.0 - 5.9.255.255 всунуть в geo nginx ? Там ведь вроде диапазоны нельзя?

Andreyka
На сайте с 19.02.2005
Offline
822
#42

Диапазоны можно, просто перевести http://www.ipconvertertools.com/

Не стоит плодить сущности без необходимости
D
На сайте с 07.11.2000
Offline
228
#43
Dram:
А не знаете как такой фрмат подсетей 5.9.0.0 - 5.9.255.255 всунуть в geo nginx ? Там ведь вроде диапазоны нельзя?

При нажатии на каждый IP:

https://myip.ms/view/ip_ranges/2325521/194.42.176.0_194.42.191.255

отдает два варианта:

IP Range Start: 194.42.176.0

IP Range End: 194.42.191.255

CIDR: 194.42.176.0/20

---------- Добавлено 23.01.2017 в 23:28 ----------

Или при нажатии на [+] слева от каждой записи.

D
На сайте с 28.06.2008
Offline
1114
#44

Все же подумал еще раз - черный список излишен для даного конфига. Единственное чтобы сюда еще прикрутить - это детект тех кто не грузит стили и js

D
На сайте с 28.06.2008
Offline
1114
#45
Andreyka:
С куками - не вариант.
Делайте отдельный лог для css/js и анализируйте его вместе с полным.

Хорошаяя идея только немного так


map "$whitelist:$server_protocol" $log {
default 0;
"0:HTTP/1.1" 1;
}

+ в сервер

access_log /var/log/nginx/access.HTTP1.1.log combined if=$log;

Теперь у меня HTTP1.0 отрезан

На HTTP2.0 ботов пока мизерное кол-во (не знаю может и нет совсем)

и есть отдельный лог HTTP1.1 в котором нет запросов от поисковых ботов.

Вот в этом логе еще достаточно ботов, прошедних основной фильтр.

Теперь его по крону можно анализировать (на предмет айпи которые не запрашивают картинки) и заносить черный список (отдельный файл) который инклюдить сюда же в Nginx.

Тут есть нюанс - могут появляться новые подсети поисковых ботов (хороших), поэтому если у запросов юзерагенты - |YandexMobileBot|YandexAccessibilityBot|YandexDirect|YandexImages|Yahoo|Mediapartners-Google|YandexBot|Googlebot|msnbot|bingbot|Mail\.RU нужно не банить сразу, а отправлять мыло админу чтобы посмотрел руками.

Сам такое не реализую ибо не кодер совершенно, надеюсь кто-то поможет...

D
На сайте с 28.06.2008
Offline
1114
#46

Прдолжаю думать на эту тему и созрел вопрос.

Может ли NGINX определять на лету поддерживает ли запрашиваемый юзер JavaScript?

Мысль попробовать блокировать не поддерживающих JavaScript которые естественно не из белого списка.

[umka]
На сайте с 25.05.2008
Offline
456
#47

Вы пытаетесь всё вывернуть наизнанку :)

Попробуйте так:

1. Делаете проверку по белому списку.

2. Если IP есть в списке, то пропускаете его. На этом проверка на вшивость заканчивается.

3. Если IP нет в списке, то проверяете, есть ли у пользователя специальная кука. Назовём её "not_a_bot".

4. Если кука есть, то пропускаете пользователя (проверка заканчивается).

5. Если куки нет, то выдаёте пользователю 403 и код JavaScript, который устанавливает куку "not_a_bot" и обновляет страницу.

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

Для реальных пользователей это всё происходит незаметно.

Большинство сайтов сейчас не работают ни без JS, ни без кук. Поэтому, ценность посетителей, у которых что-то из этого выключено, близка к нулю.

Я про такой способ когда-то писал и давал пример .htaccess для апача.

Сделать тоже самое для Nginx не должно быть проблемой.

Лог в помощь!
D
На сайте с 28.06.2008
Offline
1114
#48

Проверять куку я уже пробовал (на прошлой странице) и слишком много юзеров банится - меня это испугало

kxk
На сайте с 30.01.2005
Offline
990
kxk
#49

Dram, Я сегодня добрый, благодарите мою жену:)

location ~* /(wp-login\.php|xmlrpc\.php|administrator|admin\.php) {
default_type text/html;
set $humantest 0;
if ($http_cookie !~* "humans=checktest") {
set $humantest 1;
}
if ($args ~* (callback|logout|lostpassword)) {
set $humantest 0;
}

if ($humantest = 1) {
return 200 "<html><body><script>document.cookie='humans=checktest;path=/';location.reload();</script></body></html>";
}
error_page 404 = @fallback;
}

Допиливайте уже сами:)

Ваш DEVOPS
L
На сайте с 16.10.2010
Offline
105
#50

Всю тему не читал, только бегло, но сам пользуюсь для блокировки ботов уже месяца 3-4 этим https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий