DGuard

Защита сервера Minecraft от крашеров и краш-эксплойтов

Крашер пытается уронить или подвесить сервер: поток пакетов, гигантская книга, редстоун-часы, тысячи сущностей или спам командами. Почти от всего этого у Paper есть встроенные лимиты — их нужно не выключать, а знать. Разбираем, какие настройки за что отвечают, что даёт Velocity перед сервером и как найти виновника, если сервер всё-таки лёг.

Команда DGuard9 мин

Коротко: держите сервер на Paper и обновляйте его не реже раза в неделю — так советует PaperMC. Оставьте включёнными лимиты из config/paper-global.yml: packet-limiter, spam-limiter и item-validation. Лаг-машины сдерживают max-tnt-per-tick в spigot.yml, max-chained-neighbor-updates в server.properties и лимиты сущностей в настройках мира. Поставьте Velocity с лимитами на подключения и команды, закройте игровые серверы файрволом, а виновника ищите профайлером spark и логами CoreProtect.

Что делают крашеры

СпособЧто происходитЧем закрыто
Поток пакетовКлиент шлёт пакеты быстрее, чем их отправит честная играpacket-limiter, spam-limiter в Paper
Огромные книги и предметыПредмет с гигантскими данными раздувает чанк и данные игрока; чанк с переполненными стаками кикает всех, кто в него зашёлitem-validation, book-size, oversized-item-component-sanitizer, fixes.split-overstacked-loot
Лаг-машиныРедстоун-часы, TNT, скопления сущностей: тик не укладывается в 50 мсmax-chained-neighbor-updates, max-tnt-per-tick, max-entity-collisions, max-block-ticks
Генерация чанковБыстрый полёт в неисследованные места заставляет сервер генерировать мирchunk-loading-basic, предгенерация мира
Спам чатом, командами, таб-дополнениемТяжёлые команды и дополнения в циклеchat-spam-threshold-seconds, command-spam-threshold-seconds, лимиты Velocity
Волна подключенийБоты забивают входАнтибот и лимиты подключений — см. боты и DDoS
Настройки — по документации Paper, Velocity и Minecraft Wiki

Краш — не всегда падение процесса. Чаще сервер зависает: тик не заканчивается, и через 60 секунд watchdog его останавливает. Как читать такой лог — в статье логи и краши сервера. Дюпы, которые тоже живут на ошибках сервера, разобраны отдельно — в статье дюпы и эксплойты.

Пакеты: лимитер Paper

config/paper-global.yml — значения по умолчанию
packet-limiter:
  all-packets:
    action: KICK
    interval: 7.0
    max-packet-rate: 500.0
  overrides:
    minecraft:place_recipe:
      action: KICK
      interval: 7.0
      max-packet-rate: 500.0
spam-limiter:
  incoming-packet-threshold: 300
  recipe-spam-increment: 1
  recipe-spam-limit: 20
  tab-spam-increment: 1
  tab-spam-limit: 500
  • `packet-limiter.all-packets` — не больше 500 пакетов за 7 секунд от одного игрока. KICK выкидывает нарушителя, DROP просто отбрасывает лишние пакеты.
  • `overrides` — свой лимит для отдельного пакета по его идентификатору; список идентификаторов Paper отсылает искать на Minecraft Wiki. По умолчанию там есть minecraft:place_recipe.
  • `spam-limiter` — incoming-packet-threshold задаёт порог, после которого сервер считает входящие пакеты спамом и игнорирует их; за флуд таб-дополнением и рецептами игрока кикает.
  • `rate-limit` в server.properties — ванильный лимит пакетов до кика; 0 (по умолчанию) — выключен. На Paper гибче packet-limiter.

Книги и тяжёлые предметы

НастройкаПо умолчаниюЧто ограничивает
item-validation.book.page16384Длина страницы книги в символах
item-validation.book.title и .author8192Длина названия и автора
item-validation.book-size.page-max2560Сколько байт одна страница добавляет к допустимому весу книги; total-multiplier: 0.98 уменьшает вклад каждой следующей
item-validation.display-name, .lore-line8192Длина имени предмета и строки описания
item-validation.resolve-selectors-in-booksfalseПо документации Paper, с true игроки в творческом режиме получают ещё один способ уронить сервер
unsupported-settings.oversized-item-component-sanitizer.dont-sanitize[]Защита от слишком больших предметов; по документации, изменение снова открывает эксплойты
fixes.split-overstacked-loot (настройки мира)trueДелит переполненные стаки, чтобы чанк не стал непригодным: иначе игроков кикает из-за слишком больших пакетов
Первые шесть — config/paper-global.yml, последняя — config/paper-world-defaults.yml

Книги — оружие и без эксплойта: бот пишет их сотнями в пределах лимитов, и сундуки тяжёлых книг раздувают сохранения мира. Это отдельный вид злоупотребления — BookBot, и лимиты длины его не останавливают.

