Войти или зарегистрироваться

Туториал Базовая защита Minecraft сервера

SimMiMo

Активный участник
Пользователь
Баллы
76
В последнее время, да и раньше, майнкрафт сервера часто подвергаются взлому и будут подвергаться в будущем. Ломать пытаются как обычные школьники, так и более продвинутые, чтобы заработать себе на обеды (увести вашу бд) или просто позабавиться и крашнуть проект. Странно, но внятного туториала нет ни на spigotmc, ни на rubukkit. Во всяком случае, я не нашел его, поэтому решил написать сам.
На самом деле, меня также ломали, что уж тут греха таить, да и я вовсе не специалист в защите, также рядовой участник minecraft комьюнити, как и многие.
В данном туториале мы рассмотрим базовые элементы защиты, которые усложнят хацкерам жизнь.
Важно! Если у вас уже лежит на дедике зараженный плагин, то все приведенные ниже действия довольно-таки бесполезны, перед скачиванием необходимо проверить плагин и отключить авто-обновления. Также в подобной ситуации придется переустанавливать ОС и перекачивать плагины.
Ох уж эти открытые порты.
Сколько серверов было взломано через порты, наверное никто не знает. Хотя закрыть их не так уж и сложно. Достаточно лишь поставить в spigot.yml:
Код:
bungeecord: true
и адрес сервера 127.0.0.1 в server.properties, если у вас один сервер в банже. Если несколько, нужно уже слегка напрячься, и использовать iptables+ipset. Если у вас один сервер и сайт авто-доната на другом хостинге, нужно также ставить правило iptables с добавлением всех портов по инструкции ниже и добавлять ip хостинга в ipset.
Ставим пакет ipset под вашу ОС:
Код:
apt-get install ipset
Для примера я использую Debian дистрибутив. дальше создаем его:
Код:
ipset -N whitelist iphash
Добавляем в ipset нужные ip дедиков:
Код:
ipset -A whitelist 8.8.8.8
И ставим правило iptables:
Код:
iptables -t raw -A PREROUTING -p tcp -i eth0 -m multiport --dports порт1,порт2 -m set ! --match-set whitelist src -j DROP
Так, надо бы объяснить правило. Используем таблицу raw, потому что она самая первая в обработке соединений, цепочку prerouting поэтому же. Протокол tcp в майне, кроме query. В dports можно до 16 портов добавить и не нужно плодить 16 лишних правил. Дальше, если ip соединения не совпадает в whitelist, выпинываем его. Интерфейс eth0 может быть у вас другой, смотрите через
Код:
ip a
например. Но закрыть обычные порты мало, нужно еще rcon закрыть, о чем мало кто помнит. А еще порт mysql и любые, торчащие наружу.
Проверить наличие правила можно так:
Код:
iptables -v -L -n -t raw
Если нужно добавить порт, сбрасываем правила:
Код:
iptables -t raw -F
и ставим обратно. Я лично сохраняю правила своим способом при ребуте, так как у меня их много и они зависят от условий, вам же порекомендую iptables-persistent:
Код:
apt-get install iptables-persistent
/etc/init.d/iptables-persistent save
/etc/init.d/iptables-persistent reload
Ubuntu 16.04+ Server:
Код:
netfilter-persistent save
netfilter-persistent reload
Дырявые плагины.
Так уж вышло, что многие плагины имеют кучу абсолютно ненужного функционала, лишь бы автору сделать новый коммит в github, либо владельцы серверов не просчитывают риски некоторых плагинов. Кто дырявый, автор плагина или владелец сервера, я не берусь судить и оставлю на выбор читателя. Предлагаю каждому в эту тему дополнять проблемные плагины и вариант лечения.
HolographicDisplays
Уже многие знают про дыру в https://github.com/filoghost/HolographicDisplays до 2.3.0 версии, где через /hd readtext читали файлики паролей дедика и много чего еще интересного. Кстати, в главе "Root-юзер и java несовместимы вместе" я описываю частичную защиту от этого.
Если зайти на популярные сервера и ввести /hd, у многих покажет древнюю версию плагина.
CommandNpc
Данный плагин и ему подобные имеют возможность исполнять команду от имени ConsoleSender, что уже чревато. Достаточно хакеру получить доступ к одному из аккаунтов администраторов и поставить неприметного npc в яму, затем назначить ему команду с выдачей звезды. Либо у вас есть квест-мастера с доступом, взломав их можно сделать эскалацию прав до *.
Essentials
В используемом многими Essentials есть команда /pt, она же /powertool, можно забиндить команду /op ник и выдать другому человеку (сначала взломав опку), опять же если выдача оп другим игрокам у вас запрещена, а OpGuard не стоит, о чем ниже. Также можно биндить другие команды и спамить, залагивая сервер.
AutoMessage
В данном плагине, как и в CommandNPC, есть возможность исполнения команд от лица сервера. Это очень опасно, неправильная настройка прав или доступ к ОПке ничего хорошего не сулит.
Многие плагины.
Во многих плагинах есть команда просмотра конфига, через нее можно спалить пароль от бд, например, само собой, взломав админа. Нужно закрывать /pex, /lp полностью, кроме исполнения от консоли, да и в целом закрывать админские команды. Также плагины типа LuckyPerms имеют возможность миграции на другой сервер базы данных из коробки.
Думаю, я знаю еще дыры, но сразу все припомнить сложно, предлагаю дополнять этот раздел. Что уж тут говорить про банальщину с AuthMe сервером-авторизации и /server, это должно быть на автоматизме.
Что-то менее тривиальное.
Здесь уже можно вспомнить про SQL-инъекции в java или о php-onepage сайте, ведь все юзают пыхъ. Достаточно напомнить, что нужно везде использовать PDO и prepared statement, но ведь во многих скриптах и паблик плагинах этого нет, инпут не валидируется регуляркой - туда летит любая дичь.
Скорее всего рядовому владельцу сервера от такого сложно защититься, да и у меня тоже не везде все идеально в этом плане. Что можно сделать на сайте? Через php.ini, при наличии доступа, можно, например, запретить исполнение system, shell_exec и прочего через disable_functions. Также лучше ограничить директорию исполнения php-скриптов через open_basedir.
Защищаем админки.
У многих серверов есть что-то вроде админ-панели и, как минимум, phpMyAdmin, чаще всего доступные через соотвествующий адрес в строке веб-обозревателя. Вообще, сначала я бы посоветовал обновить pma (phpMyAdmin далее) до последней версии и поставить Google 2FA на юзера, это сможет почти каждый. Также нужно вынести панель на секретный адрес, в идеале вообще все панели защищать секретными куками, доп. паролями, доступом только с вашего статик. ip/vpn. Но тут уже нужны знания, может когда-то и опишу. Туториалы на эту тему легко найти в сети.
Можно обходиться и без pma, но утилитой все же не так удобно через терминал.
Все еще юзаешь plaintext пароли в 2020? Тогда мы идем к вам.
Эх, текстовые пароли, что-то прям навеяло нулевыми.. Давно уже известна наука криптография и система открытый/закрытый ключ. Эти уже не новые принципы я и предлагаю внедрить для начала к нам на дедик. Отказавшись от доступа через пароль, вы сэкономите время на ввод (да-да знаю про программы защищенного хранения паролей, они нужны тоже), а также защитите себя нормальным каким-нибудь RSA 2048 ;) Разве звучит не круто?
Туториалы на этот счет можно найти в сети.
Хватит уже md5 хэши до сих пор использовать в хранении паролей игроков, лучше поставьте bcrypt.
Root-юзер и java несовместимы вместе.
Дай угадаю, все java скрины в дедике запущены под рутом? Ая-яй. А ведь можно было бы создать уже наконец отдельного юзера и запускать java под ним. Зачем? Ну, банально, под root через Runtime.getRuntime().exec() в java можно сделать все что угодно с дедиком одной строкой кода. Да, без root тоже много что можно, но уже меньше.
Наверное, в идеале использовать юзера без bash, если такое возможно в вашем случае, я не тестил.
Но давайте уже создадим хотя бы с башем:
Код:
useradd newuser -s /bin/bash
chown -R newuser:newuser /home/
Лучше вообще отказаться от рута, но заходить под юзера можно и под ним через судо:
Код:
apt-get install sudo
sudo -u newuser sh -c 'script /dev/null'
В идеале вообще использовать docker-контейнеры.
Защита ОП-аккаунтов
Возвращаемся к плагинам и аккаунтам, а тут у нас есть лица, имеющие ОП/звезду, в идеале конечно такое не должно случаться, но мы то знаем,
продажный адмен
Защита - https://github.com/RezzedUp/OpGuard, довольно-таки неплохой плагин. И это не идеальная защита, а вот идеальную уже сложно сделать.
Бекапы - наше все.
Иметь отдельный съемный диск с архивами дедиков - необходимо, вдруг нужно резко все переставить. Скрипт с бекапом бд в облако тоже не лишний.
Вместо заключения.
Я описал достаточно простые и банальные вещи, есть еще масса лазеек, в том числе я не упомянул социальную инженерию, например, недавно многих ютуберов с миллионами подписок ломали через зараженный файл на корпоративную почту, уводили акки и не спасали 2fa. В таких случаях лучше вообще винду выкинуть взамен macos/linux, но это уже имхо. Про то, что не качать с инета ничего - это вообще базовые вещи.
Оставляйте ваши дополнения и замечания, поможем новичкам и друг-другу.
 
