nginx блокировка повторяющихся запросов

YDoron
На сайте с 25.10.2005
Offline
156
345
Как наиболее грамотно сделать блокировку повторяющихся одинаковых запросов?
Запросы могут приходить с разных IP, адрес запроса иногда меняется. Но как правила долбёжка идёт на один url с одного и того-же IP.
Частота запросов не слишком высокая, гдето 1 запрос в секунду.

Как заблокировать именно этих ботов, и при этом не навредить обычному трафику? стоит ли это делать через fail2ban?
настраиваю Linux сервера, правлю баги, пишу фичи под Wordpress и Laravel
LEOnidUKG
На сайте с 25.11.2006
Offline
1578
#1

Достаточная статьи для вашего случая, вам поможет 5 пункт:

https://mcs.mail.ru/blog/zaschita-ot-ddos-atak-sredstvami-nginx

✅ Трастовых площадок под размещение статей и ссылок. Опыт 12 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Ускорение ваших сайтов (WP, Opencart и др.) + Настройка сервера ( https://searchengines.guru/ru/forum/997205 )
YDoron
На сайте с 25.10.2005
Offline
156
#2
Неа, не помогло. слишком поверхностный совет в пункте №5.   такая блокировка может блокировать обычных пользователей.
так как атака идёт медленная, по запросу в секунду, надо блокировать именно повторяющиеся запросы на один и тот же урл. (пока боты генерирующие рандомальные урлы не попадались)
LEOnidUKG
На сайте с 25.11.2006
Offline
1578
#3
YDoron #:
Неа, не помогло. слишком поверхностный совет в пункте №5.   такая блокировка может блокировать обычных пользователей.
так как атака идёт медленная, по запросу в секунду, надо блокировать именно повторяющиеся запросы на один и тот же урл. (пока боты генерирующие рандомальные урлы не попадались)

1 запрос в секунду кладёт сервер? Надо что-то делать со скриптами, это не нормально.

Ну и блокировку по IP или подсети никто не отменял.

M
На сайте с 17.09.2016
Offline
92
#4
YDoron #:
Неа, не помогло. слишком поверхностный совет в пункте №5.   такая блокировка может блокировать обычных пользователей.
так как атака идёт медленная, по запросу в секунду, надо блокировать именно повторяющиеся запросы на один и тот же урл. (пока боты генерирующие рандомальные урлы не попадались)

Вам всё правильно сказали

Вместо IP фильтровать по URL

Принцип тот же

binary_remote_addr  - заменить на  $uri  к примеру или $request_uri


A
На сайте с 30.01.2015
Offline
51
#5
Если банить частые обращения к uri, то так весь трафик растеряешь.
Я бы просто воспользовался директивой deny на всю подсеть провайдера, откуда стучатся боты.
Можно вынести все deny правила в отдельный конфиг и слелать include в nginx.conf
YDoron
На сайте с 25.10.2005
Offline
156
#6

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

nginx.conf:

limit_req_zone $binary_remote_addr:$request_uri zone=one:10m rate=10r/m;

/sites-enabled/website.conf

limit_req zone=one burst=20 nodelay;


Возможно стоит настроить отдельное правило на binary_remote_addr и отдельное на request_uri.
Есть идеи как и что ещё можно подкрутить?
Неужели никто не сталкивался с такой проблемой? Или может стоит подключить CDN и не париться?

LEOnidUKG
На сайте с 25.11.2006
Offline
1578
#7
Неужели никто не сталкивался с такой проблемой?

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

CDN вообще тут ни при чём, он также не решит проблему с кривыми скриптами.

YDoron
На сайте с 25.10.2005
Offline
156
#8
Там обычный вордпресс стоит
LEOnidUKG
На сайте с 25.11.2006
Offline
1578
#9
YDoron #:
Там обычный вордпресс стоит

обычного ВП не бывает в рабочем проекте. Стандартно это 15 плагинов и допиленная тема под свои нужды. Всё это люто тормозит т.к. разрабатывали 10 разных людей за 500 рублей.

A
На сайте с 30.01.2015
Offline
51
#10
YDoron #:

В общем настроил пока что такую строчку, наблюдаю по логам как оно работает, банит-ли нормальный трафик..

Еще советую добавить

limit_req_status 429;

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