Закрыть порт linux mint

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

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

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

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

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

Для анализа портов, доступных извне используется программа 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.

Читайте также:  Open windows app on linux

Например, заблокируем попытки отправки почты подключением к любой машине по порту 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 | grep -i DROP

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

Закрыть порты 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 -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. Утилита сообщит, что произошла ошибка во время подключения, поскольку мы отбросили пакет:

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

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

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Как открыть или закрыть порт в Iptables

что посмотреть

Здравствуйте, уважаемые читатели. Сегодня наша тема: «Как открыть или закрыть порт в Iptables». В прошлой статье, мы делали установку утилиты Iptables в операционной системе CentOS. Теперь рассмотрим варианты, как с её помощью производить конфигурацию брандмауэра.

Файл конфигурации Iptables

Конфигурационный файл Iptables, находится по адресу /etc/sysconfig/iptables.

Конфигурация Iptables по умолчанию :

Есть три цепочки по умолчанию:

:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

INPUT – Входящие соединения.

FORWARD – Сквозные соединения.

OUTPUT – Исходящие соединения.

  • ACCEPT — глобальный атрибут для всей цепочки, это означает, что соединения в цепочке будут приниматься.
  • В квадратных скобках, количество соединений и пакетов. При просмотре состояния правил в консоли, счётчики будут активны, и будет отображаться количество в реальном времени.
  • Ниже, находится базовый набор правил.

Первое правило

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Второе правило

Третье правило

Четвёртое правило

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Пятое правило

-A INPUT -j REJECT --reject-with icmp-host-prohibited
  • Правило означает, что все отброшенные входящие соединения, будут отбрасываться с ответом — icmp запрещено.
Читайте также:  Running linux shell on windows

Шестое правило

-A FORWARD -j REJECT --reject-with icmp-host-prohibited
  • Это правило означает, что все отброшенные сквозные соединения, будут отбрасываться с ответом — icmp запрещено.

Открытие порта в Iptables

  • Для того, чтобы открыть какой-нибудь порт, нужно добавить разрешающее правило.
  • Например, чтобы открыть 80 порт для веб-сервера, нужно добавить такое правило:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
  • В конце строчки правила, находится атрибут ACCEPT, который и отвечает за открытие порта.
  • Чтобы изменения вступили в силу, нужно перезагрузить Iptables:
# systemctl restart iptables

Закрытие порта в Iptables

  • Если требуется принудительно закрыть какой-нибудь порт, то добавляемое правило будет выглядеть так:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j DROP
  • В примере, принудительно закрывается 80 порт.
  • В конце правила стоит атрибут DROP, который и отвечает за закрытие порта.
  • После перезагрузки Iptables, можно проверить конфигурацию:
# systemctl restart iptables
# iptables -L -v -n

Открытие нескольких портов в Iptables

  • Если нужно открыть (закрыть) несколько портов сразу, то можно не создавать правила для каждого порта, а использовать одно правило для нескольких портов:
-A INPUT -m state --state NEW -m tcp -p tcp --match multiport --dports 22,80 -j ACCEPT
  • Нужные порты указываются через запятую.
  • Перезагружаем Iptables, и проверяем конфигурацию:
# systemctl restart iptables
# iptables -L -v -n

Открытие диапазона портов в Iptables

  • Если есть необходимость открыть (закрыть) диапазон портов, то так же, как и в предыдущем случае, можно сделать это при помощи одного правила:
-A INPUT -m state --state NEW -m tcp -p tcp --match multiport --dports 49900:49999 -j ACCEPT
  • Диапазон портов указывается через двоеточие.
  • Выполняем перезагрузку Iptables, и проверяем конфигурацию:
# systemctl restart iptables
# iptables -L -v -n

Порядок считывания конфигурации

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

Глобальные настройки цепочек

Можно настроить глобальные атрибуты для имеющихся цепочек:

  • Если сервер не производит маршрутизацию, то можно указать глобальным атрибутом для цепочки FORWARD -> DROP.
  • После добавления необходимых правил для входящих соединений, можно указать глобальный атрибут DROP, и для цепочки INPUT.
  • Если нет понимания количества всех необходимых портов, нужных для исходящих соединений самого сервера, то для цепочки OUTPUT можно оставить глобальным атрибутом ACCEPT.

Это были базовые примеры настроек, которые можно использовать при конфигурации брандмауэра Linux, при помощи утилиты Iptables.

Сегодня мы рассмотрели тему: «Как открыть или закрыть порт в Iptables». Рассмотрели базовые примеры использования Iptables.

Надеюсь статья была вам полезна. До встречи в новых статьях.

Видео на тему «Как открыть или закрыть порт в Iptables»:

Источник

Оцените статью
Adblock
detector