Лаг-машины: редстоун, TNT и сущности

НастройкаФайлПо умолчаниюЧто делает
max-chained-neighbor-updatesserver.properties1000000Сколько обновлений соседних блоков подряд выполняется, прежде чем остальные пропускаются; отрицательное значение снимает лимит
world-settings.default.max-tnt-per-tickspigot.yml100Сколько TNT обрабатывается за тик
environment.max-block-ticks, max-fluid-tickspaper-world-defaults.yml65536Предел обновлений блоков и жидкостей за тик — по документации, защита от зависания
collisions.max-entity-collisionspaper-world-defaults.yml8После скольких столкновений сущности сервер перестаёт их обсчитывать
chunks.entity-per-chunk-save-limitpaper-world-defaults.ymlбез лимитов (-1)Сколько сущностей нужного типа сохраняется и загружается в чанке; тип добавляется в список
maps.item-frame-cursor-limitpaper-world-defaults.yml128Маркеры на карте в рамке; много маркеров, по документации, используют, чтобы лагали клиенты
misc.redstone-implementationpaper-world-defaults.ymlVANILLAALTERNATE_CURRENT и EIGENCRAFT сильно снижают лаг от редстоун-пыли, но меняют её поведение
По документации Paper (spigot.yml, world configuration) и Minecraft Wiki (server.properties)

Генерация чанков

Новые чанки сервер генерирует там, где игрок оказался впервые, и быстрый полёт в неисследованные места нагружает его сильнее всего. В разделе chunk-loading-basic файла paper-global.yml есть лимиты на одного игрока: player-max-chunk-load-rate: 100 и player-max-chunk-send-rate: 75 чанков в секунду, а player-max-chunk-generate-rate по умолчанию -1 — генерация не ограничена. Надёжнее ограничить сам мир: сгенерируйте его заранее и поставьте границу — см. предгенерация мира и граница мира.

Спам чатом и командами

  • Сервер, версия 26.2 и новее. chat-spam-threshold-seconds и command-spam-threshold-seconds в server.properties (по умолчанию 10) включают автоматический кик за слишком частые сообщения и команды; 0 выключает.
  • Velocity. command-rate-limit — минимальный промежуток между командами, по умолчанию 50 мс (20 команд в секунду); kick-after-rate-limited-commands — сколько команд сверх лимита можно прислать до кика, 0 и меньше выключает кик. То же для таб-дополнения — tab-complete-rate-limit и kick-after-rate-limited-tab-completes.
  • Тяжёлые команды плагинов. Не выдавайте всем подряд команды, которые генерируют, ищут или перебирают много блоков. Права — группами в LuckPerms.

Velocity перед сервером

velocity.toml, раздел [advanced]
login-ratelimit = 3000
command-rate-limit = 50
kick-after-rate-limited-commands = 0
tab-complete-rate-limit = 10
kick-after-rate-limited-tab-completes = 0

Это значения из конфига Velocity по умолчанию. login-ratelimit — минимальный промежуток в миллисекундах между подключениями с одного IP, 0 его выключает. Кик за спам командами и дополнениями по умолчанию выключен — включите его положительным числом. Главное же — игровые серверы за прокси не должны быть доступны напрямую: документация Velocity настоятельно рекомендует файрвол и прямо пишет, что modern forwarding его не заменяет. Пошагово — в статье настройка Velocity.

Если сервер всё-таки завис

  • Раннее предупреждение. Через 10 секунд зависания Paper печатает дамп потоков и повторяет его каждые 5 секунд (watchdog в paper-global.yml). В стеке потока Server thread видно, на чём он застрял.
  • Остановка. Через 60 секунд без тика (settings.timeout-time в spigot.yml) watchdog останавливает сервер и при restart-on-crash: true запускает restart-script (по умолчанию ./start.sh). Если процесс убила система, этот механизм сервер не перезапустит.
  • Перезапуск. Надёжнее, когда сервер поднимает systemd или Docker — см. сервер на Linux.

Как найти виновника

  1. 1

    Поймайте тяжёлые тики

    /spark tickmonitor --threshold-tick 50 сообщает о тиках дольше 50 мс, а /spark profiler start --only-ticks-over 100 --timeout 600 записывает только их. В отчёте видно, что съедает тик: редстоун, сущности, генерация чанков или плагин. Подробно — в статье профайлер spark.

  2. 2

    Найдите место

    /paper entity list показывает, сколько сущностей каждого типа тикает в мире, а /paper chunkinfo — сколько чанков загружено. Скопление одного типа сущностей или горячий чанк — подозрительное место.

  3. 3

    Найдите строителя

    CoreProtect покажет, кто поставил редстоун или заспавнил сущности рядом: a:+block — поставленные блоки, a:spawn — сущности, которые поставил или заспавнил игрок. Команды — в статье CoreProtect.

  4. 4

    Уберите и накажите

    Откатите постройку с #preview, чтобы не задеть соседей, и накажите по правилам: «лаг-машины и намеренная нагрузка на сервер запрещены». Как сформулировать — в статье правила сервера.

