Как закрыть порты на сервере майнкрафт debian

Обновлено: 03.07.2024

Серверы и компьютеры, подключенные к интернету подвержены атакам и сканированию различных скриптов, программ и злоумышленников. А поскольку известно, что во всех системах могут быть уязвимости, то лучше, чтобы извне было видно минимум портов.

Некоторые порты должны быть видны постоянно, например, порт веб-сервера, другие используются только системными администраторами, а еще одни, вообще, должны быть доступны только локально. Несмотря на то что все сервисы имеют методы авторизации, и не позволят подключиться кому попало, они могут быть уязвимы, поэтому все лишнее лучше закрыть. В этой статье мы рассмотрим как закрыть порт iptables. Мы закроем нужные порты полностью, а также сделаем некоторые из них доступными на время, после попытки подключения к определенному порту.

Как закрыть порт Iptables

В этой статье я не стану подробно рассматривать все возможности Iptables, виды цепочек и как работает эта служба. Все это мы рассмотрели в статье настройка Iptables для начинающих. Вместо этого, перейдем ближе к делу. Чтобы заблокировать порт нам сначала нужно понять какие порты открыты в Linux и за что они отвечают. Чтобы посмотреть какие порты слушаются локально, можно использовать утилиту netstat:

sudo netstat -ntulp

Для анализа портов, доступных извне используется программа nmap:


Как видите, извне у нас, кроме стандартных портов веб-сервера, доступны mysql, ftp, dns и другие сервисы. Некоторые из них не должны быть доступны публично. Это не критично, но и нежелательно. Мы можем очень просто закрыть такие порты с помощью iptables. Общий синтаксис команды для блокировки порта будет выглядеть вот так:

$ iptables -A INPUT -p tcp --dport номер_порта -j DROP

Например, если мы хотим заблокировать порт iptables mysql, то необходимо выполнить:

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

Можно закрыть порт для определенного интерфейса, например, eth1:

sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -j DROP

Или даже для ip и целой подсети. Например, закрыть все подключения к порту 22 SSH кроме IP адреса 1.2.3.4:

sudo iptables -A INPUT -i eth1 -p tcp -s !1.2.3.4 --dport 22 -j DROP

Здесь знак восклицания означает инверсию, то есть применить ко всем кроме этого. Можно убрать этот знак и указать только IP, к которым нужно применить запрет. Мы рассмотрели как закрыть порт iptables в цепочке INPUT, которая отвечает за входящие соединения, это более применимо к серверам. Но что, если нужно закрыть подключение к удаленному порту из этого компьютера или нашей сети? Для этого существует цепочка OUTPUT.

Например, заблокируем попытки отправки почты подключением к любой машине по порту 25:

sudo iptables -A OUTPUT -p tcp --dport 25 -j DROP

Также, как и раньше, вы можете указать исходящий сетевой интерфейс, только теперь он указывается опцией -o:

sudo iptables -A OUTPUT -o eth1 -p tcp --dport 25 -j DROP

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

Чтобы посмотреть текущие правила для каждой из цепочек выполните:

sudo iptables -L -n -v

Такая команда покажет все правила, а если вы хотите только информацию о заблокированных портах, выполните:

sudo iptables -L -n -v | grep -i DROP


Очистить все правила в случае возникновения проблем можно командой:

sudo iptables -F

Закрыть порты iptables, кроме разрешенных

По умолчанию политика для цепочек INPUT и OUTPUT - разрешать все подключения, а уже с помощью правил мы указываем какие подключения стоит запретить. Но если вы хотите закрыть все порты кроме разрешенных iptables. То нужно поступить по-другому. Мы поменяем политику по умолчанию, так чтобы она запрещала все и разрешим только доступ к нужным портам.

Например, меняем политику для цепочки INPUT:

sudo iptables -P INPUT DROP

Затем разрешаем все входящие соединения от локального интерфейса:

sudo iptables -A INPUT -i lo -j ACCEPT

Затем разрешаем доступ к портам 80 и 22:

sudo iptables -A INPUT -i eth0 -p tcp --dport 80 --match state --state NEW -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 80 --match state --state NEW -j ACCEPT

Как скрыть порт iptables?

Закрыть порт, это очень хорошо, но что если он нужен нам открытым и желательно, чтобы для других этот же порт был недоступен. Существует такая технология, как Port Knocking, которая позволяет открывать нужный порт только для определенного ip адреса и только после обращения его к нужному порту. Например, нам нужно защитить SSH от перебора паролей и несанкционированного доступа. Для этого все пакеты, которые будут приходить на порт 22, 111 и 112 мы будем перенаправлять в цепочку SSH.

Как вы уже догадались, порт 22 нам непосредственно нужен, на порты 111 и 112 будут включать его и отключать соответственно. Когда пользователь обратится к порту 111 мы укажем системе, что нужно присвоить всем его пакетам имя ssh, при обращении к порту 112 уберем этот флаг. А если пользователь решит зайти на 22 порт, то проверим присвоено ли этому пакету имя SSH, если да, то пропустим, в противном случае - отбросим.

Сначала создаем цепочку SSH:

sudo iptables -N SSH

sudo iptables -A INPUT -p tcp --dport 22 -j SSH
$ sudo iptables -A INPUT -p tcp --dport 111 -j SSH
$ sudo iptables -A INPUT -p tcp --dport 112 -j SSH

При обращении к порту 111 присваиваем IP адресу имя, сам пакет дальше не пускаем:

sudo iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 111 -m recent --set --name SSH --rsource -j DROP

При обращении к 112 убираем имя у IP:

sudo iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 112 -m recent --remove --name SSH --rsource -j DROP

И нам осталось только проверить имеет ли наш пакет, который пытается обратиться к 22 порту имя SSH и если да, то мы его одобряем:

sudo iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 22 -m recent --rcheck --name SSH --rsource -j ACCEPT

Вот и все. Теперь для того чтобы открыть наш SSH порт будет достаточно попытаться подключиться к порту 111 с помощью telnet. Утилита сообщит, что произошла ошибка во время подключения, поскольку мы отбросили пакет:

telnet ip_адрес 111

Но зато теперь вы можете получить доступ к сервису SSH на порту 22. Чтобы снова закрыть порт выполните:

telnet ip_адрес 112

Даже при открытии, этот порт доступен только вашему ip адресу и больше никому другому. Но нужно заметить, что это не панацея. Кто-либо может случайно запросить порт, который предназначен для активации, и таким образом, открыть себе доступ к службе SSH. Так что надежные пароли и ключи шифрования это не отменяет.

Выводы

В этой статье мы рассмотрели как закрыть порт iptables, а также как его скрыть с возможностью подключения, когда это будет необходимо. Надеюсь, эта информация была для вас полезной.

Зачем закрывать порты
При использовании 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.


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

2. Закрываем доступ к портам из всех мест, кроме разрешенных

и так далее…
ПРИМЕЧАНИЕ:
Если Вы хотите закрыть сразу диапазон портов, вы можете указать его в виде 25566:25590
Например:

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

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

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


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

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


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

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

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

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

Как закрыть порты

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

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

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

1. Разрешаем доступ для локальных подключений к любому порту.

Это важно, потому что BungeeCord (Прокси) должен иметь возможность подключаться к серверам/режимам.

2. Закрываем доступ к портам из всех мест, кроме разрешенных

3. Сохраняем правила

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

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

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

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

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

Я написал хостеру, он ответил, что у меня увеличился трафик. Но откуда ему взяться? По моей статистике все оставалось почти так же. Но вот моя панель на хостинге показывала, что через мой сервер часто идет огромный трафик измеряемый в несколько мегабит!



Сейчас на скрине он нормальный, а был в тысячи раз больше. Откуда же он берется? Я запустил команду, чтобы узнать, что там ко мне присоединились?

tcpdump -npi eth0 port domain

И вот что показала мне эта команда:

Как видно, через меня кто то качает п@рно торренты с torrents.empornium.me. Как это происходит я пока не знаю, но чтобы заблокировать наглецов и весь такой торрент трафик можно просто быстро закрыть все порты кроме нужных.

Как закрыть порты на сервере?

Для начала нужно установить простенький фаервол ufw:

В Ubuntu он установлен по умолчанию, но не запущен. Запустим его:

После этого ваши сайты не должны открываться, так как мы заблокировали ВСЕ! Теперь нужно просто открыт нужные нам порты простой командой:

Я открыл три порта: 22 ssh порт, 80 порт прокси сервера и 8080 порт веб сервера. После этого сайты стали нормально открываться. Чтобы проверить правила для ваших портов дайте команду:

У меня показало следующее:

Значит все нормально, после этого трафик резко снизился, хотя торренты продолжают пока стучаться в мой фаервол. Но соединится они не могут, и это хорошо. Нужно будет найти корень проблемы, но это позже с помощью тех поддержки, главное, что враг обезоружен!

Через 10 минут решил дописать немного статью, так как тех поддержка сказала, что это еще не все, порты на вход я закрыл, а на выход все разрешено. Решается все одной командой:

Теперь проверим все командой sudo ufw status verbose и смотрим:

Правда остался открыт протокол шестой версии, но кажется это не критично.

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

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

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

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

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

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

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

2. Закрываем доступ к портам из всех мест, кроме разрешенных

и так далее…
ПРИМЕЧАНИЕ:
Если Вы хотите закрыть сразу диапазон портов, вы можете указать его в виде 25566:25590
Например:

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

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

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

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

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

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

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

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

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

Александр Карпюк 3 meses atrás

Да не смог хост купить тли 3 nбесплатных есть,но это не то что искал я там Нада уметь плагины установлювать,а я сборку хочу готовую играть

Александр Карпюк 3 meses atrás

Слушай мелкий ,а как сделать чтобы игроки могли играть на моем сервере если ноут мой выключен,тоесть чтобы я не включал ноут и сервак запускал?

[I]MaX[G] TM 3 meses atrás

Во-первых, мне уже 20, я отслужил и закончил полностью учебу, на год видео смотри. А во-вторых никак не сможешь, когда ты выключаешь компьютер завершаются все процессы, останавливается считывание памяти с жесткого диска, а если ХДД выключен то системе неоткуда читать информацию. Поэтому никак вообще. Это невозможно.

Mordecay Anos atrás

Как узнать свой порт

__Juma__ j 2 anos atrás

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

__Juma__ j 2 anos atrás

у меня есть кнопка мир мир в аду мир в энд а про сервер ничего

__Juma__ j 2 anos atrás

Yulian Zubachev 3 anos atrás

Weyn 3 anos atrás

ты мне очень помог лайк и потписка !

[I]MaX[G] TM 3 anos atrás

[I]MaX[G] TM 3 anos atrás

@Лизок:з 《original》 В каком смысле?

Xx_Zoomi_xx * 3 anos atrás

Рамбал 3 anos atrás

а сервер надо скачивать

niklas775 3 anos atrás

BBout Derkon 4 anos atrás

ShterlecGame 4 anos atrás

Mr Dark 4 anos atrás

lexus и admin 4 anos atrás

Сам ты абормот но т ы мне помог чтобы избавиться от лагов

Kloun Mina 4 anos atrás

нурбек Кабдулжапаров 4 anos atrás

а если создать сервер с помошию хамачи тогда остольные игроки тоже должы будут зоходит через?

Top Gamer Anos atrás

[I]MaX[G] TM а друг должен подключатса у комнате в хамачи?

Kvantik 20031 4 anos atrás

@LeXuS ™ Дай ip сервера

[I]MaX[G] TM 4 anos atrás

все правильно, они тоже должны будут ввести айпи, который задал ваш хамачи, а так же пароль. Ну максимум 5 человек может играть через ваш хамачи, в том числе и вы.

SuperZeus 4 anos atrás

А как с другом поиграть можно?

Anime Hikki 4 anos atrás

Читайте также: