Как стать автором
Обновить

Защита стартапа от DDOS. Личный опыт и переживания

Время на прочтение5 мин
Количество просмотров14K

Давайте начнем с общих понятий. DOS - атака на вычислительную систему с целью довести ее до отказа. DDOS - распределенная DOS атака (более чем с одного хоста). Разновидностей DDOS существует довольно много, но речь пойдет о конкретной разновидности - UDP Flood. Я позиционирую данную статью как повествование истории, а не инструкцию по защите от любых нападений, поэтому с радостью выслушаю ваши комментарии и советы :)

Чем вам может повредить DDOS?

  • Недоступность ресурсов.

  • Урон вашей репутации.

  • Убытки и недополученный доход.

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

Кто может устроить DDOS?

  • Хакер.

  • Студенты и школьники.

  • Да кто угодно :)

Любому пользователю интернета, доступны для покупки услуги ботнетов, которые по щелчку пальцев начнут засылать паразитный трафик на сервер жертвы. Называются эти услуги где прямо, а где завуалировано, например: стресс-тестирование, stresser. Стоимость услуг по "стресс тестированию IP-адреса" колеблется от 3000р в день до бесконечности, в зависимости от мощности атаки.

Долгое время я думал, что организации и стартапы оправдывают DDOS атаками свою некомпетентность в плане работы под нагрузкой и на самом деле атаки не так уж и страшны. Наверняка, так оно и бывает частенько, но есть нюансы!

Завязка

Мы, с небольшой командой единомышленников, на протяжении двух лет разрабатывали онлайн игру. И вот в январе 2022 года мы подошли к точке релиза нашего проекта для пользователей.

Наша скромная архитектура устроена следующим образом. Все пользователи обитают на игровом сервере, который пользуется "услугами" Kubernetes и ряда серверов с архитектурой (LDAP / Mail / VPN / Samba)

Уже заметили подозрительный момент? =)

Один клиент не улыбается, он недоволен сервисом!

Среди всех игроков, появился нарушитель правил, который быстро получил бан на сервере. На этом он не остановился и начал регистрировать новые аккаунты, и вместе с сообщником пытался заходить на сервер и, используя читы, мешать другим игрокам наслаждаться игровым процессом. Все попытки были своевременно остановлены администрацией.

Первые опасности

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

Все началось поздно ночью: игроки начали жаловаться на проблемы с голосовым чатом и задержки в ответах сервера. По графикам сразу стала заметна аномалия по количеству входящего трафика.

Мы начали оживлять в памяти команды для работы c iptables, анализировать входящие запросы, гуглить вспомогательную информацию по борьбе с атаками и писать в саппорт хостинга. За этим занятием атака и кончилась, злоумышленники видимо "проверяли" свои возможности. Атака в 800 Mb/s - довольно слабая, да и участие принимало около 30 ботов. Тем не менее, игнорировать это нельзя, атака повлияла на игровой процесс в отрицательную сторону.

Весь следующий день был потрачен на подготовку скриптов, которые бы помогли оперативно вычислить IP-адреса ботов и побанить их через iptables. Вооружившись всем необходимым, мы начали ждать... Но кое-кто внес неожиданные корректировки в наш безупречный план... Наш хостинг Digital Ocean.

Следующей ночью началась очередная атака

Как же я удивился, когда в первые 3 минуты атаки я потерял доступ к серверу, всех игроков отключило, наступил тотальный блэкаут. Сервер упал? Что произошло?

Черная дыра в цифровом океане

Черная дыра в цифровом океане
Черная дыра в цифровом океане

Данное явление в Digital Ocean называется Blackhole.

Системы анализа трафика нашего хостера автоматически обнаружили DDOS атаку, и для того чтобы убрать паразитную нагрузку на гипервизор [[ВНИМАНИЕ]] отключили наш сервер от сети на 3 часа.

Продакшен сервер с онлайн игрой выключили из сети на 3 часа.

Я не могу описать свое состояние на тот момент, тот от кого я больше всего ждал поддержки, помог злоумышленнику совершить успешную атаку.

