Как работает DDoS-защита: объясняем простыми словами

Как работает DDoS-защита: объясняем простыми словами

Вы запускаете Minecraft-сервер, набираете аудиторию, всё идёт хорошо. А потом однажды утром сервер просто перестаёт отвечать. Игроки жалуются на таймауты. Консоль зависла. Хостинг пишет про "аномальный трафик". Вас атакуют.

Первый вопрос, который возникает: "Как от этого защититься?" Второй: "А как эта защита вообще работает?"

На второй вопрос мы сегодня и ответим. Без сложной терминологии, с аналогиями из реальной жизни и конкретными примерами.

Что происходит во время DDoS-атаки

Для начала разберёмся с самой атакой. DDoS - это когда тысячи (или миллионы) источников одновременно отправляют трафик на ваш сервер. Цель простая: перегрузить канал, процессор или память так, чтобы настоящие игроки не могли подключиться.

Представьте ресторан на 50 мест. Обычно приходят 30-40 гостей, всем хватает столиков. А теперь представьте, что кто-то нанял 5000 человек, чтобы они одновременно пришли ко входу и заняли всё пространство. Настоящие гости физически не могут войти. Ресторан работает, повара готовят, но внутрь никто не попадёт.

DDoS работает точно так же. Ваш сервер жив, Minecraft запущен, но канал связи забит мусорным трафиком.

Шаг первый: DNS-редирект - прячем настоящий адрес

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

Как это работает? Вы меняете DNS-записи вашего домена (например, play.myserver.com) так, чтобы они указывали не на ваш сервер, а на сеть защиты. Для Minecraft это обычно SRV-запись, которая направляет игроков на защитный узел.

Аналогия: вместо того чтобы давать людям свой домашний адрес, вы даёте адрес охранного агентства. Все письма сначала приходят туда, их проверяют, и только настоящую корреспонденцию пересылают вам домой.

Игрок вводит: play.myserver.com
DNS отвечает: "иди на 104.167.24.XX" (адрес защиты)
Игрок подключается к защитному узлу
Защита проверяет и пересылает на реальный сервер

Важный момент: если кто-то уже знает ваш настоящий IP - DNS-редирект сам по себе не поможет. Поэтому после подключения защиты часто рекомендуют сменить IP сервера.

Шаг второй: скрабинг - отделяем чистый трафик от мусора

Когда весь трафик идёт через защитный узел, начинается самое интересное - скрабинг (от английского scrubbing - "очистка").

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

На практике это выглядит так:

Входящий трафик: 50 Gbps
  |
  [Фильтр L3/L4] - отсекает 95% мусора
  |
  Промежуточный трафик: 2.5 Gbps
  |
  [Фильтр L7] - проверяет протокол
  |
  Чистый трафик: 200 Mbps -> ваш сервер

Из 50 гигабит в секунду атаки до вашего сервера доходит только 200 мегабит легитимного трафика. Остальное отброшено на разных уровнях фильтрации.

L3/L4 фильтрация: первая линия обороны

L3 и L4 - это уровни сетевой модели. L3 (сетевой уровень) - это IP-адреса. L4 (транспортный уровень) - это TCP/UDP порты и соединения.

Фильтрация на этих уровнях - самая быстрая. Она работает с заголовками пакетов и не заглядывает внутрь. Что здесь проверяется:

Ограничение по скорости (rate limiting). Один IP-адрес не может отправлять 10 000 пакетов в секунду для игры в Minecraft. Если отправляет - значит, это не игрок. Блокируем.

Валидация протокола. Minecraft работает по TCP. Если на порт 25565 приходят UDP-пакеты - это точно не игрок. Отбрасываем.

Проверка TCP-хендшейка. Нормальное TCP-соединение начинается с трёхстороннего рукопожатия: SYN - SYN-ACK - ACK. Многие атаки (SYN flood) отправляют только SYN-пакеты и не завершают рукопожатие. Фильтр использует SYN cookies или SYN proxy, чтобы проверить: действительно ли клиент собирается установить соединение?

Чёрные списки. Известные ботнет-адреса, дата-центры, из которых никогда не подключаются настоящие игроки - всё это блокируется на входе.

Аналогия: это как охранник на входе в клуб, который проверяет, есть ли у вас билет (TCP handshake), не в чёрном списке ли вы, и не пытаетесь ли вы пройти через стену вместо двери (неправильный протокол).

L7 фильтрация: глубокая проверка

L7 - прикладной уровень. Здесь фильтр уже заглядывает внутрь пакетов и проверяет, выглядит ли трафик как настоящая игра в Minecraft.

Minecraft-клиент общается с сервером по определённому протоколу. При подключении он отправляет handshake-пакет с версией протокола, адресом сервера и портом. Потом идёт login-запрос с именем игрока. Всё это имеет строгий формат.

Что проверяет L7-фильтр:

Формат пакетов. Minecraft-пакеты имеют определённую структуру: длина, ID пакета, данные. Если пакет не соответствует формату - он поддельный.

