Как и зачем закрывать порты на серверах с BungeeCord: правильная защита от взломов

Зачем закрывать порты
При использовании BungeeCord-сборок на вашем сервере запущено несколько игровых серверов: сам BungeeCord и серверы Spigot (обычно это Выживание, Мини-игры и так далее). Сама система работает так — игрок заходит на BungeeCord и его перекидывает на нужный сервер Spigot, в зависимости от настроек. И перед тем, как попасть на основной сервер, игрок проходит авторизацию (плагин для BungeeCord или плагин на отдельном Spigot сервере для авторизации).

Если все серверы Spigot доступны для подключения любому человеку извне, а не только локально через BungeeCord, то злоумышленник может зайти напрямую на сервер выживания или мини-игры, минуя BungeeCord и авторизацию. Вот почему важно закрыть порты Spigot серверов от внешнего доступа, чтобы попасть на них можно было только «сквозь» прокси-сервер BungeeCord

Как закрыть порты
Эта инструкция написана для операционных систем Debian и Ubuntu. На других операционных системах семейства Linux могут быть незначительные отличия.

Важно! Эта инструкция требует наличия SSH root доступа. Если у Вас есть только панель управления майнкрафт серверами, обратитесь в поддержку для закрытия портов.

Для закрытия портов будем использовать системную утилиту iptables.

Важно! Перед тем, как закрывать порты, рекомендую проверить правила iptables командой iptables -L. Возможно, вы уже устанавливали какие-то правила. Инструкция по удалению ненужных правил есть в конце.

Правила iptables считываются последовательно сверху вниз, поэтому
1. Разрешаем доступ для локальных подключений к любому порту.
Это важно, потому что BungeeCord должен иметь возможность подключаться к серверам Spigot.

iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s 0.0.0.0 -j ACCEPT

!!! ВМЕСТО 0.0.0.0 ПОДСТАВЬТЕ IP ВАШЕГО СЕРВЕРА (без порта). НАПРИМЕР: 216.58.215.46
ПРИМЕЧАНИЕ:
Если Вы используете несколько VDS или выделенных серверов для своего проекта, разрешите доступ для каждого сервера.
Например:
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s 87.240.180.136 -j ACCEPT
iptables -A INPUT -s 216.58.215.46 -j ACCEPT

и так далее…

2. Закрываем доступ к портам из всех мест, кроме разрешенных
iptables -A INPUT -p tcp --dport 25566 -j DROP
iptables -A INPUT -p tcp --dport 25567 -j DROP
iptables -A INPUT -p tcp --dport 25568 -j DROP

и так далее…
ПРИМЕЧАНИЕ:
Если Вы хотите закрыть сразу диапазон портов, вы можете указать его в виде 25566:25590
Например:
iptables -A INPUT -p tcp --dport 25566:25590 -j DROP

ПРИМЕЧАНИЕ:
Закрывать порты самого BungeeCord не нужно, он должен быть доступен из любого места (а не только из разрешенных), чтобы игроки могли подключиться

3. Сохраняем правила
Это очень важный пункт. Если не сохранить правила, они сбросятся при перезапуске VDS или выделенного сервера.

Если Вы закрываете порты впервые и еще не пользовались утилитой iptables-persistent, ее нужно установить:

apt-get install iptables-persistent

При установке Вас спросят, сохранить-ли правила iptables. Оба раза отвечайте Yes.

Если утилита iptables-persistent уже установлена, то для сохранения правил воспользуйтесь командой:

dpkg-reconfigure iptables-persistent

И опять-таки оба раза отвечайте Yes.

Дополнительная информация
Удаление ненужных правил

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

iptables -L --line-numbers

Для удаления правила воспользуйтесь командой

iptables -D INPUT N

вместо N подставьте номер нужного правила.
Например:
iptables -D INPUT 9


bill.minehosting.pro/billmgr?func=register&lang=ru