
Вступление
Вероятно, вы все, кто входит в русскоязычное сообщество Minecraft, слышали о том, насколько важна безопасность вашего сервера и проекта в целом. И, конечно, многие из вас сталкивались с ситуацией, когда необходимый вам функционал реализован в платных плагинах, на которые у вас нет средств или возможности приобрести их. В этом случае, многие из нас обращаются к форумам, которые бесплатно предоставляют взломанные или слитые версии этих плагинов.
Но сейчас я хочу поговорить с вами о том, почему использование таких форумов и загрузка плагинов с них является очень плохой идеей, и почему это может привести к серьезным последствиям для вашего сервера и проекта. В этой статье мы рассмотрим эти вопросы подробнее и еще раз напомним, что бесплатный сыр - это не то, что нужно искать в сети (мышеловке).
Начало
Хочу сразу сказать, что здесь не стоит искать какие-то новые советы и так далее. Я расскажу всё, что знаю сама и подкреплю еще некоторыми пунктами от других профессиональных участников сообщества.
Затрону сразу несколько областей безопасности проекта, это настройка самой машины VPS/VDS/Dedicate и настройки самого сервера Minecraft, а так же сетевые настройки которые многие игнорируют и используют не разбираясь на советы сообщества со словами: "Ну у них же работает". Грубо говоря обо всём самом начальном.
Начнем пожалуй с самого главной проблемы которую стоит осветить - Ресурсы/Плагины/Моды.
Ресурсы
Когда вы скачиваете ресурсы для вашего сервера из Интернета, маловероятен шанс проверки этого самого ресурса на наличие подзаборных клещей, или же внутренних опухолей от вас самих, если Вы являетесь среднестатистическим пользователем, который решил погрузиться в мир серверов Minecraft. Но большинство заядлых администраторов такой ошибки не допускают и вот почему.
Тут важно, а самое главное обязательно нужно выработать навык проверки ресурса на вшивость, пусть даже он и будет взят с официального источника такого как spigotmc.org или же curseforge.com.
Вот комментарий одного моего хорошего знакомого:
Официальные площадки распространения ресурсов уже не раз попадались на том, что у них некорректная модерация. Я понимаю, что человеческий фактор - есть человеческий фактор. Но почему так проблематично нанять людей пусть даже и за деньги, которые будут разбираться в коде и отслеживать на наличие уязвимостей? Я не говорю про обнаружение супер сложных схем, а про стандартные, где плагин обращается к незнакомому серверу, хотя казалось бы зачем? Вот этот вопрос актуален почти для всех площадок. И единственные кто действительно яро защищает весь свой контент, как раз площадки сливов. Удивительно как повернулся мир в распространении ресурсов.![]()
TIplurka
Answer
Я согласна с этим мнением, но стоит учесть, что официальные площадки не получают прибыли от бесплатных ресурсов, потому что их основной приоритет - это платные продукты, потому модерация осуществляется только на платные ресурсы. Хотя более выгоден тот формат, где пользователь скачивает зараженный ресурс и площадки сливов зарабатывают деньги нечестными способами, такими как использование встроенного бот-нет кода или предоставление администраторам доступа для недоброжелательных действий. Начиная от майнинга, заканчивая DDOS атаками.
Поэтому, даже если вы не разработчик, важно иметь базовое понимание логики кода и функций, чтобы понимать, как работает ваш проект изнутри. Это поможет вам избежать потенциальных угроз и защитить ваш проект.
Конечно, вы можете нанять команду разработчиков или же взять к себе в команду, но это также требует контроля и глубокого понимания. О том, как эффективно управлять командой и обеспечивать безопасность вашего проекта. Здесь важно быть хорошим лидером, который будет постоянно разбираться в проблемах среди команды. Но более подробно расскажу про все минусы и плюсы работы команды в отдельной статье.
Во время работы я сама сталкивалась, что плагин который вроде бы делает быстрый фикс какой либо уязвимости, оказывается сам уязвимостью. И я знаю, что мой случай довольно часто встречается в практике. И именно потому я обзавелась знаниями и знакомыми, которые помогают, если вдруг возникает вопрос. Неожиданно объявился хакер который каким-то чудом получает себе права оператора? Выключаем сервер и анализируем все ресурсы, а так же проверяем их код на вшивость при этом советуясь со своими знакомыми разработчиками.
Рассмотрим для пущей наглядности один из довольно частых вирусов в РУМК, который хватает каждый третий молодой админ, веря что ему все безопасно предоставят.
Вирус Hostflow - один из самых базовых вирусов по типажу, но по логике конечно запарный.
Для объяснения за основу были взяты слова от человека под псевдонимом: bobobo
Что такое вирус Hostflow?
Вирус Hostflow - вирус который использует библиотеку javassist для манипулирования байт-кодом класса плагина во время выполнения, что позволяет ему изменять код внутри класса плагинов во время запущенного сервера. Или же очень простыми словами, позволяет инициализировать любой код задуманный злоумышленником.
Как работает вирус Hostflow?
Вирус Hostflow работает путем итерации перебора элементов списка с использованием класса javassist.ws.a. Во время итерации для каждого файла создается новая файловая система fileSystem2 на основе пути к файлу, далее проверяется наличие файла .l_ignore в данной файловой системе (в корневой папке плагина). Если файл существует, то обработка этого файла пропускается и переходит к следующему файлу. Далее манипуляции с getRootDirectories: создается опять итератор внутри этой же папки, и для каждого файла (класса) в этой папке применяется действие: создается новый CtClass на основе байт-кода файла, проверяется, содержит ли класс аннотацию JavaPlugin, и в зависимости от наличия аннотации JavaPlugin выполняются разные действия.
Если аннотация есть, то создается новый путь path6 для нового класса, проверяется наличие папки ".l1" внутри, и в зависимости от наличия ".l1" выполняются разные действия: создается новый класс, файл или директория. Простое объяснение: вставляется вызов этого всего в onEnable плагина: то есть во время запуска плагина происходит каждый раз такое действие.
Какие данные отправляются на сервер вируса Hostflow?
Вирус Hostflow отправляет данные о сервере, на котором запущен плагин, на свой сервер. Эти данные включают в себя IP-адрес сервера, порт сервера, версию ядра, количество игроков, максимальное количество игроков, весь список плагинов, включено ли online-mode на true в server.properties, никнеймы игроков, которые в данный момент на сервере, и логи сервера.
Как понять, от какого файла пошло заражение Hostflow?
Чтобы понять, от какого файла пошло заражение Hostflow, необходимо открыть файл зараженного плагина и посмотреть дату добавления файлов .l1 и .l_ignore. Тот плагин, который был заражен раньше всех, и будет тем носителем, который принес вирус в вашу сборку. Далее необходимо узнать, откуда он был взят, и не запускали ли вы его в других сборках до переноса в текущую сборку.
План действий по удалению вируса Hostflow
- Остановить сервер
- Взять все плагины и поместить их в отдельную папку.
- Скачать заново все плагины из надёжных источников, попутно открывая каждый файл архиватором и проверяя, что бы ни в одном не было файлов: .l_ignore .l1;
- Не использовать старые плагины больше, а только на основе их скачать плагины из оригинальных и надёжных источников.
- Удалить старые плагины.
- Запустить сервер, и проверить, заражаются ли плагины вновь.
Немного поговорили про ресурсы и плагины, а что там по модам?
С ними тоже не совсем всё гладко, хотя там модерация ресурсов гораздо строже чем у площадок посвященным плагинам, но это не помешало, личностям прорвать оборону curseforge.com и буквально заразить большое количество модов для Minecraft. На самом деле, феномен с CurseForge очень интересный в своём роде, по этому расскажу о нём подробнее отдельно. Что касается насчет других площадок, там тоже следует бдить за ситуацией, проверять моды которые вы скачиваете.
В целом это самые базовые советы, которые помогут вам
Конфигурация VPS/Dedicate машины
Одна из самых важных частей в создании вашего проекта - это настройка тачки. Именно от этого зависит работа вашего проекта в целом. С чего начать? Мой главное совету - не используйте готовые VPS/VDS сервера, так как они часто приносят больше проблем, чем пользы, даже несмотря на их низкую цену по сравнению с выделенными серверами.
Лучшим решением будет купить или арендовать выделенный сервер и разбить его на собственные виртуальные машины. Однако, тут уже включаются другие темы, такие как сетевой канал, пропускная способность, мощность железа и распределение нагрузки. Но не беспокойтесь, я подробно расскажу о всем этом в будущих статьях. Отвечу сразу на комментарии:
Да, они умные, но это им на оборот позволяет заработать на вас не давая полный функционал, так важный и нужный для вас.Я обычный рядовой пользователь, зачем мне этим заниматься? В дата-центрах люди умные.
И все же, какие настройки и рекомендации можно услышать для работы с Linux?
Лично я рекомендую использовать Dedicate, который будет разбиваться на несколько виртуальных машин, чтобы выделять полную мощность железа машины. Для управления всеми этими виртуальными машинами может подойти панель Pterodactyl, которую, к сожалению, часто подвергают критике пользователи и администраторы. Однако, прежде чем высказывать негативные суждения, стоит понимать, что у Pterodactyl есть очень хорошая инструкция, по которой все устанавливается и настраивается корректно, если вы имеете опыт администрирования Linux хотя бы на уровне полугода.
Не хочу углубляться в сетевые интерфейсы самой панели. В интернете есть множество хороших мануалов и гайдов, которые работают без нареканий, потому изучите их. Но для минимальной работы нужно же знать, какое железо нужно в наше время.
И так записываем, для собственного проекта вам нужен хотя бы минимум 1 Dedicate сервер с примерно следующими характеристиками:
- ОЗУ от 64 ГБ
- SSD M2 Накопители от 512 ГБ
- Сетевая пропускная способность от 300 МБ/сек
- Процессор от Ryzen 5 5600X/Core i5-12400F
Приведенные мною характеристики подойдут для серверов с версии 1.16.5 по 1.20.4 с натяжкой. Всё зависит от ваших запросов. Если это сервер выживания ванили или сервер с РП составляющей, тут важны мощности железа и качества плагинов, ведь чем меньше плагин нагружает ядро, тем больше у вас ресурсов на поддержку сервера при крупном онлайне. Для выбора ядра вы можете обратиться к одному неплохому для ознакомления ресурсу на другой площадке: ссылка.
Хотя и рекомендации ядер там не от мира сего по моему мнению, но как список к ознакомлению очень даже хорош при условии, что не все ядра там указаны. Та же Folia которую считают супер нестабильной уже используют многочисленные крупные сервера.
Один из известных мне, это проект стримера bratishkinoff. Разработчики его сервера как я поняла, решили форкнуть Folia и переписать некоторые методы, но всё еще основываясь на технологиях данного ядра им удалось мало того что выдержать 600-700 онлайна на одном сервере где игроки могли спокойно играть, если распределены по всей карте, так еще и ребята умудрились повысить пороговые значения ТПС до 23.20, что кажется крайне сомнительным, но как сказал один из разработчиков данного ядра:
На своих проектах я вычислил, что 23.20 самое стабильное значение. Потому я решил, что ядра семейства Prismatic будут использовать данное значение ТПС. Представьте что вы с монитора 60 герц пересели на монитор с 165 герц, вот эффект примерно тот же самый, но не только для вас, а для всех игроков на регион.D3st0ny
Answer
Учитывая их дикость в хорошем смысле этого слова в разработке, ребята хотят достигнуть эффекта оптимизации одиночной игры, когда 400-500 игроков на сервере чувствуют себя как в одиночке, но при этом большой толпой играют на одном сервере, говорить о таких вещах - это в новинку. Хоть и многочисленные старожилы на администраторах и разработчиках, буквально с опаской относятся ко всему новому и используют лишь то, что им удалось опробовать и обуздать. Лично я уже устала следовать строгим заветам bukkit'а или aikar'а, именно потому я верю в ребят, что у них всех получится.
Помимо самой машины, важно настроить сам Linux и саму сеть как локальную так и глобальную. Для содержания сервера я рекомендую использовать Ubuntu 22.04, хороший дистрибутив который показывает себя стабильнее всех при использовании технологий которые я озвучиваю в этой статье. Как настроить сам Linux дабы он работал так как нужно, я вам не подскажу тут всё очень индивидуально, а вот в сетевых настройках я вам подскажу как быть.
Сетевые настройки
Начнем с того, что стоит сразу рассмотреть все открытые порты на машине и закрыть не использующиеся. Настроить переадресации и безопасность вашей сети. Скрыть реальный IP адрес как минимум через CloudFlare и кастомных entrypoint'ов.
Приступим к фильтрации трафика. Iptables/ufw - если вы не поняли о чем сейчас пойдет речь, лучше пойдите и изучите детально и досконально эти слова, а так же получите опыт пользования этими утилитами, ведь дальше идёт настройка в которой лучше всего справится человек со знаниями сетевого инженера.
Минимальная и качественная настройка iptables выглядит примерно так, но учтите что она может не подойти каждому, т.к. это всё индивидуально!
Bash:
ipset create whitelist hash:ip timeout 21600 #создает множество (set) под названием "whitelist", используя хеширование IP-адресов. Время жизни (timeout) записи в множестве составляет 21600 секунд (6 часов).
iptables -t raw -N MINECRAFT #создает новую пользовательскую цепочку (chain) под названием "MINECRAFT" в таблице "raw" для управления пакетами.
iptables -t raw -A PREROUTING -p tcp --dport 25565 --syn -j MINECRAFT #добавляет правило в цепочку "PREROUTING" таблицы "raw", которое перенаправляет входящие TCP-пакеты с порта назначения 25565 (порт Minecraft-сервера) и установленным флагом SYN в цепочку "MINECRAFT".
iptables -t raw -A MINECRAFT -m connlimit --connlimit-above 3 --connlimit-mask 32 --connlimit-saddr -j DROP #добавляет правило в цепочку "MINECRAFT", которое ограничивает количество одновременных соединений с одного IP-адреса до 3, и блокирует (DROP) пакеты, превышающие это ограничение.
iptables -t raw -A MINECRAFT -m hashlimit --hashlimit-above 6/min --hashlimit-burst 6 --hashlimit-mode srcip --hashlimit-name ratelimit -m set ! --match-set whitelist src -j DROP #добавляет правило в цепочку "MINECRAFT", которое ограничивает скорость пакетов от одного IP-адреса до 6 пакетов в минуту с разрешением всплеска (burst) до 6 пакетов, и блокирует пакеты, превышающие это ограничение, если IP-адрес не находится в множестве "whitelist".
iptables -t raw -A MINECRAFT -m hashlimit --hashlimit-above 12/min --hashlimit-burst 15 --hashlimit-mode srcip --hashlimit-name whitelist_ratelimit -j DROP #добавляет правило в цепочку "MINECRAFT", которое ограничивает скорость пакетов от одного IP-адреса до 12 пакетов в минуту с разрешением всплеска (burst) до 15 пакетов, и блокирует пакеты, превышающие это ограничение, для IP-адресов, находящихся в множестве "whitelist".
iptables -A INPUT -p tcp --dport 25565 -m conntrack --ctstate RELATED,ESTABLISHED -m connbytes --connbytes 150 --connbytes-mode packets --connbytes-dir original -m set ! --match-set whitelist src -j SET --add-set whitelist src #добавляет правило в цепочку "INPUT", которое добавляет IP-адрес в множество "whitelist", если было установлено соединение с портом назначения 25565 (Minecraft-сервер) и передано более 150 пакетов в обоих направлениях, и IP-адрес не находится в множестве "whitelist".
Итоги
И так безопасность вашего сервера Minecraft - это ключевой фактор успеха и стабильности. Не используйте взломанные или слитые версии плагинов, всегда проверяйте ресурсы перед установкой и следите за сетевыми и системными настройками. Используйте выделенные серверы и надлежащие инструменты для управления ими. Будьте бдительны и осмотрительны, и ваш проект будет успешным и надежным.
Помните, что безопасный сервер - это основа для хорошего игрового опыта.