Рассмотрим как открыть порт в 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).
Принимает адрес сервера и порт.
Пример вывода при отсутствии возможности подключения представлен на скриншоте:
Пример вывода в ситуации когда подключение на порт 80 успешно устанавливается:
Чтобы подключение выполнялось сервер должен быть доступен по сети и на нём должен быть запущен сервис на порту, который проверяем и на публичном 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 для веб-сервера.