Порт — это логическая конечная точка обмена данными. Порт считается «открытым», когда есть слушающий сокет (процесс привязан к адресу/порту). Фаервол лишь разрешает или блокирует прохождение трафика, но сам по себе порт не «открывает» и не «закрывает»

Связка «порт ↔ служба» не жёсткая: любую службу можно настроить слушать на любом порту. Записи в /etc/services и реестре IANA — это соглашения, а не правило ОС.

Порты 0–1023 — well-known. Бинд к портам <1024 требует root/CAP_NET_BIND_SERVICE. Порты 1024–49151 — зарегистрированные/пользовательские, 49152–65535 — IANA Dynamic/Private. Эфемерные клиентские порты в Linux по умолчанию 32768–60999 (настраиваются в /proc/sys/net/ipv4/ip_local_port_range) и не обязаны совпадать с 49152–65535.

В этом руководстве вы откроете порт >1023, чтобы не требовались привилегии для бинда и чтобы не конфликтовать со стандартными службами на well-known портах.

Список слушающих портов

Прежде чем открывать порт в Linux, выведите список слушающих портов и выберите свободный порт >1023 (например, из зарегистрированного диапазона), которого в этом списке нет.

Используйте команду netstat, чтобы вывести слушающие TCP/UDP-сокеты — это самые распространённые протоколы передачи пакетов на транспортном уровне.

netstat -lntu

Будет выведено:

  • все слушающие сокеты (-l)

  • числовые адреса и порты (-n)

  • TCP-порты (-t)

  • UDP-порты (-u)

Вывод

OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address  State
tcp        0      0 127.0.0.1:5432   0.0.0.0:*        LISTEN
tcp        0      0 127.0.0.1:27017  0.0.0.0:*        LISTEN
tcp        0      0 127.0.0.1:6379   0.0.0.0:*        LISTEN
tcp        0      0 127.0.0.53:53    0.0.0.0:*        LISTEN
tcp        0      0 0.0.0.0:22       0.0.0.0:*        LISTEN
tcp6       0      0 ::1:5432         :::*             LISTEN
tcp6       0      0 ::1:6379         :::*             LISTEN
tcp6       0      0 :::22            :::*             LISTEN
udp        0      0 127.0.0.53:53    0.0.0.0:*        LISTEN

 Примечание: если в вашей дистрибуции нет netstat, используйте ss, чтобы вывести список слушающих сокетов.

Убедитесь, что вывод сопоставим, используя команду ss для списка слушающих сокетов:

ss -lntu

Будет выведено:

OutputNetid  State   Recv-Q  Send-Q    Local Address:Port   Peer Address:Port
udp    UNCONN  0       0         127.0.0.53%lo:53          0.0.0.0:*
tcp    LISTEN  0       128           127.0.0.1:5432        0.0.0.0:*
tcp    LISTEN  0       128           127.0.0.1:27017       0.0.0.0:*
tcp    LISTEN  0       128           127.0.0.1:6379        0.0.0.0:*
tcp    LISTEN  0       128       127.0.0.53%lo:53          0.0.0.0:*
tcp    LISTEN  0       128             0.0.0.0:22          0.0.0.0:*
tcp    LISTEN  0       128               [::1]:5432        0.0.0.0:*
tcp    LISTEN  0       128               [::1]:6379        0.0.0.0:*
tcp    LISTEN  0       128                [::]:22          0.0.0.0:*

Это даёт примерно тот же список слушающих портов, что и netstat.

Открытие порта в Linux для разрешения TCP-подключений

Теперь откройте закрытый порт и примите входящие TCP-соединения.

В рамках этого руководства вы откроете порт 4000. Однако если на вашей системе этот порт уже занят, выберите любой другой закрытый порт — главное, чтобы его номер был больше 1023.

Проверьте, что порт 4000 не используется, с помощью команды netstat:

netstat -na | grep :4000

Или командой ss:

ss -na | grep :4000

Пустой вывод означает, что на 4000 сейчас никто не слушает — это пригодится для теста с nc. На добавление правила в фаервол это не влияет. 

Для пользователей Ubuntu и систем на основе ufw

Используйте ufw — клиент командной строки для Uncomplicated Firewall.

Ваши команды будут выглядеть примерно так:

sudo ufw allow 4000/tcp

Для CentOS и систем на основе firewalld

Используйте firewall-cmd — клиент командной строки демона firewalld.

Ваши команды будут выглядеть примерно так:

sudo firewall-cmd --add-port=4000/tcp

Для других дистрибутивов Linux

На современных дистрибутивах по умолчанию используется nftables/iptables-nft. Предпочтительно управлять через firewalld/ufw или нативный nft. Если всё же используете iptables, вставляйте правило выше возможного DROP и не забывайте про IPv6:

sudo iptables  -I INPUT 1 -p tcp --dport 4000 -j ACCEPT

sudo ip6tables -I INPUT 1 -p tcp --dport 4000 -j ACCEPT

Учтите возможные конфликты с firewalld/ufw; для постоянства используйте iptables-save/iptables-persistent.

Проверка только что открытого порта для TCP-подключений

Теперь, когда вы успешно открыли новый TCP-порт, его нужно протестировать.

Сначала запустите netcat (nc) и начните слушать (-l) порт (-p) 4000, одновременно отправляя вывод команды ls любому подключившемуся клиенту:

  • Для OpenBSD nc: ls | nc -l 4000

  • Для ncat (nmap): ls | ncat -l 4000

  • Для netcat-traditional: ls | nc -l -p 4000

Теперь, когда клиент откроет TCP-соединение с портом 4000, он получит вывод ls. Оставьте этот сеанс как есть.

Откройте другой терминал на той же машине.

Поскольку вы открыли TCP-порт, используйте telnet для проверки TCP-доступности. Если команды нет, установите её через менеджер пакетов.

Укажите IP вашего сервера и номер порта (в примере — 4000) и выполните команду:

telnet localhost 4000

Эта команда пытается открыть TCP-соединение к localhost на порту 4000.

Вы увидите примерно такой вывод, означающий, что установлено соединение со слушающей программой (nc):

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh

Вывод ls (в данном примере — while.sh) также был отправлен клиенту, что подтверждает успешное TCP-соединение.

Используйте nmap, чтобы проверить, открыт ли порт (-p):

nmap localhost -p 4000

Эта команда проверит состояние порта на localhost:

Starting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
4000/tcp open  remoteanything

Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

Имя сервиса в nmap берётся из базы соответствий портов и не гарантирует, что именно эта служба реально запущена; это эвристика по номеру порта.

Порт открыт. Вы успешно открыли новый порт в вашей системе Linux.

Примечание: nmap показывает состояние порта. Если на порту никто не слушает, он обычно будет closed; если трафик фильтруется фаерволом — filtered. Поэтому без слушателя telnet тоже не сработает; nc удобен тем, что быстро поднимает слушатель для теста.

Изменения будут временными, если вы не используете персистентную конфигурацию. Для UFW правила сохраняются автоматически; для firewalld нужны --permanent + --reload; для iptables — сохранение правил отдельно.

Сохранение правил

Персистентность зависит от инструмента: ufw — сохраняет правила по умолчанию; в firewalld используйте --permanent && --reload; iptables — сохраняйте через iptables-save/iptables-persistent.

Для фаервола ufw

Правила ufw не сбрасываются при перезагрузке. Это связано с тем, что ufw интегрирован в процесс загрузки: его сервис читает конфиги и программирует правила в netfilter (iptables/nftables).

Для firewalld

Если вы хотите добавить порт в постоянную конфигурацию фаервола и сразу применить изменения, используйте флаги --permanent и --reload:

sudo firewall-cmd --permanent --add-port=4000/tcp
sudo firewall-cmd --reload

Для iptables

Вам потребуется сохранить конфигурацию правил и воспользоваться пакетом/утилитой iptables-persistent.

Открытие портов с помощью разных инструментов

Открытие конкретных портов с помощью iptables

Чтобы открыть конкретный порт с помощью iptables, используйте команду:

sudo iptables -I INPUT 1 -p tcp --dport <port_number> -j ACCEPT

Замените <port_number> на фактический номер порта, который нужно открыть. Например, чтобы открыть порт 4000:

sudo iptables -I INPUT 1 -p tcp --dport 4000 -j ACCEPT

Эта команда добавляет новое правило в цепочку INPUT, разрешающее входящий TCP-трафик на указанный порт.

Управление портами с помощью ufw (Uncomplicated Firewall) в системах Debian/Ubuntu

Чтобы открыть порт с помощью ufw, выполните:

sudo ufw allow <port_number>/tcp

Замените <port_number> на нужный номер. Например, чтобы открыть порт 4000:

sudo ufw allow 4000/tcp

Эта команда добавляет новое правило, разрешающее входящий трафик на указанный порт.

Использование firewalld для управления портами в системах RHEL/CentOS

Чтобы открыть порт с помощью firewalld, выполните:

