Re: Не понимаю как работает limit req и limit conn
Vasiliy P. Melnik
basil на vpm.net.ua
Чт Июл 21 15:35:28 UTC 2016
Та никто вас ддосить так не будет - это накладно, проще найти какой-нибудь
скрипт на сайте и дергать его - больше толку будет.
Когда нас ддосили все началось с поискового скрипта - 1000 запросов на
поиск с 10-ти серверов предостаточно, мы ложились от 500 запросов, ибо
никакой защиты от этого не предусмотрено, а поиск должен быть для всех -
такова специфика портала. Потом простенький скрипт подсчета открытых
сокетов с одного айпи и бан в айпителбсах решил данный вопрос и с таким
ддосом от нас отстали, ибо не получается. На следующий день к нам пришли с
ддосом удп-ответов от днс-серверов, наш датацентр сдался после 20 гигабит и
заблекхолил нашу сетку. Сейчас сайт переписан для работы через клоудфлеер,
а сам клоудфлеер ходит на сервер через совсем другую сеть.
Займитесь лучше настройкой клоудфлеера - это бесплатно и если что вы будете
готовы к любой ситуации, а ддосить клоудфлеер почти что бесперспективное
занятие. А на лимиты забейте - это не поможет
21 июля 2016 г., 18:17 пользователь siroco <nginx-forum на forum.nginx.org>
написал:
> Всем привет!
>
> Пытаюсь настроить базовую защиту от DDOS, но не могу получить в тестах
> подтверждение того, что выставленные параметры работают как надо.
>
> Имеется nginx/1.10.1.
> Нагрузочные тесты запускаются с одной единственной машинки с IP
> 172.20.241.135:
>
> (в nginx.conf прописано)
>
> -----------------------------------------------------------------
> geo $limited {
> default 1;
> 192.168.45.56/32 0;
> 172.20.241.135/32 1;
> }
>
> map $limited $limit {
> 1 $binary_remote_addr;
> 0 "";
> }
>
> limit_req_zone $limit zone=1000reqpersec:10m rate=1000r/s;
> limit_conn_zone $limit zone=conn_limit_per_ip:10m;
>
> limit_req_status 429;
> limit_conn_status 429;
> limit_req_log_level notice;
> -----------------------------------------------------------------
>
>
> (в конфиге виртуального сервера, se-centos7.domain.com.conf)
> -----------------------------------------------------------------
> location /withlimits {
>
> limit_req zone=1000reqpersec;
> limit_conn conn_limit_per_ip 10;
>
> root /usr/share/nginx/html;
>
> }
> -----------------------------------------------------------------
>
>
>
> Хочу получить подтверждение, что 1000 запросов в секунду все таки проходит.
>
> Пробую утилитку vegeta (https://github.com/tsenart/vegeta):
>
> (вот такой заголовок запроса)
> # cat plan.txt
> GET http://se-centos7.domain.com/withlimits/test.html
> User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0)
> Gecko/20100101 Firefox/40.0
> Host: se-centos7.domain.com
> Accept-Encoding: gzip, deflate
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
>
>
> (пробуем 800 запросов в секунду)
> # vegeta attack -duration=30s -rate=800 -timeout=1s -workers=40
> -targets=./plan.txt | vegeta report
> Requests [total, rate] 24000, 800.03
> Duration [total, attack, wait] 29.999213425s, 29.998749891s,
> 463.534µs
> Latencies [mean, 50, 95, 99, max] 387.177µs, 354.506µs, 453.12µs,
> 1.155159ms, 11.057387ms
> Bytes In [total, mean] 14434520, 601.44
> Bytes Out [total, mean] 0, 0.00
> Success [ratio] 99.12%
> Status Codes [code:count] 429:212 200:23788
> Error Set:
> 429
>
>
> Видим, что 800 запросов не держит.. В error-логе вот что:
>
> 2016/07/21 17:56:46 [notice] 4881#4881: *399 limiting requests, excess:
> 1.000 by zone "1000reqpersec", client: 172.20.241.135, server:
> se-centos7.domain.com, request: "GET /withlimits/test.html HTTP/1.1",
> host:
> "se-centos7.domain.com"
> 2016/07/21 17:56:47 [notice] 4881#4881: *393 limiting requests, excess:
> 1.000 by zone "1000reqpersec", client: 172.20.241.135, server:
> se-centos7.domain.com, request: "GET /withlimits/test.html HTTP/1.1",
> host:
> "se-centos7.domain.com"
>
>
>
> При использовании улититы wrk2 (https://github.com/giltene/wrk2) видим все
> то же, уже на 500 запросах в минуту (R500):
>
> # ./wrk -t2 -c5 -d30s -R500 http://se-centos7.domain.com/withlimits/
> Running 30s test @ http://se-centos7.domain.com/withlimits/
> 2 threads and 5 connections
> Thread calibration: mean lat.: 1.076ms, rate sampling interval: 10ms
> Thread calibration: mean lat.: 0.974ms, rate sampling interval: 10ms
> Thread Stats Avg Stdev Max +/- Stdev
> Latency 1.03ms 374.32us 6.14ms 67.16%
> Req/Sec 267.14 53.27 444.00 59.96%
> 15002 requests in 30.00s, 10.75MB read
> Non-2xx or 3xx responses: 4019
> Requests/sec: 500.03
> Transfer/sec: 366.90KB
>
> Видим, что "Non-2xx or 3xx responses: 4019", т.е. много 429ых ошибок.
>
> Параметр limit_conn тоже не работает, не срабатывает ограничение в 10
> коннекций с одного IP..
>
> Что я делаю не так?
>
> Как можно получить подтверждение того, что выставленные лимиты отрабатывают
> правильно.
>
> --
> s.
>
> Posted at Nginx Forum:
> https://forum.nginx.org/read.php?21,268405,268405#msg-268405
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20160721/2bb14cda/attachment.html>
Подробная информация о списке рассылки nginx-ru