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

D
На сайте с 28.06.2008
Offline
1108
#51

kxk хотелось бы не только админку защищать а весь сайт.

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

Dram, Ну так и пишите в локейшен /.

Какие проблемы?

Ваш DEVOPS
D
На сайте с 28.06.2008
Offline
1108
#53

В вот это не врублюсь что делает?

if ($args ~* (callback|logout|lostpassword)) {
set $humantest 0;
}
kxk
На сайте с 30.01.2005
Offline
990
kxk
#54

Dram, Я это писал очень давно, пока программисты не сделали проверки на BIG DATA и нейронных сетях, уже и не помню что да как там устроено:)

D
На сайте с 28.06.2008
Offline
1108
#55

А чем ваш код лучше этого?

map $http_cookie $cookie {
default 1;
~somecookie 2;
}

map "$whitelist:$server_protocol:$cookie" $limit3 {
default "";
"0:HTTP/1.1:1" "$binary_remote_addr";
}
limit_req_zone $limit3 zone=bot_cookie:10m rate=2r/m;
[umka]
На сайте с 25.05.2008
Offline
456
#56
Dram:
В вот это не врублюсь что делает?

Похоже, это для какого-то конкретного движка было сделано.

Проверка не делается, если в запросе есть перечисленные аргументы.

Лог в помощь!
D
На сайте с 28.06.2008
Offline
1108
#57
'[umka:
;14896680']Похоже, это для какого-то конкретного движка было сделано.
Проверка не делается, если в запросе есть перечисленные аргументы.

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

D
На сайте с 28.06.2008
Offline
1108
#58

Касательно map $http_cookie родилась идея...

Ведь если я буду проверять свою куку - то смогу проверить ее наличие только на второй загрузке страницы, что не кошерно как-то.

А может ли Nginx проверять вообще наличие како-либо куки, все равно какой?

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

if ($http_cookie ~* "one|two") {

....;
}
Не стоит плодить сущности без необходимости
D
На сайте с 28.06.2008
Offline
1108
#60

А я вот еще что придумал. пересобрал nginx с модулем --with-http_geoip_module

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code:$whitelist:$server_protocol $allowed_country {
default no;
"RU:0:HTTP/1.1" yes;
"RU:0:HTTP/2.0" yes;
"RU:1:HTTP/1.0" yes;
"RU:1:HTTP/1.1" yes;
"RU:1:HTTP/2.0" yes;
"US:1:HTTP/1.1" yes;
"US:1:HTTP/2.0" yes;
"UA:0:HTTP/2.0" yes;
"BY:0:HTTP/2.0" yes;
"KZ:0:HTTP/2.0" yes;
}

+ в нужный хост

if ($allowed_country = no) {
return 503;
}

503 ошибку сделал специально ибо у меня лог отдельный идет

~*503:.*(yandexaccessibilitybot|yandexdirect|yandeximages|yahoo|mediapartners-google|yandexbot|googlebot|msnbot|bingbot|mail).* 1;
}

+ еще обший лог для протокола 1,1

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

Сижу просматриваю кто "попался" - очень много разных сканеров из США и Европы (по протоколу 1,1) + совсем немного живых людей.

Вайтлист обновил этим

# opera-mini.net
82.145.216.0/22 1;
107.167.96.0/19 1;
185.26.180.0/23 1;
37.228.104.0/22 1;
82.145.208.0/21 1;
37.228.111.128/26 1;
141.0.14.0/23 1;
82.145.220.0/22 1;
141.0.12.0/23 1;
141.0.8.0/22 1;

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