Jump to content
Калькуляторы

DDOS OpenSource Testing Тестируем решение по борьбе с l4 флудом

Добрый день, Друзья, Коллеги, Товарищи.

 

Мы периодически выкладываем свои труды в OpenSource - sprut.io, firststat.ru и хотим продолжить эту славную традицию.

 

Месяца 3 назад озадачились вопросом DDOS-атак на 4 уровне модели ISO. В данном случае речь идет о SYN/ACK флуде. Мы посмотрели на представленные решения и, в основном, есть две технологии:

 

SYNCOOKIE:

Суть заключается в том, что вместо записи информации о соединении мы кодируем ее в ACK-пакете в seq + timestamp последовательности с помощью SHA1 и открываем соединение ACK-пакетом при условии валидного ответа. Этот механизм есть в ядре - syncookie добавили его туда в 1998 году и не так давно его вынесли в iptables. На стандартной 1G сетевой карте без тюнинга сетевого стека и оптимизаций сервер начнет умирать с 500000 пакетов в секунду.

 

SYNPROXY:

Это решение уже на сторонней железке и обычно встраивается в разрыв сети. Файрвол держит информацию о статусе каждого соединения, подменяя seq последовательность в пакетах. Это решение используется в Juniper, F5, Arbor и прочих железках. При включении/выключении рвутся установленные сессии. Из преимуществ, на одном ядре можно выжать очень много пакетов в секунду, так как можно не использовать SHA1. 14М на ядро - это не сложно.

 

Фактически нам нужно было решение, которое очищает трафик на 4-м уровне, прозрачно подключается, может держать до 40 гигабит флуда и, в принципе, больше ничего не умеет =). При этом у нас есть довольно большой парк серверов, подключенных 1G-линком (и не с самой современной картой), и, откровенно говоря, в 95% случаев это более чем достаточно. То есть городить решение на каждом сервере было не вариант.

 

Запросив цены в Juniper, F5, Arbor и прочих вендоров, немного выпал в осадок - для наших нужд минимум 40М пакетов просили 120 000$, при этом подчеркнули, что данное железо надо обязательно резервировать.

 

Предлагал коллегам из других компаний вместе разработать подобное решение. Где-то были зачатки, но начальство было против такой разработки. Кто-то сразу посылал.

 

На текущий момент мы разработали систему, которая на процессоре e3-1270v3 держит более 10М пакетов SYN/ACK флуда на сетевых картах Intel 520/710 + UDP, ICMP флуд пока линки не забьются. На адекватных процессорах все упирается в линки.

 

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

 

И да, я хочу выложить все это счастье OpenSource после того, как все доделаем, протестируем и приведем в божеский вид (как минимум, чтобы править конфиги, а не константы в коде =) ). Я убежден - данный продукт повысит качество предоставляемых услуг, и надеюсь не только нам.

 

Так как и те, кто организует DDOS (будь то хоть школьник или владелец ботнета), пытаются получить прибыль с не совсем адекватной деятельности, так и те, кто защищает от DDOS, в большинстве своем получают прибыль на страхе перед первыми.

 

КАК ВЫ МОЖЕТЕ НАМ ПОМОЧЬ?

 

Нам надо нормально протестировать продукт. У нас пока нет ни GUI, ни системы автоматического развертывания, но есть рабочий прототип и большое желание довести его до ума. Если у Вас есть проекты, которые периодически досят, и небольшой простой им не критичен (простой будет меньше, чем если хостинг его отключит) напишите мне на почту alexey ПуДелЬ beget.ru и я расскажу, как его направить на наш прототип. Вы будете бесплатно защищаться от DDOS, а мы в свою очередь будем улучшать продукт, который принесет пользу всем. Обращу внимание - проект продолжит размещаться на старом месте.

Share this post


Link to post
Share on other sites

Я не знаю способа как изменить обработку пакетов в ядре, оформленного в виде модуля. Можно изменит 20 строчек в ядре и поменять алгоритм, но это требует правки ядра, что нам делать не хотелось. А все ядра Linux используют SHA1 и с этой реальностью пришлось столкнутся.

 

Была идея допилить ядро, что бы оно открывало соединение не по валидному ACK пакету (проверяя SHA1), а по набору флагов, скажем локально можно использовать устаревший флаг echo. В этом направлении пока нечего не делали. А на фильтрующем сервере можно использовать любой алгоритм.

Share this post


Link to post
Share on other sites

Алексей, попробуйте runtime patching. В ядре можно заменить все что угодно на все что угодно налету просто влезя в память :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.