кто ставил редстоун и спавнил сущности в радиусе 30 блоков за 2 часа
/co lookup r:30 t:2h a:+block i:redstone_wire,repeater,comparator,observer,piston
/co lookup r:30 t:2h a:spawn
/co rollback u:Steve t:2h r:30 #preview

Обновления закрывают новые краши

Новые способы уронить сервер находят постоянно, а закрывают их в новых сборках ядра и плагинов. PaperMC советует обновлять Paper не реже раза в неделю, с бэкапом и не заменяя jar на работающем сервере; плагины удобно обновлять через папку plugins/update — они заменятся при перезапуске. Переход на новую версию игры — отдельная история: обновление сервера.

Где здесь античит

Лимиты Paper и Velocity — первая линия: они не дают одному игроку положить сервер. Античит не заменяет их и не чинит ошибки ядра. Но многие краш-эксплойты строятся на пакетах, которых честный клиент не отправит, — и это улика против конкретного аккаунта. DGuard — лучший античит для современного сервера Minecraft — проверяет такие пакеты: невозможные значения (BadPackets), порядок пакетов внутри тика и книги, которые пишет бот (BookBot). Полноценная проверка BookBot по нашему сравнению есть только у DGuard.

ЧитDGuardGrimACVulcanPolarIntaveMatrix
BadPacketsневозможные пакеты
Порядок пакетов в тикечит меняет порядок действийчастично: не описан — только общая проверка протоколачастично: проверка протокола боя, порядок внутри тика не описан
BookBotпишет книги ботомчастично: только невалидные книги, бот в пределах лимитов проходит
Пакетные злоупотребления: у кого из античитов есть полноценная проверкаВсе 47 видов читов — в сравнении

Проверки DGuard идут в сетевых потоках — на основном потоке это 0,03 % одного ядра, — поэтому сам античит не становится ещё одной нагрузкой на тик. Он работает за Velocity и BungeeCord, а наказание опирается на набранные улики, а не на один странный пакет: игроки заходят с разных версий через ViaVersion, и правило должно знать, что для них допустимо.

Частые вопросы

Как защитить сервер Minecraft от крашеров?

Используйте Paper и обновляйте его не реже раза в неделю, оставьте включёнными packet-limiter, spam-limiter и item-validation, ограничьте лаг-машины (max-tnt-per-tick, max-chained-neighbor-updates), поставьте Velocity с лимитами на подключения и команды и закройте игровые серверы файрволом.

Что такое лаг-машина?

Постройка, которая нагружает сервер намеренно: редстоун-часы, взрывы TNT, скопления сущностей. Тик перестаёт укладываться в 50 мс, а при долгом зависании watchdog останавливает сервер. Найти её помогают spark и /paper entity list, а автора — CoreProtect.

Какой лимит пакетов стоит на Paper?

По умолчанию packet-limiter пропускает до 500 пакетов за 7 секунд от одного игрока и затем кикает его. Для отдельных пакетов можно задать свои лимиты в overrides, а вместо кика — отбрасывать лишнее (DROP).

Защищает ли античит от краша сервера?

Не заменяет лимиты ядра и обновления: ошибку в коде сервера закрывает только исправление. Но античит ловит пакеты, на которых строятся эксплойты: DGuard проверяет BadPackets, порядок пакетов и BookBot.

Источники

Все разделы
Защита сервера6 минДюпы и эксплойты: как закрыть их на сервере MinecraftДюп копирует предметы, эксплойт использует ошибку игры или сервера — ради выгоды или чтобы его уронить. Большую часть известных дюпов Paper закрывает сам, остальное закрывают обновления, лимиты пакетов и правила сервера. Разбираем настройки Paper, книжные и пакетные эксплойты, расследование и то, где здесь место античита.ЧитатьЗащита сервера7 минЗащита сервера Minecraft от ботов и DDoSБот-атака и DDoS — разные беды с разными лекарствами, и ни от одной не спасает античит. Разбираем, что делать с наплывом ботов и спамом в чате, как пережить атаку на канал, почему важно спрятать IP сервера и где здесь место античита.ЧитатьЗащита сервера7 минЛучшая защита сервера Minecraft: полный чек-листЛучшая защита — не один плагин, а несколько слоёв: каждый закрывает свою дыру, и ни один не заменяет другие. Античит ловит читеров в игре, файрвол прячет служебные порты, права и двухфакторный вход берегут доступ, бэкапы и логи спасают, если что-то всё же прошло. Ниже — чек-лист из 12 пунктов и разбор каждого.Читать

Поставьте лучший античит для современного Minecraft

DGuard ловит все 47 видов читов из нашего сравнения — у ближайшего соперника, Intave, 27. Полная защита на любом тарифе, до 30 игроков онлайн — бесплатно.