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