1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем SimMiMo, 6 май 2020.

  1. Автор темы
    SimMiMo

    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, но это уже имхо. Про то, что не качать с инета ничего - это вообще базовые вещи.
    Оставляйте ваши дополнения и замечания, поможем новичкам и друг-другу.
     
    Последнее редактирование: 27 май 2020
  2. Saharo4ek

    Saharo4ek Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    tin
    Зачем этот совет с одним сервером в сети банжи? Порт-то мы не закроем через bungeecord: true, сразу сервер ддосом положат (даже ботами могут через свою банжу(так делал я)). Неважно сколько у вас серверов в банже, хоть один, хоть миллион, защита только одна - закрытие портов и никак больше!
     
  3. Автор темы
    SimMiMo

    SimMiMo Активный участник Пользователь

    Баллы:
    76
    как на локалхост прорвутся?)
     
  4. Sigvegutt

    Sigvegutt Активный участник Пользователь

    Баллы:
    96
    Ну а если не локалхост? Может тебя не правильно поймут. Может подключены сайты авто-доната и т.п.

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

    P.S. Плагин может заражать OC или другие плагины?
     
  5. Автор темы
    SimMiMo

    SimMiMo Активный участник Пользователь

    Баллы:
    76
    Да, лично такой мне залетал. Инфицирует и пересобирает другие .jar в папке.
    Допишу туториал слегка тогда.
     
  6. Saharo4ek

    Saharo4ek Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    tin
    Мы же оба с тобой понимаем для кого эти туториалы пишутся)
    Когда я последний раз сидел на хосте, просто на хосте с панелью - никак ты там 127.0.0.1 не выставишь. Зато порты прикрыть можно. От этого и отталкиваюсь.
     
  7. iForgotPassword

    iForgotPassword Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    iForgotPassword
    Хотелось бы чутка подробнее про защиту linux системы, но, думаю, по ключевым словам смогу найти информацию в гугле.
    Спасибо, большое познавательно!
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Сразу в урну.
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    В целом статья ниочем. Просто нужно чидать доки по банжикорду и плагинам. И не качать с левых источников плагины.
     
  10. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    А если та же джессика будет атаковать? Ты полезешь изучать пакеты майна чтобы узнать через какой именно пакет идёт абьюз?
    Новые уязвимости появляются каждый день, каждую не разберёшь до мелочей.

    p.s В целом да - тема юзелесс, но только потому-что в ней устаревшая инфа.
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Не полезу, ибо новые версии стали умнее. Да и основные эксплоиты на креативе завязаны, что креатив фильтр отрежет. Ну а пакетлимитер накажет все остальное связанное с быстрой отправкой пакетов на сервер.
     
  12. Автор темы
    SimMiMo

    SimMiMo Активный участник Пользователь

    Баллы:
    76
    Эти способы также актуальны до тех пор, пока не пофиксят на своем сервере )
    И да, выходит множество новых, а мне лень тему дополнять.
    Сейчас в основном ломать/крашить через FAWE пытаются, а у меня он даже не стоит.
    Да и в целом конкретные способы это лишь примеры здесь больше, как могут обходить защиту сервера. Я больше делал акцент на Linux-фишках, которые стоит внедрять для повышения безопасности, и даже не только для Майнкрафт серверов. Многие все еще юзают plaintext пароли и это дикий стыд, или root юзера.
     
  13. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    Пакетлимитер полезная вещь, не спорю, но новые способы создаются каждый день. Раз на раз не приходится как говорится. Теме опять же требуется быть актуальной чтобы оповещать об новых способах защиты от эксплоитов/etc.
    Да в целом принимаешь баг репорты от админов и пишешь в свою тему/мониторишь всякие говнобеседы с хаками - профит.
    Мы русские, с нами rm -rf.
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    А пакет лимитер работает и дальше, пусть создают. Как и креатив лимитер, которому не нужно знать о новых кривых предметах.
     
  15. SaMEC

    SaMEC Старожил Пользователь

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Та бред же. Цель взлома получить админку, когда у тебя уже есть админка. Порочный круг не?
     
  16. Автор темы
    SimMiMo

    SimMiMo Активный участник Пользователь

    Баллы:
    76
    Цель взломщика выкачать бд обычно, и ломают часто донатеров с командами плагинов.
     
  17. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    Дак не все методы основываются на пакетлимитере, более того пакетлимитер не спасёт сервер от дополнительной перегрузки. (В случае с тем же pex promote)
     
  18. SaMEC

    SaMEC Старожил Пользователь

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    выдавать запретные команды донатерам, это уже разрешение на взлом
     
  19. Автор темы
    SimMiMo

    SimMiMo Активный участник Пользователь

    Баллы:
    76
    Почему через какую-то команду обычную должен взламываться проект?))
    В идеале даже через главного администратора (создателя) должно быть нельзя угнать бд.
     
  20. SaMEC

    SaMEC Старожил Пользователь

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Не угонят если не сливать, не палить, не повторять, не тупить(с легким паролем от аккаунта)
    Это уже криворукость админа(создателя).
     

Поделиться этой страницей