Здравствуйте, уважаемые читатели. Сегодня наша тема: «Как открыть или закрыть порт в 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 — глобальный атрибут для всей цепочки, это означает, что соединения в цепочке будут приниматься.
- В квадратных скобках, количество соединений и пакетов. При просмотре состояния правил в консоли, счётчики будут активны, и будет отображаться количество в реальном времени.
- Ниже, находится базовый набор правил.
Первое правило
Как открыть или закрыть порт в Iptables
-A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT
- Означает, что уже произведённые входящие соединения, не будут прерваны.
Второе правило
-A INPUT -p icmp -j ACCEPT
- Разрешает входящие соединения для протокола icmp.
Третье правило
-A INPUT -i lo -j ACCEPT
- Разрешает входящие соединения для внутренней сети сервера.
Четвёртое правило
-A INPUT -p tcp -m state —state NEW -m tcp —dport 22 -j ACCEPT
- Открывает порт для SSH соединений.
Пятое правило
-A INPUT -j REJECT —reject-with icmp-host-prohibited
- Правило означает, что все отброшенные входящие соединения, будут отбрасываться с ответом — icmp запрещено.
Шестое правило
-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 -L -v -n
- Как видно на картинке, 80 порт открыт для входящих соединений.
Закрытие порта в 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
- Как видно на картинке, 80 порт закрыт для входящих соединений.
Открытие нескольких портов в 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
- Порты 22 и 80 открыты для входящих соединений.
Открытие диапазона портов в 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
- Как видно на картинке, диапазон портов 49900:49999 открыт для входящих соединений.
Порядок считывания конфигурации
- Считываются все имеющиеся правила, и если нет правил для какой-нибудь цепочки, то действует глобальный атрибут, указанный сверху, рядом с названием цепочки.
- Если правило для какого-нибудь соединения не назначено, то так же будет задействован глобальный атрибут цепочки.
Глобальные настройки цепочек
Можно настроить глобальные атрибуты для имеющихся цепочек:
- Если сервер не производит маршрутизацию, то можно указать глобальным атрибутом для цепочки FORWARD -> DROP.
- После добавления необходимых правил для входящих соединений, можно указать глобальный атрибут DROP, и для цепочки INPUT.
- Если нет понимания количества всех необходимых портов, нужных для исходящих соединений самого сервера, то для цепочки OUTPUT можно оставить глобальным атрибутом ACCEPT.
Это были базовые примеры настроек, которые можно использовать при конфигурации брандмауэра Linux, при помощи утилиты Iptables.
Сегодня мы рассмотрели тему: «Как открыть или закрыть порт в Iptables». Рассмотрели базовые примеры использования Iptables.
Надеюсь статья была вам полезна. До встречи в новых статьях.
Видео на тему «Как открыть или закрыть порт в Iptables»:
Источник: aeb-blog.ru
Как закрыть все порты в iptables кроме 25565?
У меня есть игровой сервер и на нем необходимо закрыть в iptables абсолютно все порты кроме 25565.
Порт 25565 нужен для подключения игроков к серверу. Как это сделать?
- Вопрос задан более трёх лет назад
- 821 просмотр
Комментировать
Решения вопроса 1
нельзя просто так взять и загуглить ошибку
iptables -A INPUT -p tcp -m tcp -m multiport ! —dports 25565 -j DROP
перед тем как добавите это правило, вспомните что вы подключены к серверу по ssh через 22 порт.
Сайт возможно работает на 80/443.
А фтп для доступа к сайту на 21, если он есть.
Ответ написан более трёх лет назад
Нравится 8 5 комментариев
Спасибо огромное, а еще такой вопрос:
А если так прописать, то это тоже самое получается?
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT —dport 25565 -j ACCEPT
iptables -A INPUT —dport 21 -j ACCEPT
iptables -A INPUT —dport 22 -j ACCEPT
В начале разрешающий правила, а только потом запрещающие.
Иначе вы себе запретите всё и на этом закончится ваше общение с сервером.
И после каждой перезагрузки сервера все правила будут сброшены, поставьте задачу в крон.
Сначала всё закрываете, а потом открываете несколько портов.
iptables -A INPUT -p tcp -m tcp -m multiport ! —dports 25565,80,443 -j DROP
в данном случае ! это оператор NOT, и будут закрыты как раз все порты кроме тех что в списке.
Александр Аксентьев, Аа ок, спасибо огромное.
Сергей, от этого спасает yum install iptables-service и периодическое выполнение service iptables save (хотя и костыль немного, вызывает iptables-save в /etc/sysconfig/iptables, откуда он его восстанавливает при перезагрузке).
Alexander777xx, убрать -P OUTPUT DROP, иначе с сервера ничего нельзя будет открыть (в том числе обновить систему!), ну или добавлять отдельно какие-то правила в OUTPUT тоже. Да, если policy стоит DROP, можно в открытом виде не задавать запрещающих правил, все равно по умолчанию подропается.
Ответы на вопрос 1
sudo iptables -A INPUT -p tcp -s subnet/mask —dport 25565 -m conntrack —ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp —sport 25565 -m conntrack —ctstate ESTABLISHED -j ACCEPT
P.S. subnet/mask — адрес, либо пул адресов вашего сервера
P.P.S. если хотите, в конце можно поставить явный deny all: sudo iptables -P INPUT DROP
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
Вообще, дроп по умолчанию — едва ли не обязательный пункт в настройках файрволла в продакшн. Для отладки можно REJECT-правило писать в конце цепочки для региона локальной сети.
Источник: qna.habr.com
Как открыть или закрыть порт в iptables
Разберём, как при помощи утилиты iptables открыть или закрыть порт на межсетевом экране.
В прошлый раз мы рассмотрели использование утилиты iptables для разрешения или запрета отдельных IP-адресов и целых подсетей. Разумеется, IP-адреса это далеко не единственный критерий фильтрации трафика. Можно открывать или закрывать доступ и по портам.
Закрыть порт через iptables
Допустим, что по умолчанию у нас открыты все порты, но некоторые всё таки понадобилось закрыть. К примеру, мы не хотим, чтобы на FTP-сервер можно было попасть по порту 21:
iptables -A INPUT -p tcp —dport 21 -j DROP
А вот ещё пример. Допустим, мы подключаемся к серверу через SSH с определённого адреса, с других адресов доступа быть не должно.
iptables -A INPUT -p tcp ! -s 192.168.105.31 —dport 22 -j DROP
В строке выше указан доверенный IP-адрес, который взят лишь для примера. Символ « ! » перед ключом -s используется для инверсии, таким образом показывается, что кроме этого адреса доступ никто не получит.
Открыть порт через iptables
Теперь представим обратную ситуацию — по умолчанию все порты закрыты. Допустим, у нас есть веб-сервер. Мы хотим открыть доступ по порту 80 для обеспечения работы протокола HTTP. Не помешает открыть и порт 443 — для поддержки протокола HTTPS совместно с SSL. Ну и порт 22 тоже можно открыть для доступа по SSH.
iptables -A INPUT -p tcp —dport 22 -j ACCEPT iptables -A INPUT -p tcp —dport 80 -j ACCEPT iptables -A INPUT -p tcp —dport 443 -j ACCEPT
Как видите, мы написали три правила. Для каждого порта своё. Такая форма записи не является ошибочной, но можно свести всё в одну строку:
iptables -A INPUT -p tcp -m multiport —dports 22,80,443 -j ACCEPT
Если используете расширение multiport , учтите необходимость всегда использовать критерий -p tcp или -p udp . Так можно одной строкой указать до 15 разных портов через запятую. Обратите внимание, что в примере с построчной записью мы использовали критерий —dport . Он используется для указания одного порта. В примере с однострочной записью указан критерий —dports . Он используется для указания нескольких портов.
Источник: webistore.ru