sudo firewall-cmd --get-active-zones

sudo firewall-cmd --zone=public --add-port=4000/tcp --permanent

sudo firewall-cmd --reload

(подставьте нужную зону вместо public, либо используйте --zone=$(firewall-cmd --get-default-zone)).

Замените <port_number> на фактический номер. Например, чтобы открыть порт 4000:

sudo firewall-cmd --add-port=4000/tcp --permanent

sudo firewall-cmd --reload

Первая команда добавляет новое правило, разрешающее входящий TCP-трафик на указанный порт, а вторая перезагружает конфигурацию фаервола, чтобы применить изменения.

Список слушающих портов

Команды для вывода списка слушающих портов

Чтобы вывести список слушающих портов, используйте следующие команды:

  • netstat:

netstat -lntu

  • ss:

ss -lntu

  • netstat:

netstat -tlnp

Эта команда отобразит все слушающие сокеты, включая протокол, локальный адрес, внешний адрес, состояние и PID/имя программы процесса, который слушает сокет.

  • nc (Netcat):

nc -z -v -n localhost 1-1024

Команда проверит, какие порты открыты/закрыты на localhost. Метку filtered корректно определяет nmap (когда трафик блокируется фаерволом/ACL), nc этого статуса не показывает.

Проверка правил фаервола и активных сервисов

Чтобы проверить правила фаервола и активные сервисы, используйте:

  • iptables:

sudo iptables -L

  • ufw:

sudo ufw status

  • firewalld:

sudo firewall-cmd --list-all

Эти команды выведут текущую конфигурацию фаервола, включая разрешённые и заблокированные правила и сервисы.

Распространённые ошибки и отладка

Устранение проблем, когда порт остаётся закрытым после конфигурации

Если после настройки порт остаётся закрытым, причины могут быть разными, в том числе:

  • Сервис фаервола не запущен или настроен некорректно.

  • Порт уже занят другой службой или процессом.

  • Изменения конфигурации не применены или были переопределены другой настройкой.

Для диагностики проблемы выполните:

  • Проверьте статус сервиса фаервола и убедитесь, что он запущен.

  • Используйте netstat или ss, чтобы проверить, не занят ли порт.

  • Проверьте конфигурационные файлы фаервола и убедитесь, что изменения применены корректно.

Если порт по-прежнему не открыт, попробуйте следующее:

  • Проверьте системные журналы на предмет ошибок, связанных с фаерволом.

  • Временно отключите фаервол и проверьте, откроется ли порт. Если да — вероятно, какое-то правило его блокирует.

  • Убедитесь, что нет конфликтов между инструментами управления фаерволом (например, ufw, firewalld, iptables).

Обеспечение работы и корректной настройки служб фаервола

Чтобы убедиться, что службы фаервола активны и настроены правильно, выполните следующие шаги:

  • Проверьте статус службы фаервола командами systemctl status ufw или systemctl status firewalld.

  • Убедитесь, что служба включена для автоматического запуска при загрузке: systemctl enable ufw или systemctl enable firewalld.

  • Просмотрите конфигурационные файлы фаервола, чтобы убедиться, что настройки корректны и актуальны.

Если служба фаервола не запущена или настроена неверно, выполните следующие действия:

  • Перезапустите службу фаервола.

  • Проверьте наличие ошибок в конфигурационных файлах.

  • Убедитесь, что нужные порты открыты в правилах фаервола.

Проверка конфликтов между инструментами управления фаерволом

Чтобы проверить наличие конфликтов между инструментами управления фаерволом, выполните такие шаги:

  • Определите все установленные инструменты управления фаерволом (например, iptables, ufw, firewalld).

  • Убедитесь, что активен и управляет правилами только один инструмент.

  • Отключите или удалите конфликтующие инструменты, чтобы правилами управлял один выбранный инструмент.

Если проблемы сохраняются, попробуйте следующее:

  • Проверьте, не использует ли порт какая-то другая служба или процесс.

  • Просмотрите системные журналы на наличие ошибок, связанных с этим портом.

  • Если порт занят другой службой, рассмотрите возможность перенастроить её на использование другого порта.

Сравнение инструментов фаервола: плюсы и минусы iptables, ufw и firewalld при открытии портов

Инструмент

Описание

Плюсы

Минусы

Пример команды

iptables

Утилита командной строки для настройки правил фильтрации сетевых пакетов

Очень настраиваемый, мощный и гибкий.

Крутая кривая обучения, сложный синтаксис.

