Интересный способ защиты от DDOS / HTTP Flood

12
neodev
На сайте с 12.11.2011
Offline
9
3762

Имеется VDS (ovz), 1024 MB RAM / 1200 Mgz / [...]

На ней стоит Nginx & PHP-FCGI. + Форум IP Board (тяжеленный зараза...)

Задачей состояло защитить сайт от HTTP FLOOD.

Танцы с бубном вокруг iptables ни к чему хорошему не привели... Возможности ограничены, и не все модули корректно работают... Решил курить в сторону предпоследнего рубежа - Nginx.

Что было сделано?

Создана зона nosession - 2 запроса в минуту...

limit_req_zone $binary_remote_addr zone=nosession:10m rate=2r/m;

Создана зона request - 2 запроса в секунду...

limit_req_zone $binary_remote_addr zone=request:10m rate=2r/s;

location / {
limit_req zone=request burst=5;
[ ... ]
set $session_id no;
if ($http_cookie ~* "session_id=([^;]+)(?:;|$)") {
set $session_id $1;
}
if ( $session_id !~* "^([a-z0-9]{32})$" ) {
return 557;
}
error_page 557 = @nosession;
[ ... ]
}

Что делается? Проверяется кука session_id - если её нет - отправляем в @nosession. Засчитывается 1 запрос, доходит до форума, форум ставит юзеру куку session_id и отдает контент. При попытки 2 запроса, если отсутствует кука session_id - юзер отправляется в @nosession где встречает лимит и 503 Error.

location @nosession {
limit_req zone=nosession burst=1;
[ ... ]
}

Что делается?

Бот 1 раз коннектится к форуму, куки не принимает - при попытки 2 коннекта ему выдает 503 error, и до php дело не доходит... И так в течении минуты...

Вывод:

12 000 Online Ботов / Каждый 5 потоков.

Канал 100 Mb/s шаред.

VDS (ovz), 512 MB RAM / 600 Mgz.

top - 21:07:23 up  4:26,  3 users,  load average: 0.93, 0.80, 0.37
Tasks: 43 total, 2 running, 41 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.8%us, 3.2%sy, 0.0%ni, 95.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1048576k total, 371672k used, 676904k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached

      venet0
KB/s in KB/s out
11453.23 1322.64
11444.52 1229.99
11484.16 1106.89
11479.35 1446.06
11470.75 1410.96
11466.50 995.26
11426.17 1404.85
11457.23 1387.30
11435.07 671.13
11479.09 1405.34

Обсуждаем плюсы и минусы данного способа... :popcorn:

[ng-host.ru (http://ng-host.ru/)] - [divku.ru (http://divku.ru/)] - [cliku.ru (http://cliku.ru/)]
Д
На сайте с 01.04.2012
Offline
133
#1

В закладки страницу добавлю. Спасибо.

VPN/SSD VPS в любой локации на выбор ( https://cp.inferno.name/cart.php ). Скидка 25% для новых заказов по промо-коду VESNA2024
dkameleon
На сайте с 09.12.2005
Offline
386
#2

бот поумнее может куку и принять

Дизайн интерьера (http://balabukha.com/)
zexis
На сайте с 09.08.2005
Offline
388
#3

Способ интересный, но у него есть недостатки

1) большинство ддос ботов на сегодняшний день понимают куки и возвращают их серверу.

2) Такая зашита забанит боты поисковиков, так как они куки не понимают.

Den73
На сайте с 26.06.2010
Offline
523
#4

тут то что надо с вайт листом.

http://habrahabr.ru/post/139931/

R
На сайте с 13.04.2009
Offline
160
#5

Возвращать надо не 503, а 444.

kxk
На сайте с 30.01.2005
Offline
970
kxk
#6

Добрый вечер!

neodev,

Метод неплох, но от очень старых ботов, та же "Оптима" с 8 версии уже обучена ходить, принимая куки, а новые ботнеты умеют преодолевать и аякс редиректы с хитрыми ключами и даже капчи с динамическим изменением размера, а также ряд других контрольных страниц.

Я всё же уверенно считаю, что самолечение не всегда полезно для здоровья вашего сайта. Если на сайт началась атака, значит, сайт как минимум уже окупается и стоит призадуматься для обращения к профессионалам за качественной защитой.

С уважением, Владимир

Ваш DEVOPS
pupseg
На сайте с 14.05.2010
Offline
347
#7

способ интересный, но как тут уже не раз писали выше - актуален он на 2005-2006год.

за самостоятельность автору +.

Качественная помощь в обслуживании серверов. (/ru/forum/661100) Бесплатных консультаций не даю, не помогаю, не обучаю. Минималка от 100$. Как пропатчить KDE-просьба не спрашивать. Есть форумы (http://linux.org.ru) и полезные сайты (http://www.opennet.ru/).
M
На сайте с 01.12.2009
Offline
235
#8
pupseg:
способ интересный, но как тут уже не раз писали выше - актуален он на 2005-2006год.
за самостоятельность автору +.

С какова перепуга вы обычный флудд откинули на 2006 год, много вы умных бот-нетов видите ?

Развели сыр-бор на ровном месте.

Администратор Linux,Freebsd. построения крупных проектов.
Andreyka
На сайте с 19.02.2005
Offline
822
#9

Я видел и умные и глупые. Они разные бывают.

Не стоит плодить сущности без необходимости
zexis
На сайте с 09.08.2005
Offline
388
#10

Я раньше пробовал распознавать ботов выставляя им cookie с помощью добавления сроки в HTTP заголовок командой nginx

add_header Set-Cookie "nameCookie=val";

У меня была статистика, что около 60% ботнетов успешно такие куки возвращали. Поэтому от такого способа я отказался.

Сейчас планирую попробовать выставлять куки с помощью JavaScript.

Посмотрю какой процент ботов понимает джавоскриптовые куки.

Но повторю, что критерий распознавания ботов с помощью проверки возвращают ли они куки имеет серьезные недостатки.

1) Боты поисковиков не понимают куки и нужно будет иметь всегда актуальный полный список подсетей поисковиков, что бы их не банить.

2) У некоторых пользователей отключен джаваскрипт, поэтому их этот метод посчитает ботоми.

3) Некоторые ддосботы смогут возвращать куки поставленные через джаваскрипт.

4) Чтобы ставить куки через джаваскрипт придется во все HTML страницы сайтов добавлять код.

Поэтому проверку возвращает ли клиент куки можно использовать лишь как дополнительный критерий в дополнение к другим более точным методам.

Таким как, сколько он сделал коннектов, кликов, к каким страницам, какие использует реферреры, юзерагенты.

12

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