Порядок пакетов. Настоящий клиент сначала отправляет handshake, потом login start, потом ждёт ответа сервера. Бот может отправлять пакеты в неправильном порядке или слишком быстро.

Версия протокола. Если ваш сервер на 1.21, а пакет заявляет версию 1.7 с подозрительной структурой - это повод для проверки.

Поведенческий анализ. Настоящий игрок после подключения начинает двигаться, отправляет пакеты с определённой частотой. Бот может подключиться и молчать, или наоборот - спамить пакетами.

Пакет от настоящего игрока:
[длина: 16][ID: 0x00][версия: 769][адрес: play.myserver.com][порт: 25565][состояние: 2]
-> Формат корректный, пропускаем

Пакет от бота:
[мусорные байты][случайные данные]
-> Формат невалидный, отбрасываем

Challenge-response: проверяем, что это человек

Некоторые системы защиты идут дальше и активно проверяют подключающихся. Это называется challenge-response - система бросает "вызов", и клиент должен правильно ответить.

Для Minecraft это может работать так:

Проверка хендшейка. Защитный прокси притворяется сервером и проводит TCP-рукопожатие самостоятельно. Если клиент не отвечает правильно - соединение не передаётся на реальный сервер.

Верификация пинга. Перед допуском на сервер система может проверить, умеет ли клиент правильно обрабатывать status-запросы Minecraft-протокола. Настоящий клиент умеет, примитивный бот - нет.

CAPTCHA. В веб-контексте (панель управления, карта сервера) это привычная капча. Для самого Minecraft это может быть промежуточный этап: игрока подключают к лобби, где нужно выполнить простое действие, прежде чем попасть на основной сервер.

Архитектура реверс-прокси для игровых серверов

Теперь поговорим о том, как всё это собрано вместе. Основной архитектурный подход - реверс-прокси (reverse proxy).

Что это такое? Реверс-прокси - это сервер, который стоит между интернетом и вашим реальным сервером. Все подключения идут через него. Для игроков он прозрачен - они даже не знают, что подключаются не напрямую.

Игрок -> [Интернет] -> [Защитный прокси] -> [Ваш сервер]
                           |
                           +-- Фильтрация
                           +-- Проверка протокола
                           +-- Rate limiting

Для Minecraft реверс-прокси работает на уровне TCP. Он принимает соединение от игрока, проверяет первые пакеты, и если всё в порядке - открывает соединение к реальному серверу и начинает передавать данные в обе стороны.

Ключевое преимущество: ваш реальный сервер вообще не видит атакующий трафик. Он работает спокойно, обрабатывая только проверенные соединения. Нагрузка от атаки ложится на защитный узел, который специально спроектирован для этого.

GRE-туннели: когда нужен свой IP

Иногда реверс-прокси не подходит. Например, у вас сложная сетевая конфигурация, несколько серверов за одним IP, или вам нужен полный контроль над трафиком. Тогда используют GRE-туннели.

GRE (Generic Routing Encapsulation) - это "туннель" между защитным узлом и вашим сервером. Он работает так: защитный узел принимает весь трафик, фильтрует его, а потом заворачивает чистый трафик в GRE-пакеты и отправляет вам. Ваш сервер разворачивает GRE-пакеты и видит оригинальные IP-адреса игроков.

Аналогия: представьте бронированный конвой. Письма (пакеты) складывают в защищённый контейнер (GRE-инкапсуляция), везут по безопасному маршруту (туннель), а на месте достают и раздают получателям.

Интернет -> [Защитный узел] --(GRE-туннель)--> [Ваш сервер]
               |                                      |
           Фильтрация                          Деинкапсуляция
           на месте                            + обработка

Плюс GRE-туннеля в том, что ваш сервер получает реальные IP-адреса игроков (удобно для банов и геолокации). Минус - дополнительные накладные расходы и необходимость настройки на обеих сторонах.

Anycast: один адрес - много серверов

Крупные защитные сети используют технологию Anycast. Идея простая: один и тот же IP-адрес объявляется из нескольких точек мира через BGP (протокол маршрутизации интернета).

Когда игрок из Германии подключается к вашему серверу, его трафик автоматически попадает на ближайший защитный узел - например, во Франкфурте. Игрок из Бразилии попадёт на узел в Сан-Паулу. А атакующий трафик из Азии пойдёт на узел в Токио.

Игрок (Берлин) --------> Узел Франкфурт -----> Ваш сервер
Игрок (Москва) --------> Узел Амстердам  -----> Ваш сервер
Атака (Шанхай) --------> Узел Токио [BLOCKED]
Атака (разные IP) -----> Распределяется по всем узлам

Это даёт два преимущества:

  1. Атака распределяется. Вместо того чтобы 100 Gbps били в одну точку, они разделяются между десятками узлов. Каждый узел получает только часть атаки, с которой справляется легко.

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

Как работает MineGuard: общая схема

Теперь посмотрим, как всё это работает в MineGuard конкретно.