sudo iptables -I INPUT 1 -p tcp --dport 4000 -j ACCEPT

ufw

Простая утилита командной строки для управления фаерволом на базе netfilter.

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

Ограниченные возможности настройки, не столь мощен, как iptables.

sudo ufw allow 4000

firewalld

Динамический демон для управления правилами фаервола.

Прост в использовании, поддерживает динамическую конфигурацию и зоны.

Может быть сложен в управлении для продвинутых пользователей.

sudo firewall-cmd --add-port=4000/tcp --permanent

Приведённые выше примеры команд открывают порт 4000 (для TCP в указанных командах).


Частые вопросы (FAQ)

  1. Как открыть порт в Linux?

Чтобы открыть порт в Linux, нужно настроить фаервол так, чтобы он разрешал входящий трафик на этом порту. Конкретные шаги зависят от используемого ПО фаервола. Примеры для ufw, firewalld и iptables:

  • Для ufw (Uncomplicated Firewall): sudo ufw allow <port_number>/tcp

  • Для firewalld: sudo firewall-cmd --add-port=<port_number>/tcp --permanent && sudo firewall-cmd --reload

  • Для iptables: sudo iptables -I INPUT 1 -p tcp --dport <port_number> -j ACCEPT

Замените <port_number> на фактический номер порта, который нужно открыть.

2. Как проверить, открыт ли порт 443 в Linux?

для списка слушающих портов используйте: netstat -lntu / ss -lntu:

  • С netstat: netstat -lntu | grep 443

  • С ss: ss -lntu | grep 443

Если порт 443 открыт, вы увидите его в выводе.

3. Как проверить, открыт ли порт 22 в Linux?

Проверьте с помощью netstat, ss или nc:

  • С netstat: netstat -lntu | grep 22

  • С ss: ss -lntu | grep 22

  • С nc: nc -z -v -n localhost 22

Если порт 22 открыт, вы увидите это в выводе.

4. Как проверить, открыт ли произвольный порт?

Используйте netstat или ss:

  • С netstat: netstat -lntu | grep <port_number>

  • С ss: ss -lntu | grep <port_number>

Замените <port_number> на фактический номер. Порт отобразится, если на нём есть слушатель. Для сетевой доступности используйте nc -z/nmap и учитывайте статус filtered.

5. Как открыть порт 22 в Linux?

Порт 22 обычно открыт по умолчанию для SSH. Если он закрыт, выполните шаги из пункта 1, подставив номер 22:

  • Для ufw: sudo ufw allow 22/tcp

  • Для firewalld: sudo firewall-cmd --add-port=22/tcp --permanent && sudo firewall-cmd --reload

  • Для iptables: sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

6. Можно ли открыть диапазон портов вместо одного?

Да, вы можете открыть диапазон портов. Конкретные шаги зависят от используемого ПО фаервола. Примеры для ufw, firewalld и iptables:

  • Для ufw (Uncomplicated Firewall): sudo ufw allow <start_port>:<end_port>/tcp

  • Для firewalld: sudo firewall-cmd --add-port=<start_port>-<end_port>/tcp --permanent && sudo firewall-cmd --reload

  • Для iptables: sudo iptables -A INPUT -p tcp --dport <start_port>:<end_port> -j ACCEPT

Замените <start_port> и <end_port> на фактический диапазон портов, который нужно открыть.

7. Безопасно ли открывать порты в Linux?

Открывать порты можно безопасно, если делать это осознанно. Однако каждый открытый порт увеличивает поверхность атаки и потенциальные риски. Рекомендации:

  • Открывайте только те порты, которые действительно нужны приложениям или службам.

  • Используйте надёжные пароли и механизмы аутентификации для служб, слушающих открытые порты.

  • Регулярно обновляйте систему и ПО фаервола, чтобы иметь актуальные исправления безопасности.

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

  • Рассмотрите политику фаервола «по умолчанию запрещать» (default deny), разрешая только явно необходимые входящие соединения.

Заключение

В этом руководстве мы узнали, как открыть новый порт в Linux и настроить приём входящих подключений. Мы также использовали netstat, ss, telnet, nc и nmap, чтобы проверить состояние портов и протестировать подключение. Диапазоны портов открывали с помощью ufw/firewalld/iptables


Готовы к систему обучению Linux? Эти практические программы вам в помощь:

Комментарии (0)


  1. VenbergV
    17.09.2025 18:48

    Очень жаль, что в статье нет почти ничего про настройку актуального nftables.
    Хотя он старше даже бума ИИ.