Забегая вперед, скажу, что никто не ответил ничего внятного на мои тикеты в саппорт хостинга, стандартные ответы что так и должно быть, мне не нужно переживать и сервер автоматически вернется в сеть через 3 часа и так далее. Естественно, как только сервер вернулся в сеть через 3 часа, злоумышленник вновь активировал DDOS и сервер провалился в blackhole снова.

Ночной переезд

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

Схема Anti-DDOS
Схема Anti-DDOS

В течение пары часов все необходимые ресурсы были перенесены на новый сервер (благо мы подозревали что может случиться беда и все скрипты и инструкции были в актуальном состоянии). Фаерволы настроены, компенсация для игроков заряжена, анонс в дискорд канале сделан, запуск!

Моментально срабатывает защита от DDOS от OVH, начинается фильтрация трафика, мне приходит письмо с нотификацией о том что сервер заботливо перемещен в защищенную инфраструктуру. И что же, запуская анализ трафика я вижу как боты появляются и тут же пропадают, сервер не испытывает никакой нагрузки, происходит спокойное пережидание, наступает облегчение, проблемы позади?

Куда там! Злоумышленники решили подлить денег в печку и сменить стратегию. Атаки с нескольких хостов крупными пакетами сменились на атаки поочередно с двух ботнетов по 5 000 хостов смешанными пакетами (крупными и мелкими).

Фильтр OVH начал пропускать все больше и больше ботов до сервера, но тут мы решили применить уже подготовленные ранее скрипты. Фаервол iptables начал с безумной скоростью наполняться тысячами правил с блокировкой IP-адресов ботов. CPU на сервере подпрыгнуло до заоблачных высот, игроки начали испытывать проблемы, не могли нормально общаться, снова появились задержки. Почему-же? Что снова не так?

Оказалось - я сам выстрелил себе в ногу. Тысячи DROP правил пробудили процесс ksoftirqd и он забил всё свободное CPU и начал мешать игровому серверу. Оказывается нельзя много правил держать в iptables!

iptables -I INPUT -s 1.2.3.4 -j DROP 
(никогда так не делайте если IP-адресов много)
 ksoftirqd
ksoftirqd

Данная проблема была решена с помощью утилиты ipset, которая специально и нужна, чтобы кормить тонны IP-адресов фаерволу в одно правило.

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

Так и стали мы жить-поживать. Наибольшую часть атаки фильтрует хостер, а с остатками разбираемся мы сами, в автоматизированном режиме.

Заключение

Хочу поделиться с вами теми выводами, которые я сделал по результатам этого приключения.

  • Во-первых, как бы странно это не звучало, большое спасибо злоумышленникам, за то что заставили нас столкнуться с проблемой DDOS атак на раннем этапе нашего проекта. Мы перестали переживать на этот счет и получили порцию нового опыта.

  • Если ваш стартап растет в конкурентной среде, позаботьтесь о правильном хостинге для своих ресурсов, даже такие гиганты как Digital Ocean могут слиться в самый неподходящий момент.

  • Скорее всего первая DDOS атака для вас будет неожиданной и достигнет цели. Когда сервер проседает по ресурсам, вы попросту можете потерять доступ по SSH и сделать ничего не сможете.

  • Если вас атакуют по доменному имени (боты резолвят IP-адрес), вы можете схитрить и подменить A-запись на другой IP-адрес, что временно (пока злоумышленник не заметит) может увести атаку в другую сторону :))

И небольшой рецепт, который сработал в моем случае:

  • Определите список всех IP-адресов, подключенных к атакуемому порту

  • Уберите из этого списка легальных клиентов (если это возможно)

  • ipset -N DDOS0201 iphash

  • xargs < bad-addresses.txt -n 1 ipset -A DDOS0201

  • iptables -A INPUT -m set --match-set DDOS0201 dst -j DROP

Всем спасибо за внимание!

Теги:
Хабы:
Всего голосов 33: ↑33 и ↓0+33
Комментарии27

Публикации

Истории

Работа

Ближайшие события