Последнее редактирование:
Зачем этот совет с одним сервером в сети банжи? Порт-то мы не закроем через bungeecord: true, сразу сервер ддосом положат (даже ботами могут через свою банжу(так делал я)). Неважно сколько у вас серверов в банже, хоть один, хоть миллион, защита только одна - закрытие портов и никак больше!
 
Зачем этот совет с одним сервером в сети банжи? Порт-то мы не закроем через bungeecord: true, сразу сервер ддосом положат (даже ботами могут через свою банжу(так делал я)). Неважно сколько у вас серверов в банже, хоть один, хоть миллион, защита только одна - закрытие портов и никак больше!
и адрес сервера 127.0.0.1, если у вас один сервер в банже.
как на локалхост прорвутся?)
 
как на локалхост прорвутся?)
Ну а если не локалхост? Может тебя не правильно поймут. Может подключены сайты авто-доната и т.п.

А так очень хороший туториал, спасибо! :good:

Важно! Если у вас уже лежит на дедике зараженный плагин, то все приведенные ниже действия довольно-таки бесполезны, перед скачиванием необходимо проверить плагин и отключить авто-обновления. Также в подобной ситуации придется переустанавливать ОС и перекачивать плагины.
P.S. Плагин может заражать OC или другие плагины?
 
Ну а если не локалхост? Может тебя не правильно поймут. Может подключены сайты авто-доната и т.п.

