RE:NODE

Minecraft11 мин чтения

Чек-лист безопасности сервера Minecraft

Чек-лист безопасности сервера Minecraft: online-mode и риски офлайн-режима, вайтлист, операторы, RCON и query, источники плагинов, Log4Shell, прокси и аккаунт панели.

0 прочтений

Большинство серверов Minecraft, которые «взломали», на самом деле никто не взламывал. Кто-то зашёл под именем оператора на сервер в офлайн-режиме, воспользовался плагином, который выполнял консольные команды для кого угодно, подобрал пароль RCON или поставил слитый премиум-плагин с бэкдором внутри. Чек-лист, который предотвращает почти всё это, короткий: держите online-mode=true (или правильно настройте forwarding прокси), включайте вайтлист на приватных серверах, почти никому не давайте оператора и используйте вместо этого плагин прав, оставляйте RCON и query выключенными, если они ничему не нужны, ставьте плагины только от их авторов, держите серверное ПО актуальным и защищайте аккаунт панели, который всем этим управляет. Остальная часть статьи объясняет каждый пункт и как его проверить.

Поймите, от чего вы защищаетесь#

Разные угрозы требуют разной защиты, и их полезно назвать:

УгрозаКак это выглядитОсновная защита
Выдача себя за другогоКто-то заходит под именем администратораonline-mode, forwarding прокси
Случайные гриферыПриходят незнакомцы и ломают постройкиВайтлист, приваты, логирование
Злоупотребление правамиМодератор или плагин делает слишком многоLuckPerms, никаких прав-шаблонов
Удалённый доступЗахват RCON или веб-панелиВыключено по умолчанию, сильные секреты
Вредоносные плагиныБэкдор в jarТолько надёжные источники
Уязвимости ПОЭксплойты, роняющие сервер или выполняющие кодАктуальные сборки Paper
Захват аккаунтаУкраден ваш аккаунт панели или Mojang2FA, отдельные пароли

Защита от гриферства в игровом смысле - приваты, откаты, анти-иксрей - описана в статье защита от гриферов и античит. Здесь речь о самом сервере.

online-mode и опасность офлайн-режима#

server.properties
online-mode=trueenforce-secure-profile=true

online-mode=true заставляет сервер проверять вход каждого игрока через сессионные серверы Mojang. Тогда имя и UUID, с которыми приходит игрок, доказанно принадлежат ему.

При online-mode=false сервер верит игроку на слово. Кто угодно может зайти как Notch, под вашим именем или под именем любого оператора из ops.json, и сервер выдаст ему права оператора - офлайн-UUID вычисляется из имени, поэтому одно и то же имя всегда даёт один и тот же офлайн-UUID. На публичном сервере в офлайн-режиме ваш список операторов - это список имён, которые может ввести кто угодно.

Законная причина запускать online-mode=false ровно одна: бэкенд-сервер за прокси, который сам выполняет аутентификацию и передаёт проверенные личности. Это безопасно, только если forwarding настроен так, что бэкенд отклоняет соединения, пришедшие не через прокси, - modern forwarding в Velocity на Paper так и делает, а для BungeeCord нужен BungeeGuard или файрвол. Почему эта разница - вопрос безопасности, объясняется в статье BungeeCord или Velocity.

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

Вайтлист и кто может зайти#

Для приватного сервера вайтлист - самая сильная отдельная настройка из всех, что у вас есть:

server.properties
white-list=trueenforce-whitelist=true

Два ключа делают разную работу:

  • white-list=true не пускает никого, кого нет в whitelist.json.
  • enforce-whitelist=true при перезагрузке вайтлиста кикает игроков, которые в сети, но не в списке, - так удаление человека срабатывает сразу, а не при его следующем входе.

Используйте whitelist add <name> и whitelist remove <name> из консоли, а не правьте JSON вручную: сервер сам сопоставит имена с UUID.

Зачем это серверу, о котором никто не знает: публичные сканеры постоянно прочёсывают интернет в поисках серверов Minecraft и публикуют найденное, включая версию, число игроков и включён ли вайтлист. Группы используют эти списки, чтобы находить открытые серверы и гриферить их, иногда в течение нескольких часов после первого запуска сервера. Неизвестность - не защита. Сервер «только для друзей» без вайтлиста - это публичный сервер, который просто ещё не нашли.

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

Операторы и права#

Статус оператора - грубый инструмент. Уровень 4, который op выдаёт по умолчанию, может выполнять любую команду, включая stop, op и всё, что плагин регистрирует для операторов. Многие плагины по умолчанию выдают все свои права операторам.

server.properties
op-permission-level=4function-permission-level=2

