Как затормозить плохих ботов?

12
D
На сайте с 28.06.2008
Offline
1114
#11
Plazik:
https://nginx.org/ru/docs/http/ngx_http_v2_module.html#var_http2
В самом низу переменная $http2.

И как ее можно применить?

Мне http2 ограничивать не нужно, мне http1 тормознуть надо и то выборочно.

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

Пишу в этой же теме, решил ограничиться пока просто защитой админки, прописал так:

location ~ ^/(administrator|wp-login\.php) {
if ($server_protocol ~* "HTTP/1.1") {
return 444;
}
}

В итоге в адинке вижу текст пхп файла

<?php
/**
* @package Joomla.Administrator
*
* @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
....................

Пробовал так

location ~ ^/(administrator|wp-login\.php) {
if ($server_protocol ~* "HTTP/1.1") {
return 444;
}
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Получаю - File not found.

В чем ошибка?

И вопрос №2

if ($http_user_agent ~ ^(|-|_)$) {return 403;}

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

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

Если file not found - очевидно, что root неверный

Добавить исключение удобнее через map

Не стоит плодить сущности без необходимости
D
На сайте с 28.06.2008
Offline
1114
#14

Буду благодарен примерам, то что я выше навоял это уже для меня высший пилотаж :)

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

В общем делюсь решением, по-моему получилось очень красиво.

В секцию http nginx

geo $whitelist {
default 0;
# боты google
64.68.80.0/21 1;
64.233.160.0/19 1;
66.102.0.0/20 1;
72.14.192.0/18 1;
209.85.128.0/17 1;
216.239.32.0/19 1;
66.249.0.0/16 1;
# боты yandex
77.88.0.0/18 1;
87.250.224.0/19 1;
93.158.0.0/16 1;
95.108.128.0/17 1;
213.180.192.0/19 1;
141.8.0.0/16 1;
130.193.0.0/16 1;
5.255.253.0/24 1;
178.154.149.0/24 1;
# mail.ru
217.69.0.0/16 1;
94.100.0.0/16 1;
# bingbot-msn
40.77.0.0/16 1;
207.46.0.0/16 1;
65.52.0.0/14 1;
157.55.0.0/16 1;
}
#Тут мы даем полный карт картбланш на сканирование ботам поисковиков и тормозим разные парсеры работаюшие по протоколу HTTP/1.1 (если запросы идут не из подсетей поисковиков)
map "$whitelist:$server_protocol" $limit1 {
"1:HTTP/1.0" "";
"1:HTTP/1.1" "";
"1:HTTP/2.0" "";
"0:HTTP/1.1" "$binary_remote_addr";
}
limit_req_zone $limit1 zone=bot11:10m rate=5r/m;

#Тут мы тормозим зверей делающий запросы по HTTP/1.0 Очень много дней просматривал логи из нрмальных по HTTP/1.0 изредка малй ру запрашивает роботс.тхт и все, все остальное сканеры.
map "$whitelist:$server_protocol" $limit2 {
"0:HTTP/1.0" "$binary_remote_addr";
}
limit_req_zone $limit2 zone=bot10:10m rate=1r/m;

#Это обычные юзеры приходящие на https по HTTP/2.0. Так же опытным путем установлено что лимит в 15 запросов в минуту + burst=4 nodelay (на моих сайтах) вообще не тормозит нормальных пользователей
map "$whitelist:$server_protocol" $limit3 {
"0:HTTP/2.0" "$binary_remote_addr";
}
limit_req_zone $limit3 zone=vse:10m rate=15r/m;

В секцию нужного хоста

location / {
limit_req zone=bot11 burst=2 nodelay;
limit_req zone=vse burst=4 nodelay;
limit_req zone=bot10;
12

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