Как блочить флуд по типу ApacheBench? (OVH)

12 3
L
На сайте с 13.03.2010
Offline
93
2305

Собсна, взял Public Cloud на овх за 20 евро. Решил затестить защиту да и вообще стабильность. Ubuntu 16.04, Apache + Nginx, стоит на ISPmanager. После всех базовых настроек решил тестануть апачбенчем с другой впски (такой же). В итоге серв начинает лагать от такого:

ab -n 1000 -c 1000

При этом стоит перманентная митигация OVH, 0 реакции. Шлешь 1000 запросов в 1000 потоков и вообще пох. Да, разумеется это можно частично решить установив лимиты на число одновременных соединений и запросов в секунду с одного айпи, и тем не менее, все равно схватываю лютый лаг на 5-10 сек, пока не отфильтруется и не заблочится флудящий айпи (10 таких флудящих машин и конец как бы).

Раз OVH не спасает от такого флуда, что делать? Есть ли какие то варианты фильтра на уровне софта? Может какие особые настройки limit_req? Сейчас стоит лимит в 50 запросов в секунду и burst до 100 на весь сайт, ибо там дофига чего приходится подгружать, и с такой конфигураций ловишь нехилые лаги в начале теста. Думаю, ограничение 10 запросов в сек легко бы исправило это, но вот только сайт требует под 50 запросов при загрузке, ибо дофига картинок и скриптов.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1
⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
L
На сайте с 13.03.2010
Offline
93
#2

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

Оптимизайка
На сайте с 11.03.2012
Offline
396
#3
l1mon:
Правда какое оптимальное значение не понял.

10 is good. Browsers do not make more than 6 parallel requests in total (including all static resources).

You can limit this value even to 1 per single IP, in backend location, however.

L
На сайте с 13.03.2010
Offline
93
#4
Оптимизайка:

You can limit this value even to 1 per single IP, in backend location, however.

А вот о таком не читал никогда, можно подробнее? Как сделать и как отразится на пользователях?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5
l1mon:
Как сделать


limit_conn_zone $binary_remote_addr zone=backend:10m;

location ~ \.php$ {
limit_conn backend 1;
...
}

L
На сайте с 13.03.2010
Offline
93
#6

В случае, если есть и html страницы, прописывать (php|html)? Это будет работать?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#7
l1mon:
В случае, если есть и html страницы, прописывать (php|html)? Это будет работать?

Yes, It will. But html files are the static resource and they will not load your CPU in contrast of php scripts.

Note that I've show only an example. Your nginx location structure may differs.

L
На сайте с 13.03.2010
Offline
93
#8

Хорошо, а что будет с остальным контентом? Например если начать флуд на любой другой файл не php и не html? Для других файлов ограничение применяться не будет? Можно ли задать, например, 2 соединения для php и html, и 10 для всего остального? Что если начнуть флудить изображение, нарример? 🤪

Оптимизайка
На сайте с 11.03.2012
Offline
396
#9
l1mon:
Что если начнуть флудить изображение, нарример? 🤪

Yes, you can limit static resources too, but it's practically useless. Nginx works effectively.

D
На сайте с 28.06.2008
Offline
1101
#10
12 3

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