Защита Minecraft-Bedrock-сервера от DDoS-атак
Какие порты нужны Minecraft-Bedrock-серверу на самом деле, почему RakNet поверх UDP без защиты при установлении соединения особенно уязвим, как закрыть query и RCON, как ограничить интенсивность пакетов и с какого объёма атаки помогает только фильтрация в сети перед сервером.
Minecraft-Bedrock-сервер, который по вечерам на несколько минут пропадает из списка серверов и потом возвращается, редко имеет проблему с железом. Обычно идёт атака, причём ровно тогда, когда онлайн больше всего игроков. В этой статье разобрано, как защитить Minecraft-Bedrock-сервер от DDoS-атак: сначала то, что вы можете закрыть сами и без дополнительных расходов, затем то место, где эти меры заканчиваются физически, и в конце то, что должно происходить в сети перед сервером.
Все указания относятся к Bedrock Dedicated Server, PocketMine-MP или Nukkit под Debian 12, Debian 13, Ubuntu 22.04 LTS или Ubuntu 24.04 LTS. Команды написаны для root, если вы работаете под обычным пользователем, добавляйте перед каждой командой sudo. Тем, кто держит Java Edition, типичные для неё протокольные атаки описаны в статье Защита Minecraft от DDoS и защита от nullping. Саму установку Bedrock-сервера описывает статья Установка Minecraft-Bedrock-сервера с Nukkit.
Если атака идёт прямо сейчас: ничего не меняйте в конфигурации и не перезапускайте сервер. Сначала сохраните измерения (раздел «Соберите измерения до того, как рванёт»), после атаки их уже не вернуть.
Почему Minecraft-Bedrock-серверы так часто становятся целью DDoS-атак
Bedrock Edition — это та версия, которая работает на консолях, смартфонах, планшетах и в Windows, и у неё самая большая база игроков во всём Minecraft. Там, где стоит много серверов, возникает и самый большой стимул для атак: конкурирующие сети, забаненные игроки, внутренние конфликты. Атака при этом не стоит заказчику ни навыков, ни заметных денег, серверный booter продаётся по подписке.
Техническая причина лежит глубже. Bedrock-сервер говорит по UDP, а не по TCP, и он отвечает каждому, кто спрашивает, задолго до того, как состоялся хоть какой-то вход в игру. Именно эти два свойства делают порт 19132 UDP благодарной целью. Что такое DDoS-атака в принципе, объясняет статья Что такое DDoS-атака.
RakNet: UDP-протокол, который отвечает ещё до того, как кто-то вошёл в игру
RakNet — это сетевая UDP-библиотека, через которую Minecraft Bedrock Edition ведёт весь свой игровой трафик. В UDP нет установления соединения, которого сервер мог бы потребовать, и поэтому адреса отправителя легко подделать. Поверх этого RakNet строит собственный слой надёжности: порядковые номера, подтверждения (ACK) и отрицательные подтверждения (NAK), которыми клиент может заново запросить потерянные пакеты.
Установление соединения состоит из семи пакетов, четырёх от клиента и трёх от сервера:
Client -> Server Open Connection Request 1
Server -> Client Open Connection Reply 1
Client -> Server Open Connection Request 2
Server -> Client Open Connection Reply 2
Client -> Server Connection Request
Server -> Client Connection Request Accepted
Client -> Server New Incoming Connection
Только после этого клиент отправляет пакет входа со своими учётными данными Xbox Live. Вот решающая фраза для каждого, кто хочет защитить свой Bedrock-сервер: сервер обработал семь пакетов, потратил процессорное время и память и несколько раз ответил, прежде чем вообще узнал, кто к нему стучится. Значит, любая мера, которая опирается на вход в игру, срабатывает уже после того, как нагрузка возникла.
К этому добавляется вторая, ещё более ранняя точка входа. Чтобы сервер появился в списке серверов игрока с именем, версией и числом игроков, он отвечает на Unconnected Ping (ID пакета 0x01) пакетом Unconnected Pong (ID пакета 0x1C). Этот обмен происходит до самого установления соединения, не требует никаких доказательств, и в Bedrock Dedicated Server его нельзя отключить, не убрав сервер из всех списков серверов.
Unconnected Ping как вектор усиления: цифры
Атака с усилением (amplification) — это атака, при которой атакующий шлёт небольшие запросы с поддельным адресом отправителя на чужие серверы, чтобы их более крупные ответы приходили к жертве. Bedrock-сервер при этом не атакуют, его используют. Для Unconnected Ping расчёт выглядит так:
| Величина | Значение |
|---|---|
| Unconnected Ping (0x01) | 33 байта полезной нагрузки: 1 байт ID пакета, 8 байт метки времени, 16 байт Magic, 8 байт идентификатора клиента |
| Unconnected Pong (0x1C) | 35 байт основы плюс строка идентификации сервера |
| Строка идентификации сервера в стандартной конфигурации | около 96 байт, то есть ответ около 131 байта |
| Коэффициент усиления на уровне полезной нагрузки | около 4 |
| Верхний предел строки идентификации сервера | поле длины 16-битное, то есть технически до 65 535 байт |
| Содержимое ответа | издание, имя сервера, версия протокола, название версии, текущее и максимальное число игроков, идентификатор сервера, имя мира, игровой режим, оба порта |
| Ошибка усиления в RakNet 2024 года | запрос в 52 байта вызывал более 8000 ответных пакетов по 134 байта каждый |
| Коэффициент этой ошибки | теоретически до 22 000, в дикой природе измерено около 1000 |
Отсюда сразу следуют две вещи. Во-первых: длинное имя сервера увеличивает ответ, а вместе с ним и тот коэффициент усиления, который вы предоставляете чужим атакующим. Короткое имя — не косметика, а мера защиты. Во-вторых: коэффициент 4 в стандартной конфигурации достаточно мал, чтобы ваш сервер оставался неинтересен как отражатель, но достаточно велик, чтобы поток пингов нагружал вашу собственную исходящую линию вчетверо сильнее того, что приходит.
Ошибка усиления 2024 года показывает, насколько плохо может стать, когда злоупотребляют самим слоем надёжности. В использовавшейся тогда библиотеке RakNet пакет Connection Request Accepted был помечен как надёжный. Атакующий мог с поддельным адресом отправителя проиграть установление соединения до этой точки, а затем отправить единственное отрицательное подтверждение с диапазоном от 0 до 8191. Сервер после этого слал тысячи пакетов на поддельный адрес, и атакующему больше ничего делать не требовалось. Исправили это тем, что пакет перевели в разряд ненадёжных, что в Open Connection Reply 1 стали передавать cookie, которое настоящий клиент отражает обратно, и что ввели границы по пакетам: 120 пакетов на адрес источника и такт в 10 миллисекунд, 1000 пакетов всего на такт.
Bedrock Edition или Java Edition: что в защите от DDoS устроено иначе
Тот, кто уже защищал Java-сервер, переносит сюда почти всё неверно. У двух изданий общее название, но не сетевой протокол:
| Характеристика | Bedrock Edition | Java Edition |
|---|---|---|
| Транспорт | UDP через RakNet | TCP |
| Порт по умолчанию | 19132 UDP для IPv4, 19133 UDP для IPv6 | 25565 TCP |
| Установление соединения | семь пакетов RakNet внутри приложения, без криптографической проверки | трёхэтапное рукопожатие в ядре операционной системы |
| Адрес отправителя подделывается | да, UDP не требует установления соединения | нет, трёхэтапное рукопожатие этому мешает |
| Средство защиты в ядре | отсутствует, UDP не знает SYN-cookies | SYN-cookies, net.ipv4.tcp_syncookies |
| Аутентификация | Xbox Live, только в пакете входа после установления соединения RakNet | учётная запись Microsoft, только после установления TCP-соединения |
| SRV-запись в DNS | не поддерживается, игроки вводят адрес и порт по отдельности | поддерживается |
| Список серверов | запись лежит в клиенте каждого игрока, открытого мастер-сервера нет | разнообразные публичные сервисы списков |
Строка про SYN-cookies самая важная. В Java Edition ядро Linux отражает SYN-флуд так, что процесс Minecraft этого даже не замечает. В Bedrock Edition такой помощи нет: каждый отдельный UDP-пакет доходит до серверного процесса и разбирается уже там. У Bedrock-сервера нет встроенной защиты операционной системы против флуда на порт 19132, потому что в UDP её попросту не существует.
Строка про отсутствующую SRV-запись имеет практическое следствие, которое многих удивляет: в Bedrock Edition порт нельзя спрятать за DNS-записью. Игроки вводят адрес и порт вручную. Тот, кто переносит порт, должен сообщить новый порт каждому игроку.
Порты, о которых на самом деле идёт речь
Bedrock Dedicated Server привязывается ровно к двум портам, причём на обоих по UDP. В server.properties это выглядит так:
server-port=19132
server-portv6=19133
enable-lan-visibility=true
online-mode=true
allow-list=false
max-players=10
player-idle-timeout=30
max-threads=8
Это значения по умолчанию от Microsoft, их можно посмотреть в справочнике по Bedrock Dedicated Server. Вокруг этих двух портов лежат другие службы, которые работают в зависимости от серверного программного обеспечения:
| Порт | Протокол | Для чего | В открытую сеть? |
|---|---|---|---|
| 19132 | UDP | игровой трафик Bedrock через RakNet, IPv4 (server-port) |
да, это единственный обязательный порт |
| 19133 | UDP | игровой трафик Bedrock через RakNet, IPv6 (server-portv6) |
только если вы обслуживаете игроков по IPv6 |
| 19132 | UDP | GS4-query у PocketMine-MP и Nukkit, тот же порт, что и у игры (enable-query, по умолчанию включён) |
нет, отключить |
| 19132 | TCP | RCON у Nukkit: rcon.port без собственного значения откатывается на server-port (enable-rcon, по умолчанию выключен) |
нет, никогда |
| 19144 | TCP | отладчик скриптов Bedrock Dedicated Server (force-inbound-debug-port) |
нет |
| 25565 | TCP | сервер Java Edition за Geyser (remote.port) |
нет, привязать к 127.0.0.1 |
| 22 | TCP | SSH-доступ | ограничить фиксированными адресами |
Третья и четвёртая строки — самые частые ошибки на Bedrock-серверах, которых можно было бы избежать. У Nukkit и PocketMine-MP enable-query с завода включён, а у Nukkit случайно включённый RCON оказывается на 19132 TCP, то есть на том же номере порта, что и игра. Тот, кто смотрит только «19132 открыт, значит всё в порядке», это упускает.
Сюда же относится особенность официального Bedrock Dedicated Server: он не знает директивы server-ip. У PocketMine-MP и Nukkit она есть (server-ip, у PocketMine дополнительно server-ipv6), у официального сервера нет. Значит, он всегда слушает на всех адресах системы, и файрвол — ваша единственная возможность это ограничить.
Что вы можете сделать сами, прежде чем тратить деньги
Этот раздел самый длинный, и так задумано. Аккуратно настроенный Bedrock-сервер выдерживает небольшие и средние атаки собственными силами, независимо от того, у какого провайдера он стоит.
1. Инвентаризация: что вообще слушает на 19132?
Прежде чем написать хотя бы одно правило, посмотрите, что ваш сервер предлагает наружу. Не гадайте, а смотрите:
ss -lntup
ss -lnup sport = :19132
Интерес представляет колонка с локальным адресом. 0.0.0.0:19132 и [::]:19133 означают «доступен из всего интернета». Если рядом появляется TCP-запись с тем же номером порта, значит работает RCON. Взгляд атакующего даёт скан портов снаружи, для UDP с ключом -sU:
nmap -Pn -sU -p 19132,19133 ВАШ.IP.АДРЕС.СЕРВЕРА
nmap -Pn -p- --min-rate 1000 ВАШ.IP.АДРЕС.СЕРВЕРА
2. Оставьте открытым только 19132 UDP, всё остальное закройте
Для Bedrock-сервера наружу достаточно одного разрешения, двух при IPv6. В UFW это выглядит так, причём именно в таком порядке, чтобы не закрыть доступ самому себе:
ufw allow 22/tcp comment 'SSH'
ufw allow 19132/udp comment 'Bedrock IPv4'
ufw allow 19133/udp comment 'Bedrock IPv6'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose
Если игроков по IPv6 у вас нет, строку для 19133 опустите и поставьте дополнительно у PocketMine-MP enable-ipv6=false. Каждый порт, который вы не открываете, — это порт, который вам не придётся защищать. Полная инструкция вместе с запасным путём есть в статье Настройка файрвола UFW без потери доступа.
3. Отключите видимость в локальной сети, иначе 19132 останется открытым
Это ловушка, в которую попадает почти каждый, кто хочет перенести порт. Директива enable-lan-visibility с завода стоит на true и заставляет сервер отвечать на поисковые запросы в локальной сети. Microsoft прямо пишет, что из-за этого сервер дополнительно привязывается к стандартным портам 19132 и 19133, даже если у server-port и server-portv6 другие значения.
То есть тот, кто перенёс порт на 19140 и чувствует себя в безопасности, продолжает слушать на 19132. Поэтому для сервера в интернете в server.properties должно стоять:
enable-lan-visibility=false
После этого проверьте командой ss -lnup, что 19132 действительно исчез. Попутно та же настройка решает проблему, при которой два Bedrock-сервера на одном хосте отбирают порт друг у друга.
4. Отключите query и RCON
PocketMine-MP и Nukkit приносят с собой GS4-query, UDP-опрос сервера по образцу протокола UT3, и отвечают на эти опросы на том же порту 19132, на котором работает игра. Подробный ответ содержит имя сервера, версию, имя мира, состояние белого списка, адрес и порт, число игроков, имена всех подключённых игроков, а у PocketMine-MP при желании и полный список плагинов. Это удобно для страниц статуса и Discord-ботов, но подсказывает атакующему ровно то, когда атака окупится, и стоит процессорного времени на каждый опрос.
enable-query=off
enable-rcon=off
У PocketMine-MP значения записываются как false вместо off, а список плагинов отключается в pocketmine.yml через settings.query-plugins: false. Уточнение, которое читаешь редко: GS4-query у PocketMine-MP проверяет токен, посоленный адресом отправителя. Большой ответ поэтому нельзя отразить на поддельный адрес. Опрос всё равно стоит процессорного времени, а опубликованные данные помогают атакующему выбрать цель. Официальный Bedrock Dedicated Server не знает ни query, ни RCON, там этот пункт отпадает.
Если RCON вам действительно нужен, обязательно задайте у Nukkit rcon.port собственным значением и откройте его только для вашего собственного адреса. Иначе откат на server-port означает, что удалённое управление вашим сервером слушает на 19132 TCP, то есть на том же числе, которое вы и так везде записали как «открытое».
5. Требуйте аутентификацию Xbox Live
Аутентификация Xbox Live — это проверка того, есть ли у входящего игрока настоящая учётная запись, подписанная Microsoft. Во всех трёх серверных программах она с завода включена и должна такой и оставаться.
В Bedrock Dedicated Server директива называется online-mode, в PocketMine-MP и Nukkit она называется xbox-auth. В обоих случаях true и есть заводское состояние и правильное значение:
online-mode=true
xbox-auth=true
Microsoft формулирует при этом важное ограничение: клиентам, которые подключаются к серверу за пределами локальной сети, аутентификация Xbox Live нужна в любом случае, независимо от этой настройки. Доказательство передаётся в пакете входа как подписанная цепочка токенов, вместе с идентификатором Xbox (XUID) и отображаемым именем.
А теперь часть, которая избавляет от недоразумений: аутентификация Xbox Live защищает вашу игровую логику, а не ваш канал. Она происходит в пакете входа, то есть после полного установления соединения RakNet. Атакующий, который заливает ваш сервер пакетами, заходить в игру вовсе не собирается. Его пакеты будут отклонены, но прийти они всё равно успели, и в этом вся суть.
6. Allowlist и предел числа игроков, и чего они не умеют
Allowlist (прежде whitelist) — это список игроков, которым разрешено заходить. В Bedrock Dedicated Server вы включаете её через allow-list=true, записи стоят в allowlist.json с именем, XUID и полем ignoresPlayerLimit. В Nukkit и PocketMine-MP директива по-прежнему называется white-list.
allow-list=true
max-players=60
player-idle-timeout=15
Короткое время простоя через player-idle-timeout действенно против исчерпания слотов: игроки, которые только занимают место, вылетают через указанное число минут. Значение 0 означает, что никого и никогда не отключают за бездействие, и именно этим пользуется атакующий, который блокирует ваши места настоящими учётными записями.
И здесь действует граница из предыдущего раздела, а это вообще самый часто упускаемый момент: allowlist проверяется только тогда, когда обработан пакет входа. Она предотвращает входы в игру, а не пакеты.
7. Ограничьте интенсивность пакетов на каждый адрес источника
Против небольших атак и неаккуратных ботов помогает верхний предел на каждый адрес источника. Для UDP работают с hashlimit, а не с connlimit, ведь UDP не знает соединений:
iptables -I INPUT -p udp --dport 19132 -m hashlimit --hashlimit-name bedrock_udp --hashlimit-mode srcip --hashlimit-above 400/sec --hashlimit-burst 600 -j DROP
Правило отбрасывает UDP-пакеты, как только один и тот же адрес источника устойчиво шлёт больше 400 пакетов в секунду. Значение стартовое, а не истина в последней инстанции: полный сервер с 60 игроками и большой дальностью прорисовки создаёт заметно больше пакетов, чем пустой, а слишком жёсткая настройка выбрасывает ваших же игроков. Сначала померьте неделю в обычном режиме.
Заметно жёстче можно настроить Unconnected Ping, ведь настоящий клиент спрашивает состояние сервера, только пока открыт список серверов, и тогда раз в секунду. С помощью nftables можно попасть именно в этот один пакет, потому что ID пакета — это первый байт после UDP-заголовка:
nft add table inet bedrock
nft add chain inet bedrock prerouting '{ type filter hook prerouting priority -150 ; policy accept ; }'
nft add rule inet bedrock prerouting udp dport 19132 @th,64,8 0x01 limit rate over 500/second drop
Выражение @th,64,8 читает восемь бит начиная с 64-го бита транспортного заголовка, то есть первый байт полезной нагрузки UDP. Значение 0x01 — это ID пакета Unconnected Ping. Это же место можно использовать для наблюдения, прежде чем что-либо отбрасывать:
tcpdump -ni eth0 'udp dst port 19132 and udp[8] = 0x01' -c 200 -q
tcpdump -ni eth0 'udp src port 19132 and udp[8] = 0x1c' -c 200 -q
Первая строка считает входящие запросы состояния, вторая ваши собственные ответы. Если обе идут в тысячи в секунду, пока почти никто не играет, вы видите поток пингов, а не своих игроков.
Два замечания о долговечности. Просто добавленные правила iptables после перезагрузки исчезают, в Debian и Ubuntu их сохраняют так:
apt-get install -y iptables-persistent
netfilter-persistent save
А при работе с UFW такие правила помещают в /etc/ufw/before.rules, иначе они пропадут при следующем ufw reload.
8. Разгрузите отслеживание соединений в ядре
Узкое место, которое при UDP-играх бьёт гораздо раньше, чем при TCP: ядро заводит на каждую пару UDP-пакетов запись в отслеживании соединений. При потоке с поддельными адресами отправителя каждый пакет означает новый адрес источника и тем самым новую запись. Когда таблица заполняется, сервер отбрасывает и легитимные пакеты, а в логе появляется «nf_conntrack: table full, dropping packet».
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
Если счётчик постоянно держится у верхнего предела, игровой трафик можно вывести из-под отслеживания. Это действенно, но не бесследно, поэтому в обе стороны и с последующей проверкой подключения:
iptables -t raw -I PREROUTING -p udp --dport 19132 -j NOTRACK
iptables -t raw -I OUTPUT -p udp --sport 19132 -j NOTRACK
После этого правила, опирающиеся на состояние, для этого трафика больше не работают. Значит, ваше разрешение для 19132 UDP должно быть настоящим разрешением порта и не может полагаться на состояние ESTABLISHED. После установки проверьте командой conntrack -L | grep 19132, что новые записи больше не появляются, и один раз подключитесь игрой, прежде чем сохранять правила навсегда.
9. Правильная эксплуатация Geyser и Floodgate
Geyser — это мост, который позволяет Bedrock-клиентам играть на сервере Java Edition: он принимает Bedrock-соединения на 19132 UDP, переводит протокол и с другой стороны общается с Java-сервером на 25565 TCP. Floodgate — это дополнение, которое разрешает таким Bedrock-игрокам заходить без учётной записи Java. Для защиты от DDoS отсюда следуют три вещи.
Во-первых: держите Geyser в актуальном состоянии. Именно этот мост дважды становился причиной задокументированных атак. В марте 2024 года описанную выше ошибку усиления в библиотеке RakNet эксплуатировали массово, исправлено начиная со сборки 478. В июле 2025 года последовал второй случай: повторно отправленный пакет подтверждения пакетов ресурсов создавал несколько сессий на одного игрока, а отключённые клиенты могли и дальше слать пакеты, потому что сетевой канал не закрывался. Исправлено начиная со сборки 897. Оба случая проект опубликовал сам, вместе с хронологией.
Во-вторых: Java-серверу не место в открытой сети. В конфигурации Geyser remote.address указывает на auto или 127.0.0.1, а remote.port на 25565. Привяжите Java-сервер соответственно локально и не открывайте 25565 TCP наружу. Иначе у вас две поверхности атаки вместо одной, и вторая как раз та, для которой вы никогда не придумывали правил.
В-третьих: файл key.pem — это секрет. Это ключ, которым Floodgate пропускает Java-аутентификацию для Bedrock-аккаунтов. Тот, кто положит его в публичный репозиторий, скопирует в тикет поддержки или покажет на скриншоте, подарит вход на свой сервер. Проект предупреждает об этом прямо.
10. Соберите измерения до того, как рванёт
Самый важный шаг — тот, который почти никто не делает заранее: собрать базу для сравнения, пока всё работает нормально. Без нормального значения вы после инцидента не скажете, много ли это, 40 000 пакетов в секунду, или это просто вечер субботы. С apt-get install -y vnstat sysstat conntrack измерение идёт постоянно в фоне.
sar -n DEV 1 10
ip -s link show eth0
ss -lunp sport = :19132
nstat -az | grep -E 'UdpInDatagrams|UdpNoPorts|UdpInErrors|UdpRcvbufErrors'
dmesg -T | tail -50
Три из этих значений на Bedrock-сервере особенно показательны. Постоянно отличное от нуля Recv-Q на UDP-сокете порта 19132 означает, что серверный процесс больше не успевает забирать приходящие пакеты. UdpRcvbufErrors считает ровно те пакеты, которые из-за этого были отброшены, и служит самым твёрдым доказательством того, что узкое место не канал, а процесс. UdpNoPorts растёт, когда кто-то обстреливает порты, на которых вообще ничего не слушает, а это типичная картина при широком скане портов перед самой атакой.
Для tcpdump правило одно: всегда ограничивайте объём через -c, ведь захват трафика под полной нагрузкой дополнительно нагружает и без того перегруженный сервер. Как разобрать полученные значения, описано в статье Как определить DDoS-атаку.
Где эти меры заканчиваются: полоса и интенсивность пакетов
Теперь та часть, которую не решит ни один конфигурационный файл. Все описанные выше меры работают на вашем сервере, то есть в конце канала. Правило файрвола принимает решение о пакете, который уже прошёл по кабелю. Вы можете его отбросить, но не можете сделать неотправленным.
| Показатель | Значение |
|---|---|
| Обычное подключение игрового сервера | 1 Гбит/с, это 125 мегабайт в секунду |
| Сколько пакетов по 64 байта помещается в 1 Гбит/с | около 1,49 миллиона в секунду |
| Сколько из них обрабатывает обычное серверное ядро | несколько сотен тысяч пакетов в секунду |
| Типичные атаки на Minecraft-проекты | от 5 до 50 Гбит/с |
| Крупнейшая публично задокументированная атака на сеть Minecraft | 2,5 Тбит/с в третьем квартале 2022 года, из ботнета Mirai, смешанные UDP- и TCP-потоки |
| Отфильтровано в реальном времени на серверах KernelHost | более 473,4 Гбит/с при более чем 41,5 миллиона пакетов в секунду на голосовой сервер |
| Также отфильтровано | UDP-flood мощностью более 112,2 Гбит/с на игровой сервер |
Давайте посчитаем. Ваш канал заполнен, как только кто-то отправит больше 125 мегабайт в секунду. Атака от 5 до 50 Гбит/с в пять-пятьдесят раз превышает этот объём. Насколько хорошо написано ваше правило hashlimit за этим каналом, роли уже не играет, ведь пакеты ваших игроков не доходят ещё раньше.
Вторая величина — интенсивность пакетов, и на Bedrock-сервере она бьёт почти всегда первой. Весь игровой трафик состоит из множества маленьких UDP-пакетов, а именно в этой дисциплине атакующему дешевле всего. Атака, которая не заполняет ваш канал даже на треть, всё равно способна положить сервер, потому что процессорное время уходит на разбор и отбрасывание. Владельцы описывают это словами «загрузка ведь была совсем не высокой, а всех всё равно выбросило». В самой игре то же самое проявляется как лаг-спайки, резиновый эффект и обрывы соединения прямо посреди стройки.
Локальной настройки против этого не существует. Объёмные атаки должны заканчиваться в сети перед сервером.
Что KernelHost противопоставляет DDoS-атакам на Bedrock-серверы
Постоянная защита, которая включена в каждый сервер
Защита от DDoS в KernelHost построена в два уровня и активна постоянно, вам не нужно ничего включать, заказывать или настраивать:
- Уровень 1: 17 Тбит/с ёмкости mitigation в глобальной scrubbing-сети. Объёмные атаки вычищаются близко к источнику, ещё до того как они дойдут до дата-центра.
- Уровень 2: фильтрация Arbor в реальном времени на 3,2 Тбит/с во Франкфурте-на-Майне. Непосредственно перед сервером распознаются и отбрасываются схемы, характерные для конкретных протоколов, пакет за пакетом. К ним относятся и UDP-схемы на 19132, которые не показывают поведения RakNet.
Решают два свойства. Защита работает постоянно и не должна сначала отреагировать на атаку, поэтому нет тех первых минут, когда сервер недоступен. И null-routing не применяется: ваш IP-адрес остаётся в сети, отбрасываются только вредоносные пакеты. Тот, кто убирает IP-адрес из сети, добивается для вас того же результата, что и атакующий. Площадка находится во Франкфурте-на-Майне. Какие игры и протоколы покрыты, перечисляет статья Защита игровых серверов от DDoS в реальном времени.
Advanced DDoS Protection для проектов под постоянным обстрелом
Некоторые проекты атакуют не время от времени, а прицельно и неделями. Для них есть Advanced DDoS Protection от 50,00 € в месяц, по модели PrePaid и без минимального срока. Разница не в большей ёмкости, а в контроле:
- Выделенный защищённый IP-адрес из франкфуртского ядра сети, на который ваш сервер переводится внутри нашей сети. С вашей стороны ничего перестраивать не нужно.
- Самостоятельно управляемые правила защиты по портам и протоколам в личном кабинете: вы задаёте, что разрешено на 19132 UDP, что на 19133 UDP и что на другом порту, если вы перенесли свой сервер.
- Изменения вступают в силу в реальном времени, поэтому подстраивать их можно прямо во время идущей атаки, а не ждать окна обслуживания.
- Профиль защиты под конкретную игру. Для Minecraft есть готовые профили, как и для модифицированных и собственных приложений на любых портах TCP или UDP, то есть и для Nukkit, PocketMine-MP или экземпляра Geyser на самостоятельно выбранном порту.
Сравнение двух уровней
| Характеристика | Включённая постоянная защита от DDoS | Advanced DDoS Protection |
|---|---|---|
| Цена | входит в каждый серверный тариф без доплаты | от 50,00 € в месяц, PrePaid |
| Ёмкость фильтрации | 17 Тбит/с глобального scrubbing плюс фильтрация Arbor в реальном времени на 3,2 Тбит/с во Франкфурте-на-Майне | та же двухуровневая фильтрация |
| IP-адрес | IP-адрес вашего сервера | дополнительный выделенный защищённый IP |
| Набор правил | автоматические профили, настраивать ничего не нужно | собственные правила по портам и протоколам в личном кабинете |
| Изменения | применяются автоматически | вступают в силу в реальном времени, в том числе во время атаки |
| Игровой профиль | оптимизированные профили для распространённых игр, включая Minecraft | профиль под конкретную игру, в том числе для модифицированных приложений и нестандартных портов |
| Null-routing | нет | нет |
| Срок | привязан к серверному тарифу | PrePaid, без минимального срока, без срока расторжения, без платы за подключение |
Большинству Bedrock-проектов хватает включённой постоянной защиты вместе с аккуратной настройкой сервера. Advanced DDoS Protection — это ответ на ситуацию, когда кто-то воспринимает происходящее лично. Тот, чей сервер сейчас стоит в другом месте, решит проблему вернее всего переездом: фильтрация работает в сети перед сервером, а эта сеть должна принадлежать нам.
Частые ошибки и что с ними делать
«Я сменил порт на 19140, а 19132 всё равно открыт»: это enable-lan-visibility=true. Bedrock Dedicated Server тогда дополнительно привязывается к 19132 и 19133, что бы ни стояло в server-port. Поставить на false, перезапустить сервер, проверить командой ss -lnup.
«Я отредактировал allowlist.json и сам больше не могу зайти»: частых причин две. В каталоге ещё лежит старый whitelist.json, который сервер читает вместо нового, либо запись XUID отсутствует или неверна. Одного имени при включённой аутентификации Xbox Live надёжно не хватает.
«Мой хостер заблокировал мой сервер, хотя атаковали меня»: проверьте, не отправлял ли ваш сервер пакеты сам. Именно это происходило при ошибке усиления RakNet в 2024 году: затронутые серверы слали тысячи пакетов на чужие адреса, и в жалобах на злоупотребление порт 19132 стоял как источник. Командой tcpdump -ni eth0 'udp src port 19132' -c 200 -q вы увидите, куда отвечает ваш сервер. Актуальная сборка устраняет причину.
«Мои правила iptables не срабатывают»: частых причин три. Правила стоят позади цепочек UFW, и дело до них не доходит. Либо они пропали после последней перезагрузки (тогда помогут netfilter-persistent save или запись в /etc/ufw/before.rules). Либо атака объёмная, и правило работает корректно, только канал уже забит. Проверьте командой iptables -L INPUT -n -v, растут ли счётчики совпадений. Если они остаются на нуле, трафик до правила не доходит.
«Сервер стоит в списке, но никто не может зайти»: если запись показывает имя и число игроков, значит Unconnected Pong работает и порт в принципе доступен. Если вход всё равно не проходит, дело обычно в авторизации Xbox Live или в allowlist. Если же не заходят только игроки по IPv6, не хватает разрешения для 19133 UDP.
«Сервер работает, но у всех лаг-спайки»: чаще это плагин, а не атака. Сначала посмотрите, растёт ли Recv-Q на UDP-сокете и увеличивается ли UdpRcvbufErrors. Если оба спокойны, а sar -n DEV 1 10 не показывает ничего необычного, это была не DDoS-атака, а сам серверный процесс. В Bedrock Dedicated Server дальше помогают сторожевые таймеры скриптов, пороги которых стоят в server.properties под script-watchdog-hang-threshold и script-watchdog-slow-threshold.
«Мой прежний провайдер заблокировал мой IP-адрес»: это и есть null-routing. Так провайдер защищает собственную сеть, а для вас результат ничем не отличается от успешной атаки, обычно ещё на несколько часов после неё. Если сомневаетесь, спросите напрямую: трафик фильтруют или адрес уводят в null-routing. Ответ определяет вашу доступность сильнее, чем любые характеристики железа.
«В tcpdump я не вижу ничего подозрительного»: если трафик отфильтрован ещё в сети перед сервером, то до самого сервера, как и ожидается, ничего не доходит. При работающей фильтрации это нормальная картина. Верно и обратное: при насыщенном канале до вас может не дойти даже та SSH-сессия, из которой вы собирались снимать измерения. Тогда используйте VNC-консоль в личном кабинете, она работает независимо от сети гостевой системы.
Коротко о главном
- Minecraft-Bedrock-серверу нужен ровно один открытый порт наружу: 19132 UDP, плюс 19133 UDP только для игроков по IPv6. Query, RCON, отладчик скриптов на 19144 TCP и Java-сервер за Geyser на 25565 TCP в открытую сеть не относятся.
- Тот, кто переносит порт, должен поставить
enable-lan-visibility=false, иначе Bedrock Dedicated Server продолжит дополнительно привязываться к 19132 и 19133. - Аутентификация Xbox Live и allowlist срабатывают только в пакете входа, то есть после полного установления соединения RakNet. Они защищают вашу игровую логику и ваши места, а не ваш канал.
- Unconnected Ping запрашивается 33 байтами, а отвечается примерно 131 байтом, то есть коэффициент усиления составляет около четырёх. Короткое имя сервера держит этот коэффициент небольшим.
- При UDP помогает
hashlimit, а неconnlimit, и при поддельных адресах отправителя первым заполняется отслеживание соединений в ядре. И то и другое стоит померить до первой атаки. - Примерно с 1 Гбит/с ваш канал заполнен, а при пакетах по 64 байта в него помещается около 1,49 миллиона пакетов в секунду. Выше этого решает исключительно фильтрация в сети перед сервером.
- В KernelHost двухуровневая постоянная защита входит в каждый серверный тариф, активна с момента развёртывания и работает без null-routing. Advanced DDoS Protection дополняет её выделенным защищённым IP-адресом и самостоятельно управляемыми правилами по портам.
Если ваш проект уже работает в KernelHost, фильтрация активна, и делать для этого ничего не нужно. Если вы всё же замечаете странности, откройте тикет в поддержку, чтобы правила фильтрации подстроили под ваш IP-адрес. Во время идущей атаки с нами дополнительно можно связаться через экстренный чат WhatsApp по номеру +43 650 8209883.
Частые вопросы
Мой Minecraft-Bedrock-сервер сейчас офлайн. Как распознать DDoS-атаку?
Какие порты нужно оставить открытыми для Minecraft-Bedrock-сервера?
Почему Bedrock Edition уязвимее для DDoS-атак, чем Java Edition?
Что такое Unconnected Ping и почему он служит вектором усиления?
Защищает ли аутентификация Xbox Live от DDoS-атак?
Помогает ли allowlist против DDoS-атаки на мой Bedrock-сервер?
Я сменил порт, а 19132 всё равно открыт. В чём причина?
Что нужно учитывать при работе с Geyser и Floodgate?
С какого объёма атаки мой сервер уже не справится сам?
Уйдёт ли мой Bedrock-сервер в KernelHost в офлайн во время атаки?
Стоит ли защита от DDoS в KernelHost отдельных денег и когда нужна Advanced DDoS Protection?
2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