Когда вы подключаете сервер к MineGuard, происходит следующее:

  1. Настройка DNS. Ваш домен начинает указывать на защитные узлы MineGuard вместо реального сервера.

  2. Фильтрация на входе. Весь входящий трафик проходит через систему фильтрации, которая работает на нескольких уровнях одновременно.

  3. Проксирование. Проверенный трафик передаётся на ваш реальный сервер. Для игроков процесс полностью прозрачен - они подключаются как обычно.

  4. Мониторинг. Система постоянно анализирует паттерны трафика и подстраивает фильтры в реальном времени.

Архитектурно защитный узел MineGuard включает несколько компонентов:

  • Пакетный фильтр на уровне ядра (XDP/eBPF) - отсекает самый грубый мусор на максимальной скорости, ещё до того, как пакет попадёт в сетевой стек
  • TCP-прокси - проводит хендшейк и проверяет валидность TCP-соединений
  • Протокольный анализатор - разбирает Minecraft-пакеты и проверяет их структуру
  • Поведенческий движок - анализирует паттерны подключений и выявляет ботнеты

Что происходит, когда начинается атака: пошагово

Давайте пройдём по конкретному сценарию. Ваш сервер работает нормально, онлайн 100 игроков. И вдруг начинается атака.

Секунда 0-1. Атакующий запускает ботнет. 50 000 ботов начинают отправлять трафик на IP вашего сервера (который на самом деле - IP защитного узла MineGuard). Входящий трафик подскакивает с 200 Mbps до 40 Gbps.

Секунда 1-2. Пакетный фильтр (XDP) видит резкий рост трафика. Пакеты с невалидной структурой, UDP-флуд на TCP-порт, пакеты из известных ботнет-сетей - всё это отбрасывается моментально. 90% атаки отсечено за секунду.

Секунда 2-5. Более "умные" боты, которые пытаются установить TCP-соединение, проходят через TCP-прокси. SYN cookies отсеивают тех, кто не завершает хендшейк. Из оставшихся 4 Gbps трафика проходят только реальные TCP-соединения - около 500 Mbps.

Секунда 5-10. Боты, которые научились делать TCP-хендшейк, сталкиваются с проверкой Minecraft-протокола. Они должны отправить правильный handshake-пакет, правильный login-пакет, ответить на запросы сервера. Большинство ботов этого не умеют. Остаётся 50 Mbps, и это уже почти целиком настоящие игроки.

Секунда 10+. Поведенческий анализ добивает последних ботов. Если бот подключился, но ведёт себя нетипично (не двигается, не отправляет нужные пакеты, подключается 100 раз в минуту с одного IP) - он тоже отсекается.

Результат. Атакующий тратит деньги на ботнет, генерирует 40 Gbps трафика, а на вашем сервере ничего не происходит. 100 игроков продолжают играть, может быть с микроскопическим повышением пинга на пару миллисекунд. Скорее всего, они даже не заметят, что была атака.

Почему нельзя просто заблокировать все подозрительные IP

Распространённое заблуждение: "давайте просто забаним все плохие IP-адреса". Проблема в том, что:

  1. Ботнеты используют реальные устройства. Это заражённые компьютеры и роутеры обычных людей. Их IP-адреса - это обычные домашние провайдеры. Если заблокировать всю подсеть, пострадают настоящие игроки из того же города.

  2. IP-адреса меняются. Ботнет из 50 000 машин может использовать сотни тысяч разных IP-адресов. Заблокируете одни - появятся другие.

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

Поэтому эффективная защита работает не только со списками IP, но и анализирует поведение трафика в реальном времени.

Ограничения DDoS-защиты: о чём стоит знать

Ни одна защита не идеальна. Вот честный список ограничений:

Добавляет задержку. Прокси между игроком и сервером - это дополнительный хоп. Обычно это 1-5 мс, но для некоторых игроков это важно.

Не защищает от атак изнутри. Если атакующий уже на вашем сервере (эксплойт в плагине, взломанная панель) - внешняя DDoS-защита не поможет.

Утечка IP. Если ваш реальный IP стал известен (забыли его спрятать, светится в логах, кто-то нашёл через Shodan) - атакующий может бить напрямую, минуя защиту.

Ложные срабатывания. Агрессивные фильтры могут иногда блокировать легитимных игроков. Хорошая защита позволяет настраивать чувствительность.

Итоги

DDoS-защита - это не магическая кнопка "сделать безопасно". Это многоуровневая система, которая:

  • Скрывает реальный IP вашего сервера
  • Принимает весь трафик на себя через DNS-редирект
  • Фильтрует мусор на уровнях L3/L4 (IP-адреса, протоколы, rate limiting)
  • Проверяет Minecraft-протокол на уровне L7
  • Использует challenge-response для проверки клиентов
  • Передаёт только чистый трафик на ваш сервер через прокси или GRE-туннель
  • Использует anycast для распределения нагрузки

Каждый уровень отсекает свою долю мусора, и до вашего сервера добирается только настоящий игровой трафик. Именно так работает любая серьёзная DDoS-защита - и MineGuard в том числе.


Protégez votre serveur contre les attaques DDoS

Protection gratuite avec configuration en 5 minutes. 1 To de bande passante inclus.

Essayer gratuitement


Articles connexes