alexeymanikin Posted June 15, 2016 Добрый день, Друзья, Коллеги, Товарищи. Мы периодически выкладываем свои труды в 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, а мы в свою очередь будем улучшать продукт, который принесет пользу всем. Обращу внимание - проект продолжит размещаться на старом месте. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted June 15, 2016 Прекрасная инициатива! Так держать :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vlad11 Posted June 15, 2016 Да, больше конкуренции, больше OpenSource! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 15, 2016 seq + timestamp последовательности с помощью SHA1 Блейк вроде шустрее, и ух точно современнее. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alexeymanikin Posted June 15, 2016 Я не знаю способа как изменить обработку пакетов в ядре, оформленного в виде модуля. Можно изменит 20 строчек в ядре и поменять алгоритм, но это требует правки ядра, что нам делать не хотелось. А все ядра Linux используют SHA1 и с этой реальностью пришлось столкнутся. Была идея допилить ядро, что бы оно открывало соединение не по валидному ACK пакету (проверяя SHA1), а по набору флагов, скажем локально можно использовать устаревший флаг echo. В этом направлении пока нечего не делали. А на фильтрующем сервере можно использовать любой алгоритм. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted June 16, 2016 Алексей, попробуйте runtime patching. В ядре можно заменить все что угодно на все что угодно налету просто влезя в память :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...