Привет, Habr!
Недавно мне захотелось перепройти Minecraft. Я нашёл себе компанию, и было решено проходить игру вместе на собственном сервере. Но что-то пошло не так

Что произошло
Первый день прошёл отлично. Мы построили домик у реки, посадили пшеницу и завели стадо коров. Всё было по-домашнему уютно, пока однажды наш сервер не нашли гриферы. Они зашли под моим персонажем, начали все ломать и спамить в чат ссылки на свой Discord. К счастью, я успел выключить сервер и наш мир уцелел
Я был удивлен, что к нам кто-то подключился, потому-что адрес сервера я нигде не выкладывал. Оказалось, что нас нашли с помощью сканера серверов
Сканер серверов
Если вы запускаете сервер Minecraft, особенно с отключенной проверкой лицензий (online-mode=false
), вам стоит знать о сканерах серверов
Сканеры — это специальные скрипты или боты, которые автоматически перебирают IP-адреса и открытые порты в интернете в поисках доступных серверов Minecraft. Как только они находят сервер, особенно без авторизации, его адрес может попасть в открытые базы данных, Telegram-каналы или Discord-чаты с гриферами
Именно это и произошло с нашим сервером. Дальше расскажу как защититься от таких атак
Настройки для защиты от незваных гостей
Способ подойдет для сервера без проверки лицензий (online-mode=false
) и с открытым доступом из сети
Приведу список настроек сервера для защиты от сканеров, а дальше расскажу про каждую настройку подробнее:
Изменение стандартного порта сервера
Включение white-list
Отключение отображения списка игроков
Настройка плагина авторизации AuthMe
Изменение стандартного порта сервера
Чтобы спрятаться от сканеров, которые смотрят только порт по умолчанию, в файле server.properties
нужно поменять стандартный порт 25565
на другой
Включение white-list
Нужно установить white-list=true
в файле настроек сервера server.properties
Дальше нужно добавить ники игроков, с которыми хотим играть, в белый список. Это можно сделать через команду сервера whitelist add НИК_ИГРОКА
Важно! Настройка не защитит вас от входа злоумышленников, если не включена проверка лицензий (установлен online-mode=false
), потому что любой игрок может зайти под любым ником, даже если другой игрок уже занял его. В пункте настройки плагина AuthMe будет рассказано как устранить эту проблему
Отключение отображения имен игроков
По умолчанию, сервер отдает информацию о логинах игроков, которые сейчас есть на сервере. Эту информацию могут использовать злоумышленники, чтобы узнать ники из white-list
. Чтобы усложнить им жизнь, нужно установить настройку hide-online-players=true
в файле server.properties
Проверить работу настройки можно через сервисы мониторинга серверов. Я использовал https://mcstatus.io/


Настройка плагина авторизации AuthMe
Уязвимость серверов без проверки лицензий заключается в том, что любой игрок может зайти под любым ником. Поэтому гриферы смогли зайти под моим ником, а меня в этот момент выкинуло из игры
Для защиты ников без проверки лицензий можно использовать плагины для авторизации. Для нашего сервера был выбрал плагин AuthMe
Для добавления плагина нужно скачать его по ссылке и поместить в папку plugins. Дальше нужно запустить сервер, чтобы был сгенерирован конфиг config.yml
. В конфиг нужно внести следующие настройки:
# Другие настройки скрыты
settings:
restrictions:
# Могут ли пользователи использовать чат до авторизации?
# Если false, то до авторизации будут доступны только команды из списка ниже
allowChat: false
# Разрешенные команды для неавторизованных игроков
allowCommands:
- /login
# Запрещает заходить на сервер с занятым ником
ForceSingleSession: true
# Кик при вводе неправильного пароля
kickOnWrongPassword: true
# Могут ли игроки двигаться до ввода пароля?
allowMovement: false
# Время на ввод пароля до кика
timeout: 30
# Защита инвентаря до ввода пароля
ProtectInventoryBeforeLogIn: true
security:
registration:
# Отключение регистрации
enabled: false
Дальше нужно зарегистрировать игроков через консоль сервера, используя команду:
authme register test_name test_password

Теперь сервер защищен. Если злоумышленники все-таки найдут сервер и подберут логин, который есть в white-list,
то их остановит плагин. При входе на сервер игрок не сможет ничего делать, пока не введет команду /login `пароль от аккаунта в плагине`
Так же, теперь не получится зайти под ником, который уже занят другим игроком. Плагин выдаст такую ошибку

Теперь в логах сервера будет информация о попытках подключения к серверу. Я подключал AuthMe до изменения порта, поэтому увидел логи с попыткой входа от сканера. После изменения порта, сканеры меня пока не находили

Вывод
Если вы запускаете сервер Minecraft с доступом из сети, важно понимать, что он уязвим для атак злоумышленников. Даже если вы никому не сообщали IP-адрес, его всё равно могут найти с помощью сканера. К счастью, простые меры позволяют эффективно защититься от атак
Теперь наш сервер снова стал уютным и безопасным местом для совместной игры. Мне эти настройки помогли защитить мой сервер. Надеюсь, эта статья поможет и вам избежать неприятных сюрпризов
Удачной игры!