А так очень хороший туториал, спасибо! :good:


P.S. Плагин может заражать OC или другие плагины?
Да, лично такой мне залетал. Инфицирует и пересобирает другие .jar в папке.
Допишу туториал слегка тогда.
 
как на локалхост прорвутся?)
Мы же оба с тобой понимаем для кого эти туториалы пишутся)
Когда я последний раз сидел на хосте, просто на хосте с панелью - никак ты там 127.0.0.1 не выставишь. Зато порты прикрыть можно. От этого и отталкиваюсь.
 
Хотелось бы чутка подробнее про защиту linux системы, но, думаю, по ключевым словам смогу найти информацию в гугле.
Спасибо, большое познавательно!
 
В целом статья ниочем. Просто нужно чидать доки по банжикорду и плагинам. И не качать с левых источников плагины.
 
Просто нужно чидать доки по банжикорду и плагинам.
А если та же джессика будет атаковать? Ты полезешь изучать пакеты майна чтобы узнать через какой именно пакет идёт абьюз?
Новые уязвимости появляются каждый день, каждую не разберёшь до мелочей.

p.s В целом да - тема юзелесс, но только потому-что в ней устаревшая инфа.
 
А если та же джессика будет атаковать? Ты полезешь изучать пакеты майна чтобы узнать через какой именно пакет идёт абьюз?
Новые уязвимости появляются каждый день, каждую не разберёшь до мелочей.

p.s В целом да - тема юзелесс, но только потому-что в ней устаревшая инфа.
Не полезу, ибо новые версии стали умнее. Да и основные эксплоиты на креативе завязаны, что креатив фильтр отрежет. Ну а пакетлимитер накажет все остальное связанное с быстрой отправкой пакетов на сервер.
 
А если та же джессика будет атаковать? Ты полезешь изучать пакеты майна чтобы узнать через какой именно пакет идёт абьюз?
Новые уязвимости появляются каждый день, каждую не разберёшь до мелочей.

p.s В целом да - тема юзелесс, но только потому-что в ней устаревшая инфа.
Эти способы также актуальны до тех пор, пока не пофиксят на своем сервере )
И да, выходит множество новых, а мне лень тему дополнять.
Сейчас в основном ломать/крашить через FAWE пытаются, а у меня он даже не стоит.
Да и в целом конкретные способы это лишь примеры здесь больше, как могут обходить защиту сервера. Я больше делал акцент на Linux-фишках, которые стоит внедрять для повышения безопасности, и даже не только для Майнкрафт серверов. Многие все еще юзают plaintext пароли и это дикий стыд, или root юзера.
 
Не полезу, ибо новые версии стали умнее. Да и основные эксплоиты на креативе завязаны, что креатив фильтр отрежет. Ну а пакетлимитер накажет все остальное связанное с быстрой отправкой пакетов на сервер.
Пакетлимитер полезная вещь, не спорю, но новые способы создаются каждый день. Раз на раз не приходится как говорится. Теме опять же требуется быть актуальной чтобы оповещать об новых способах защиты от эксплоитов/etc.
Сейчас в основном ломать/крашить через FAWE пытаются, а у меня он даже не стоит.
Да в целом принимаешь баг репорты от админов и пишешь в свою тему/мониторишь всякие говнобеседы с хаками - профит.
Многие все еще юзают plaintext пароли и это дикий стыд, или root юзера.
Мы русские, с нами rm -rf.
 
Та бред же. Цель взлома получить админку, когда у тебя уже есть админка. Порочный круг не?
 
А пакет лимитер работает и дальше, пусть создают. Как и креатив лимитер, которому не нужно знать о новых кривых предметах.
Дак не все методы основываются на пакетлимитере, более того пакетлимитер не спасёт сервер от дополнительной перегрузки. (В случае с тем же pex promote)
 
выдавать запретные команды донатерам, это уже разрешение на взлом
Почему через какую-то команду обычную должен взламываться проект?))
В идеале даже через главного администратора (создателя) должно быть нельзя угнать бд.
 
Почему через какую-то команду обычную должен взламываться проект?))
В идеале даже через главного администратора (создателя) должно быть нельзя угнать бд.
Не угонят если не сливать, не палить, не повторять, не тупить(с легким паролем от аккаунта)
Это уже криворукость админа(создателя).
 
Назад
Верх