Чек-лист:

  1. Только владельцы. Оператор - у одного-двух человек. Все остальные - модераторы, строители, помощники - получают группу LuckPerms ровно с теми правами, которые нужны для их работы.
  2. **Никакого права *.** Выдать группе * - это оператор под другим именем, включая то, о чём вы не подумали, например права плагинов на выполнение консольных команд.
  3. Следите за правами на выполнение команд. Плагины, которые выполняют команды от имени консоли (команды в стиле /sudo, командные таблички, действия по клику на NPC, плагины меню), в чужих руках так же сильны, как оператор. Их узлы прав - только для владельцев.
  4. Время от времени просматривайте `ops.json`. Имена там накапливаются. Аккаунт бывшего сотрудника, у которого всё ещё есть оператор, - риск, если его аккаунт Minecraft когда-нибудь украдут.
  5. Логируйте действия персонала. CoreProtect записывает блоки и контейнеры; большинство плагинов модерации записывают наказания. Подотчётность больше сдерживает, чем выявляет.

Плагин прав, который стоит использовать, - LuckPerms, и в его руководстве показана лестница групп, где никому ниже владельца оператор не нужен ни для чего.

RCON, query и пинг статуса#

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

server.properties
enable-rcon=falsercon.port=25575rcon.password=broadcast-rcon-to-ops=trueenable-query=falsequery.port=25565enable-status=truehide-online-players=false

RCON даёт полный доступ к консоли любому, у кого есть пароль, по протоколу, который передаёт этот пароль открытым текстом. Если у вас нет инструмента, которому он нужен, оставьте enable-rcon=false. Если есть, используйте длинный случайный пароль, не открывайте порт шире, чем требуется, и никогда нигде не используйте этот пароль повторно. Большинству людей RCON заменяет консоль панели. Протокол и правила подробно разобраны в статье RCON без риска.

Query (enable-query) отвечает на запросы в стиле GameSpy списком игроков, плагинов и версией сервера по UDP. Им пользуются сайты-мониторинги серверов. Он раскрывает список ваших плагинов - карту для всякого, кто ищет уязвимый плагин. Включайте его, только если этого требует мониторинг, которым вы пользуетесь.

Статус (enable-status) - обычный пинг из списка серверов. Если его выключить, сервер будет показан выключенным в списке серверов у клиентов, и игроков это раздражает сильнее, чем замедляет сканеры. hide-online-players=true скрывает ники игроков во всплывающем списке - разумный выбор ради приватности для небольшого сервера.

Источники плагинов и слитые плагины#

Каждый установленный плагин работает со всеми полномочиями процесса сервера: он может читать любой файл, открывать сетевые соединения, выполнять консольные команды и скачивать дополнительный код. Плагин - не функция, а программа, которой вы полностью доверяете.

  • Скачивайте со страницы самого автора. Hangar (PaperMC), Modrinth, SpigotMC и релизы автора на GitHub. Не перезаливы, не сайты-«зеркала», не файлы, которые пересылают в Discord.
  • Никогда не используйте слитые или «nulled» премиум-плагины. Платные плагины, бесплатно распространяемые третьими лицами, - главный способ доставки jar с бэкдорами. Типичная начинка выдаёт определённому игроку оператора по команде, выполняет удалённые команды, крадёт файлы или распространяется на все остальные jar в папке plugins. Плагин работает нормально - в этом и смысл.
  • Предпочитайте поддерживаемые плагины. Заброшенный плагин никто не исправит, когда в нём найдут уязвимость.
  • Смотрите, что плагин просит. Плагин косметики, которому нужен собственный порт веб-сервера или который скачивает обновления с какого-то случайного домена, заслуживает второго взгляда.
  • Ведите список. Знайте, что лежит в вашей папке plugins и зачем. Всё, что вы не можете объяснить, должно уйти.

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

Держите серверное ПО актуальным#

В Minecraft бывали серьёзные уязвимости, самая известная - Log4Shell (CVE-2021-44228) в декабре 2021 года: сообщение в чате могло заставить незалатанный сервер или клиент скачать и выполнить код. Ванильные версии 1.18.1 и новее содержат исправление, а более старым версиям для безопасности нужен был флаг JVM или исправленный конфиг. Серверы, которые до сих пор работают на старых незалатанных версиях, по-прежнему уязвимы.

Помимо громких уязвимостей, сборки Paper регулярно исправляют эксплойты, роняющие сервер, - некорректные пакеты, слишком большие книги или предметы, трюки с chunk ban, - которые позволяют одному игроку отключить сервер или сделать чанки незагружаемыми. Их исправляют тихо и постоянно.

  1. Запускайте актуальную сборку Paper для своей версии Minecraft.
  2. Регулярно обновляйте сборки, а не только версии. Обновление сборки в пределах той же версии Minecraft несёт мало риска.
  3. Если приходится держать старую версию ради совместимости, понимайте, что вы принимаете незакрытые баги, и ограничьте круг тех, кто может зайти.

Как обновиться, не сломав мир, описано в статье обновление версии Minecraft.

