простое блокирование сканирования по IP

grigori

( ͡° ͜ʖ ͡°)
Команда форума
привет,
кто знает готовый скрипт, который позволяет определить для дальнейшего блокирования превышение количества запросов в период времени, с белым списком для поисковиков?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
спасибо, КО :)
тогда можно еще вопрос: а где список IP поисковиков для exceptions взять?

я хотел на php чтобы фоном аналитику можно было прогнать и подсети увидеть
 

Вурдалак

Продвинутый новичок
Последнее редактирование:

Активист

Активист
Команда форума
спасибо, почитаю
Лучше всего дропать \ логировать на уровне iptables.

Код:
# пропускаем ботов (первые правила)
iptables -A INPUT -p tcp --dport 80 --syn -m string --string "yandex.net" --algo kmp -j ACCEPT
iptables -A INPUT -p tcp --dport 80 --syn -m string --string "googlebot.com" --algo kmp -j ACCEPT

# syn это и есть новые соединения. те что keep alive - не подходят под этот критерий
iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
@grigori, Если и использовать ngx_http_limit_req_module, то лучше использовать tengine-овский форк этого модуля - там есть возможность указывать несколько limit_req директив для одного location-а
Белые списки - это только списки ip (которые можно получить распарсив вывод whois), но точно не списки юзерагентов, которые не имеют смысла, т.к. поисковые боты частенько заходят с юзерагентом обычного браузера (проверка на клоакинг)

P.S. Да и вообще если нужна более сложная логика до пхп, но быстрая, то тут лучше использовать lua (tengine, openresty), которое как раз и использует тот же CloudFlare.
 

fixxxer

К.О.
Партнер клуба
Китайские форки nginx стоит применять очень осторожно, по качеству кода они местами довольно стремные, надо быть готовым к неожиданностям.

Вообще, если не хватает limit_req, имеет смысл перейти на уровень iptables.
 

Yoskaldyr

"Спамер"
Партнер клуба
Китайские форки nginx стоит применять очень осторожно, по качеству кода они местами довольно стремные, надо быть готовым к неожиданностям.
это да, но можно использовать только конкретный форкнутый модуль - там китайцы по коду не сильно наворотили, но зато функционал значительно расширяется за счет использования нескольких директив limit_req в одном location-е, что стандартный модуль не умеет (например для авторизированных пользователей одни лимиты, для поисковых ботов другие, а для обычных гостей третьи).
Вообще, если не хватает limit_req, имеет смысл перейти на уровень iptables.
iptables на большом количестве правил значительно тупит (понятно что есть ipset и другие модули, но простыми средствами белый список большого размера не сделать). Поэтому если стоит задача лимитировать только http трафик, то nginx + модули должно с головой хватить (быстро работает даже с огромными списками ip адреов)
 

Yoskaldyr

"Спамер"
Партнер клуба
А чего такого сложного в ipset?
Да не совсем правильно написал - надо было "стандартными средствами iptables" + как мне кажется разбирать http трафик лучше более специализированными средствами заточенными под это, к тому же через iptables как мне кажется будет значительно геморройнее различать гостей и авторизированных пользователей если для них нужны будут различные лимиты в добавок к различным лимитам на различные location-ы (типичная задача связанная с лимитированием запросов).
Хотя да, в некоторых случаях iptables рулит.
 

Yoskaldyr

"Спамер"
Партнер клуба
а боты поисковиков считывают css и js?
да, но только не каждый стандартный проход, а параллельно и значительно реже идет проверка на клоакинг и там практически с полной поддержкой js и css и как раз в таких случаях по юзерагенту бот выглядит как обычный пользователь. А простой js (типа onclick document.location) понимают уже большинство стандартных ботов
 

Вурдалак

Продвинутый новичок
Белые списки - это только списки ip (которые можно получить распарсив вывод whois), но точно не списки юзерагентов, которые не имеют смысла, т.к. поисковые боты частенько заходят с юзерагентом обычного браузера (проверка на клоакинг)
Yoskaldyr, из твоих слов выходит, что:
  1. достаточно грепнуть whois $remote_addr и можно заниматься клоакингом сколько влезет, поисковики тупые, используют IP-шники с такими же данными в whois, что и для обычного бота;
  2. бот для проверки на клоакинг делает такую же тучу запросов в секунду и не палится, поэтому для него тоже нужно делать исключение для limit_req.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вурдалак, мне кажется, в его словах другой смысл, и мне они кажутся полезными.
Мне не клоакинг нужен, для поисковиков надо лишь не ставить лимиты на соединения.
Наоборот я хочу блокировать ботов, которые сканируют только страницы без JS, CSS и картинок, но пока не знаю как отследить отсутствие запроса.


Вообще, мне http://habrahabr.ru/post/84172/ понравилась, там идея через ngx_http_limit_conn_module писать лог подозрительных запросов, парсить его и банить top-50 ботов. Так и reverse lookup можно сделать, и geoip, и подсетку выделить.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Лучше всего дропать \ логировать на уровне iptables.
Код:
# пропускаем ботов (первые правила)
iptables -A INPUT -p tcp --dport 80 --syn -m string --string "yandex.net" --algo kmp -j ACCEPT
iptables -A INPUT -p tcp --dport 80 --syn -m string --string "googlebot.com" --algo kmp -j ACCEPT

# syn это и есть новые соединения. те что keep alive - не подходят под этот критерий
iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
только надо статику на отдельный ip вынести :)
 
Сверху