Бот-атаки на Minecraft сервер: как распознать и остановить

Бот-атаки на Minecraft сервер: как распознать и остановить

DDoS и бот-атаки - это не одно и то же

Когда сервер начинает лагать или падать, первая мысль - "нас ддосят". Но в реальности большинство атак на Minecraft серверы это именно бот-атаки, а не классический DDoS. Понимание разницы критически важно, потому что методы защиты совершенно разные.

DDoS (L3/L4) - это когда на ваш сервер льют мусорный трафик на сетевом уровне. UDP flood, SYN flood, amplification. Цель - забить канал или исчерпать ресурсы сервера так, чтобы легитимные пакеты просто не доходили. Против этого плагины бессильны, тут нужна фильтрация на уровне сети.

Бот-атака (L7) - это когда к вашему серверу подключаются сотни или тысячи фейковых игроков. Они проходят через обычный Minecraft протокол, отправляют валидные пакеты. С точки зрения сети всё выглядит легитимно. Нагрузка ложится на сам сервер - CPU, RAM, обработка подключений.

Часто эти два типа комбинируют. Сначала ботами нагружают сервер, а потом добивают DDoS-ом, пока админ разбирается с ботами.

Типы бот-атак, с которыми вы столкнётесь

Join flood (массовое подключение)

Самый распространённый тип. Боты просто подключаются к серверу один за другим. Не пишут в чат, не двигаются, просто заходят. Если у вас стоит авторизация через плагин типа AuthMe, они висят на спавне и жрут слоты.

В логах это выглядит так:

[09:14:01] [Server thread/INFO]: Bot_a83kd[/185.22.xx.xx:49312] logged in
[09:14:01] [Server thread/INFO]: Bot_k2md9[/185.22.xx.xx:49313] logged in
[09:14:01] [Server thread/INFO]: Bot_pq92x[/185.22.xx.xx:49314] logged in
[09:14:02] [Server thread/INFO]: Bot_zm10v[/103.41.xx.xx:52001] logged in

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

Null/Invalid ботки

Эти даже не пытаются полноценно зайти. Они отправляют некорректные или незавершённые пакеты рукопожатия. Цель - нагрузить обработчик подключений. Сервер тратит ресурсы на создание сессии, а бот сразу отключается или зависает.

В логах видно:

[09:14:01] [Server thread/WARN]: Failed to handle packet for /185.22.xx.xx:49312
[09:14:01] [Server thread/INFO]: com.mojang.authlib.GameProfile@xxxx lost connection: Disconnected

Много "потерянных соединений" без нормального логина - верный признак null-ботов.

Chat spam / Command spam

Боты заходят и начинают спамить в чат или выполнять команды. Это может быть просто мусор в чат, а может быть попытка перебора команд (/op, /give, /stop) в надежде на неправильную настройку пермишенов.

[09:14:05] [Async Chat Thread/INFO]: <Bot_a83kd> Buy cheap ranks at scamsite.com
[09:14:05] [Async Chat Thread/INFO]: <Bot_k2md9> Buy cheap ranks at scamsite.com
[09:14:06] [Server thread/INFO]: Bot_pq92x issued server command: /op Bot_pq92x

Crash-эксплойты

Самый опасный тип. Боты подключаются и отправляют специально сформированные пакеты, которые эксплуатируют баги в конкретных версиях серверов. Например, книги с огромным NBT, невалидные данные инвентаря, пакеты движения с NaN координатами.

Характерно: подключается 1-2 бота, и сервер сразу падает. Не сотни, а буквально пара. Если после бана подсетей сервер всё равно крашится от одиночных заходов - скорее всего это crash-эксплойт.

BungeeCord/Velocity эксплойты

Отдельная категория, специфичная для серверов с прокси. Если у вас BungeeCord или Velocity, есть два основных вектора атаки:

IPForward spoofing. Если бэкенд-серверы принимают подключения напрямую (не только от прокси), атакующий может подделать IP-адрес через Bungee-протокол. В конфигах бэкенд-сервера bungeecord: true, но порт открыт наружу. Бот подключается напрямую к бэкенду и представляется кем угодно.

Handshake spoofing. Боты шлют модифицированные пакеты рукопожатия с подделанными данными, которые прокси пересылает на бэкенд. Позволяет обходить некоторые проверки плагинов.