Защита сети и чего она не покрывает#

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

В Paper и Velocity есть встроенные ограничения частоты подключений и входов, а rate-limit в server.properties ограничивает число пакетов в секунду на игрока (0 отключает). В RE:NODE есть вышестоящая фильтрация, которая отбрасывает явные объёмные флуды, а также отражённый и некорректный трафик; атаки, которые выглядят как настоящие игроки, не фильтруются, и ни один хостер не может честно пообещать обратное. Честная версия этой фразы - в статье что мы делаем с атаками.

Защищайте и собственный адрес. IP сервера публичен по своей природе, а ваш домашний IP - нет: не запускайте инструменты и плагины, которые показывают IP игроков другим игрокам, и следите за тем, что персонал выкладывает на скриншотах консоли, где виден IP каждого входящего игрока.

Защитите панель и аккаунты вокруг неё#

Сервер защищён ровно настолько, насколько защищены аккаунты, которые им управляют:

  • Ваш аккаунт в панели хостинга. Он может остановить сервер, прочитать любой файл, скачать любой бэкап. Используйте уникальный пароль и двухфакторную аутентификацию. В RE:NODE 2FA работает с кодами из любого приложения-аутентификатора плюс одноразовые коды восстановления - храните коды восстановления где-нибудь офлайн, потому что аккаунт, потерявший и то и другое, восстановить нельзя. Пошаговая инструкция - в статье двухфакторная аутентификация для аккаунта панели.
  • Доступ персонала. Давайте персоналу субпользователей ровно с тем, что им нужно, - только консоль, только файлы, без оплаты, - а не свой логин. RE:NODE ведёт журнал действий по каждому серверу, так что видно, кто что сделал. Как это спроектировать, описано в статье субпользователи и минимальные привилегии.
  • Реквизиты SFTP. Они свои у каждого сервера; не вставляйте их в Discord.
  • Ваш аккаунт Minecraft. Владелец, у которого украли аккаунт Microsoft, отдаёт атакующему оператора на каждом своём сервере. Защитите и его через 2FA.
  • Интеграции. Discord-боты с каналами консоли, веб-панели, плагины магазинов - каждая из них ещё один вход. Канал консоли DiscordSRV - это доступ к консоли для всех, кто может в нём писать.

Чек-лист#

Скопируйте его и пройдитесь по нему перед запуском и затем каждые несколько месяцев:

code
[ ] online-mode=true on every server players reach directly[ ] proxy backends reject direct connections (tested from outside)[ ] white-list=true and enforce-whitelist=true on private servers[ ] ops.json holds only owners[ ] no group has the * permission[ ] command-running plugin permissions held by owners only[ ] enable-rcon=false, or a long unique password and limited exposure[ ] enable-query=false unless a listing site needs it[ ] every plugin downloaded from its author, none leaked[ ] Paper on a current build[ ] panel account with 2FA and recovery codes stored offline[ ] staff on subusers or roles, not shared logins[ ] backups scheduled, and one restore actually tested

Последняя строка - не для красоты. Каждый пункт выше уменьшает шанс плохого дня; работающая резервная копия - то, что его заканчивает. В RE:NODE слоты резервных копий входят в каждый тариф Minecraft, хранятся не на той машине, которую защищают, и могут быть заблокированы, чтобы ротация не удалила копию, сделанную перед инцидентом. Почему важна проверка, объясняется в статье резервные копии, которые действительно восстанавливаются.

FAQ#

Безопасен ли сервер Minecraft в офлайн-режиме?

Нет, если игроки могут достучаться до него напрямую. Без online mode кто угодно может зайти под любым именем, включая имена операторов. Единственный безопасный вариант - бэкенд за правильно настроенным прокси, который отклоняет прямые подключения.

Нужен ли вайтлист, если адрес сервера секретный?

Да. Сканеры находят серверы Minecraft по всему интернету за считаные часы и делятся списками. Сервер, которого нет в списках, - ещё не скрытый сервер. Только вайтлист сохраняет приватный сервер приватным.

Стоит ли давать модераторам оператора?

Нет. Дайте им группу прав с нужными командами. Оператор даёт всё, включая то, что плагины по умолчанию выдают операторам, и превращает украденный аккаунт модератора в украденный сервер.

Безопасно ли использовать бесплатные копии платных плагинов?

Нет. Слитые премиум-плагины - самый частый источник бэкдоров на серверах Minecraft. Плагин будет работать, и скрытый код, который отдаёт управление кому-то другому, тоже.

Как понять, что мой сервер скомпрометирован?

Необъяснимые операторы, команды в логе, которые никто не вводил, новые или изменённые jar в plugins, неизвестные файлы или задачи по расписанию. Считайте любое из этого компрометацией всего сервера, восстановитесь из заведомо чистой резервной копии и смените все учётные данные.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000