From: Alex Vorona <voron@amhost.net.>
Newsgroups: nginx-ru.sysoev.ru
Date: Mon, 29 Oct 2007 18:21:07 +0000 (UTC)
Subject: Защита от DoS атак в nginx
> Кто-нибудь занимался борьбой с такими DoS аттаками на уровне nginx?
> Если не жалко - поделитесь идеями. Скоро переедет ко мне несколько
> сайтов которые периодически валят, надо подготовится...
FreeBSD, сетевая Intel fxp, порт 100Мбит, polling, http accept-filter
фильтрацию url например по критерию POST index.php?action=login с пустым
реферером можно реализовать так
set $add 1;
location /index.php {
limit_except GET POST {
deny all;
}
set $ban "";
if ($http_referer = "" ) {set $ban $ban$add;}
if ($request_method = POST ) {set $ban $ban$add;}
if ($query_string = "action=login" ){set $ban $ban$add;}
if ($ban = 111 ) {
access_log /var/log/nginx/ban IP;
return 404;
}
proxy_pass http://127.0.0.1:8000;#тут живёт апач
}
ну и по крону уже раз в минуту добавлять в ipfw table новые ИП из лога
25Мбитный DDoS, преимущесвенно режущийся ipfw, остатки проходят на
nginx, который по критерию обучает ipfw и остатки проксирует на апач -
LA 0, сайт работает.
Чуть более мощный сервер на гигабитном Realtek re и 100Мбит порту с
поллингом загибался от pps где-то до 20Мбит
Sergey Smitienko <hunter@comsys.com.ua.>
Будьте готовы, что при атаке в системе закончатся сокеты для соединиея
nginx - backend. Так что я бы добавил
sysctl net.inet.tcp.msl=3000 - уменьшаем время TIMEWAIT
sysctl net.inet.tcp.maxtcptw=40960 - ограничиваем количество TIMEWAIT сокетов
sysctl net.inet.tcp.nolocaltimewait=1 - отключаем TIMEWAIT для локальных сокетов.
sysctl net.inet.ip.portrange.first=1024
sysctl net.inet.ip.portrange.last=65535
sysctl net.inet.ip.portrange.randomized=0
Дальше резали на уровне pf - загружали в таблицу IP с которых
приходило слишком много хитов. PF с таблицами работает очень быстро.
Исходники парсера логов есть на http://www.comsys.com.ua/files
436 Прочтений • [Защита от DoS атак в nginx (dos ddos attack flood traffic limit tune optimization freebsd web nginx)] [08.05.2012] [Комментариев: 0]