В логах прокси:

[WARNING] [/185.22.xx.xx:0] <-> InitialHandler - could not decode packet
[WARNING] [/185.22.xx.xx:0] <-> ServerConnector - connection throttled

Как точно определить, что это боты

Несколько проверок, которые стоит сделать:

1. Смотрим количество подключений в минуту. Нормальный сервер с 50 игроками получает может 5-10 подключений в минуту. Если видите 50+ в минуту - что-то не так.

2. Анализируем IP-адреса. Боты часто идут из одной подсети или из датацентров. Нормальные игроки идут с резидентных IP (домашних провайдеров). Если видите OVH, Hetzner, DigitalOcean в whois - это точно не обычные игроки.

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

4. Версии клиентов. Если 200 "игроков" заходят с одинаковой версией и одинаковыми модами (или без модов) за 5 минут - это боты.

5. Нагрузка на CPU без причины. TPS падает, CPU на 100%, хотя онлайн вроде небольшой. Это может быть join flood, где боты не успевают полностью зайти, но обработка каждого подключения съедает ресурсы.

Почему анти-бот плагины не решают проблему полностью

Давайте честно. Плагины типа BotSentry, AntiBot, EpicGuard - они помогают. Но у них фундаментальное ограничение.

Плагин работает внутри Minecraft сервера. Бот уже подключился, уже прошёл TCP handshake, уже отправил login-пакет. И только потом плагин решает - бот это или нет. При 5000 ботов в минуту сервер просто не успевает обрабатывать подключения, даже если каждое отклоняется через 100мс.

Это как вышибала в клубе, который стоит внутри зала. Он может выгнать хулигана, но если 500 человек одновременно ломятся в дверь, зал всё равно будет забит.

Что плагины делают хорошо:

  • Фильтруют медленный поток ботов (10-50 в минуту)
  • Блокируют чат-спам
  • Ловят повторные заходы после бана

Что они не тянут:

  • Массовый join flood (сотни в секунду)
  • Null-ботов, которые ломают хэндшейк
  • Ботов с резидентных прокси (выглядят как обычные игроки)
  • Любую комбинацию бот-атаки с DDoS

Что реально работает: практические решения

Экстренная мера - whitelist

Если вас атакуют прямо сейчас и сервер еле дышит, самое простое:

/whitelist on

Это остановит поток ботов. Да, новые игроки не зайдут, но хотя бы текущие смогут играть. Используйте это как временную меру, пока настраиваете нормальную защиту.

Connection throttling

На уровне ОС можно ограничить количество подключений с одного IP:

iptables -A INPUT -p tcp --dport 25565 -m connlimit --connlimit-above 3 -j DROP
iptables -A INPUT -p tcp --dport 25565 -m recent --set --name mc
iptables -A INPUT -p tcp --dport 25565 -m recent --update --seconds 10 --hitcount 8 --name mc -j DROP

Первое правило - не больше 3 одновременных подключений с одного IP. Второе - не больше 8 подключений за 10 секунд. Для обычных игроков это незаметно, а тупые боты с одного IP будут резаться.

Проблема: серьёзные атаки идут с тысяч разных IP. Тут это не поможет.

Верификация через капчу

Система, которая не пускает игрока на основной сервер, пока он не докажет, что он человек. Обычно это реализуется через промежуточный сервер (limbo), где игрок должен выполнить простое действие - ввести код, нажать определённые блоки, решить визуальную задачу.

Боты на это не способны (пока). Это самый надёжный способ отсечь L7-ботов. В MineGuard, например, капча работает на уровне прокси - бот даже не доходит до вашего основного сервера, вся проверка проходит до проксирования.

Фильтрация на уровне протокола

Самый эффективный подход - анализ Minecraft-пакетов ещё до того, как подключение попадёт на ваш сервер. Проверка корректности handshake, валидации протокола, скорости отправки пакетов.

Null-боты отсеиваются моментально, потому что их пакеты невалидны. Join flood снижается, потому что подозрительные подключения дропаются до того, как дойдут до вашего Java-процесса.

Защита BungeeCord/Velocity

Если у вас сеть серверов с прокси:

1. Закройте прямые подключения к бэкендам. Только прокси должен иметь доступ к портам бэкенд-серверов. Через iptables или firewall разрешите подключения к бэкенд-портам только с IP прокси.

iptables -A INPUT -p tcp --dport 25566:25570 -s PROXY_IP -j ACCEPT
iptables -A INPUT -p tcp --dport 25566:25570 -j DROP

2. Используйте modern forwarding в Velocity вместо legacy BungeeCord forwarding. В velocity.toml:

player-info-forwarding-mode = "modern"

Это использует HMAC подпись, которую нельзя подделать.

3. Включите connection throttle на прокси. В BungeeCord config.yml:

connection_throttle: 4000
connection_throttle_limit: 3

Как выглядит настоящая бот-атака в логах

Вот реальный пример того, что вы увидите при серьёзном бот-флуде (ники и IP изменены):

[12:31:44] [Server thread/INFO]: UUID of player mK82nd is 0930aef1-...
[12:31:44] [Server thread/INFO]: UUID of player xP93kl is 1820bef2-...
[12:31:44] [Server thread/INFO]: UUID of player rT02mx is 2710cef3-...
[12:31:44] [Server thread/INFO]: mK82nd[/103.28.xx.xx:42901] logged in at ([world]-12.5, 64.0, 203.5)
[12:31:44] [Server thread/INFO]: xP93kl[/103.28.xx.xx:42902] logged in at ([world]-12.5, 64.0, 203.5)
[12:31:44] [Server thread/INFO]: rT02mx[/103.28.xx.xx:42903] logged in at ([world]-12.5, 64.0, 203.5)
[12:31:45] [Server thread/INFO]: UUID of player nB47pq is 3600def4-...
[12:31:45] [Server thread/INFO]: UUID of player vZ61ws is 4490eef5-...
... (повторяется сотни раз)
[12:31:52] [Server thread/WARN]: Can't keep up! Is the server overloaded?

Обратите внимание: одна и та же подсеть (103.28.x.x), логин в одну и ту же точку, "Can't keep up" через 8 секунд. Классическая картина.

Вот null-боты:

[12:31:44] [Netty Server IO #312/WARN]: Failed to handle packet
[12:31:44] [Netty Server IO #313/WARN]: Failed to handle packet
[12:31:44] [Netty Server IO #314/WARN]: Failed to handle packet
[12:31:44] [Netty Server IO #315/ERROR]: IOException: Connection reset by peer

Сотни ошибок в секунду, все от Netty (сетевой движок Minecraft).

Когда хватит плагинов, а когда нужна внешняя защита

Плагинов достаточно, если:

  • Атаки редкие и слабые (до 50 ботов в минуту)
  • Боты примитивные - одного типа, с одной подсети
  • У вас небольшой сервер без конкурентов и врагов
  • Вы готовы вручную банить подсети

Нужна внешняя защита, если:

  • Атаки регулярные или по заказу
  • Бот-атаки комбинируются с DDoS
  • Боты идут с сотен разных IP (резидентные прокси)
  • Сервер - ваш бизнес и даунтайм стоит денег
  • У вас BungeeCord/Velocity сеть с несколькими серверами

Внешняя защита (прокси типа MineGuard, TCPShield, Cosmic Guard) работает иначе - трафик проходит через фильтрующий сервер до того, как попадёт к вам. Это значит, что и L3/L4 DDoS, и L7 боты обрабатываются ещё на подходе.

Чек-лист: быстрая настройка базовой защиты

Если вас ещё не атаковали, но хотите подготовиться:

  • Обновите сервер до последней версии (закрывает crash-эксплойты)
  • Поставьте анти-бот плагин (EpicGuard, BotSentry) как базовый фильтр
  • Настройте connection throttle в server.properties: connection-throttle=4000
  • Закройте лишние порты через firewall
  • Если Bungee/Velocity - закройте прямой доступ к бэкендам
  • Настройте алерты на аномальный онлайн (чтобы узнать об атаке быстро)
  • Делайте регулярные бэкапы (crash-эксплойты могут повредить мир)
  • Рассмотрите внешнюю защиту, если сервер публичный и крупный

Бот-атаки - это не вопрос "если", а вопрос "когда". Любой публичный Minecraft сервер рано или поздно с ними столкнётся. Лучше подготовиться заранее, чем в панике гуглить решения, пока игроки пишут "сервер лагает".


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