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


Рассмотрим как открыть порт в iptables.

Изначально в популярных дистрибутивах Linux: Ubuntu, Debian, CentOS никакие порты не блокируются. Доступ извне есть по любому порту.

При настройке системы порты можно закрывать отдельными правилами или можно открывать определенные, а потом закрывать все остальные.



Как проверить блокировку и открыть порт в iptables


Чтобы проверить возможные блокировки правила iptables нужно вывести в консоль.


Вывести правила в виде нумерованного списка можно следующим образом:

iptables -L --line-numbers

Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 f2b-sshd tcp -- anywhere anywhere multiport dports ssh
2 DROP tcp -- anywhere anywhere tcp dpt:http

Chain FORWARD (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

Chain f2b-sshd (1 references)
num target prot opt source destination
1 REJECT all -- proxy.velotax.com.co anywhere



В этом списке нужно проверить наличие правил, которыми блокируется доступ к интересующему нас порту.




Как проверить блокировку порта


Извне лучше всего проверять возможность подключения с помощью утилиты telnet.

Она устанавливается из репозитория (apt install telnet в Ubuntu).

Принимает адрес сервера и порт.



Пример вывода при отсутствии возможности подключения представлен на скриншоте:

iptables открыть порт


Пример вывода в ситуации когда подключение на порт 80 успешно устанавливается:

iptables проверить открыт ли порт


Чтобы подключение выполнялось сервер должен быть доступен по сети и на нём должен быть запущен сервис на порту, который проверяем и на публичном ip адресе или адресе 0.0.0.0.






Также нужно обратить внимание на политики iptables. Политики просматриваются командой iptables -S.

В случае значения DROP по умолчанию все соединения для определенного типа трафика (входящий, исходящий) будут отвергаться. Доступ предоставляется в таких случаях за счет правил, которые дополняют политики.


iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Поменять политику по умолчанию, предписывающую отбрасывать все входящие пакеты.

iptables -P INPUT ACCEPT



Если значение изначально ACCEPT как в выводе выше, то менять ничего не нужно.



После проверки политик вернемся к правилам. Допустим что нужно убрать блокировку порта 80. С помощью telnet блокировку проверили и убедились в том, что она есть.



Среди правил iptables есть такое:

2 DROP tcp -- anywhere anywhere tcp dpt:http

Им и задается блокировка. Правило нужно удалить или скорректировать нужным нам образом.



Как удалить правило iptables задающее блокировку порта


Правила разделяются на цепочки Chain INPUT, Chain FORWARD и Chain OUTPUT.



Из любой цепочки правило можно удалить по номеру. Задающее блокировку правило находится в цепочке INPUT, его номер 2.

iptables -D INPUT 2



Правило перестанет существовать и выводиться в списке.
Доступ к порту 80 после этого должен появиться.

Для других цепочек, портов и протоколов синтаксис не отличается.


Подробнее про удаление правил по номеру и содержимому можно прочитать в этом материале.

В частности в статье есть примеры использования директивы dports, она нужна чтобы задавать правила для нескольких портов.



Для работы с правилами могут применяться различные утилиты более высокого уровня, чем непосредственно iptables — например, ufw (Ubuntu Firewall) или firewalld (для ОС CentOS) . Их наличие можно проверять просматривая список установленных пакетов в системе.

Тем не менее, на практике чаще приходится работать с самими правилами.



Читайте про настройку firewall для веб-сервера.

Сказать спасибо