This article is available in Russian only. English translation is not yet available.
Сети

Что такое сетевой порт и чем отличаются open, closed и filtered

Порт связывает транспортный трафик с сетевым сервисом, а open, closed и filtered описывают результат проверки из конкретной точки, а не постоянное свойство узла.

Сетевой порт - это 16-битный номер в заголовке транспортного протокола, который помогает операционной системе направить данные нужному сетевому сервису. У TCP и UDP есть отдельные пространства портов: 53/tcp и 53/udp являются разными точками обмена, даже если обе используются DNS. Возможные числовые значения находятся в диапазоне от 0 до 65535, при этом порт 0 зарезервирован.

Результаты open, closed и filtered описывают то, как инструмент увидел конкретный IP-адрес, транспортный протокол и порт из конкретной сети в момент проверки. Это не неизменяемые метки. Один и тот же сервис может быть открыт из офисной сети, отфильтрован из интернета и недоступен через IPv6.

Безопасное использование: проверяйте только собственные системы или узлы, на диагностику которых владелец дал явное разрешение. Даже одиночная попытка подключения создаёт реальный трафик и запись в журналах, а перебор чужих адресов и портов может нарушать правила сети. Для устранения неисправности заранее ограничьте цель, список портов, время и источник проверки.

Из чего состоит адрес сетевого сервиса

Одного номера недостаточно. Точка назначения определяется как минимум IP-адресом, транспортным протоколом и портом, например 192.0.2.10:443/tcp. TCP-соединение дополнительно различается по адресу и порту клиента. Поэтому тысячи клиентов могут одновременно обращаться к одному серверному порту 443: у каждого соединения будет собственная комбинация конечных точек.

IANA делит номера на три диапазона:

  • системные порты: 0-1023;
  • пользовательские порты: 1024-49151;
  • динамические или частные порты: 49152-65535.

Реестр связывает известные номера с названиями сервисов, но это соглашение, а не автоматическая проверка содержимого. На 443/tcp можно запустить не-HTTPS приложение, а HTTPS можно настроить на другом номере. Клиент обычно получает временный исходящий порт из доступного локального диапазона, тогда как сервер слушает заранее выбранный порт.

Порт не является физическим разъёмом, URL-путём или самостоятельной программой. Он относится к транспортному уровню и имеет смысл только вместе с протоколом и сетевым адресом.

Чем порт отличается от процесса

Процесс - это выполняемая программа, а порт - число, которое ОС связывает с сокетом. Серверный процесс создаёт сокет, привязывает его к локальному адресу и порту, затем принимает данные или TCP-соединения. Между процессами и портами нет обязательного соответствия один к одному:

  • один процесс может слушать несколько портов;
  • TCP и UDP могут независимо использовать один номер;
  • несколько рабочих процессов могут обслуживать общий слушающий сокет через механизм ОС или родительский процесс;
  • сервис, привязанный к 127.0.0.1, доступен локально, но не обязан быть доступным через внешний интерфейс;
  • после завершения процесса порт обычно перестаёт слушаться, однако firewall и балансировщик всё ещё могут влиять на внешний результат.

Локальный список сокетов в Linux можно посмотреть без внешнего сканирования:

sudo ss -lntup

Ключ -l оставляет слушающие сокеты, -n показывает числа без преобразования имён, -t и -u выбирают TCP и UDP, а -p добавляет процесс. Для части сведений нужны повышенные права. Наличие строки в ss подтверждает локальную привязку, но не прохождение маршрута, NAT, облачных правил и firewall.

В PowerShell слушающие TCP-сокеты показывает команда:

Get-NetTCPConnection -State Listen | Sort-Object LocalPort

Поле OwningProcess помогает сопоставить сокет с PID. Проверяйте также LocalAddress: привязка только к loopback и привязка ко всем интерфейсам дают разную сетевую доступность.

Как TCP формирует состояния open, closed и filtered

TCP устанавливает соединение обменом SYN, SYN-ACK и ACK. Для типичной проверки начальный ответ позволяет сделать практический вывод:

Состояние Что наблюдает инструмент Практический смысл
open На запрос приходит ожидаемый ответ от слушающей TCP-точки, например SYN-ACK До сервиса можно установить TCP-соединение с этой точки
closed Узел явно отклоняет попытку, обычно ответом RST Путь до отвечающего устройства есть, но приложение обычно не слушает этот порт
filtered Ответа недостаточно для решения или приходит сообщение о запрете Фильтр мешает определить, открыт порт или закрыт

Эти слова являются классификацией сканера, а не состояниями из таблицы TCP-соединений операционной системы. Например, TCP-состояние CLOSED означает отсутствие конкретного соединения, а результат проверки closed относится к доступности порта.

Firewall может молча отбросить пакет, вернуть ICMP-ошибку или явно отклонить соединение. В последнем случае некоторые инструменты покажут closed, хотя ответ сформировал фильтр, а не конечное приложение. Обычный тайм-аут также бывает вызван потерей пакетов, неверным маршрутом, недоступным узлом или проблемой обратного пути. Поэтому один тайм-аут не доказывает наличие конкретного правила firewall.

Почему UDP проверяется иначе

UDP передаёт отдельные датаграммы без трёхстороннего рукопожатия. Если сервис вернул корректный прикладной ответ, порт можно считать доступным для данного запроса. ICMP-сообщение Port Unreachable обычно указывает на закрытый UDP-порт. Но отсутствие ответа неоднозначно: сервис мог проигнорировать пакет неправильного формата, ответ мог потеряться, а firewall мог отбросить запрос или ICMP-ошибку.

Поэтому UDP-инструменты часто используют состояние open|filtered. Сообщение succeeded от UDP-режима netcat само по себе не доказывает, что приложение получило данные. Надёжнее отправить минимальный корректный запрос нужного протокола. Например, локальный DNS-резолвер можно проверить так:

dig @127.0.0.1 example.com A +time=2 +tries=1

Содержательный DNS-ответ подтверждает больше, чем пустая UDP-датаграмма. Тайм-аут всё равно не отличает неработающий сервис от фильтрации. Для удалённого сервера заменяйте адрес только на согласованную цель и учитывайте, что DNS может переключаться между UDP и TCP в зависимости от запроса и ответа.

Что именно делает firewall

Firewall сопоставляет трафик с правилами по протоколу, адресам, портам, направлению и состоянию соединения. Фильтрация может находиться на самом сервере, в маршрутизаторе, облачной security group, балансировщике или сети клиента. NAT и проброс портов добавляют ещё один уровень: внешний порт может вести на другой внутренний адрес и номер.

Правило для CIDR определяет, каким диапазонам источников разрешён доступ. ASN помогает понять, из какой автономной системы идёт проверка, но сам по себе не является надёжным правилом авторизации. Если результаты различаются между провайдерами, сведения GeoIP и ASN помогают описать точки наблюдения, однако не доказывают причину блокировки.

Состояние filtered не подтверждает, что сервис выключен. Оно сообщает, что инструмент не смог получить достаточный ответ через текущий путь. Проверка из VPN, другой подсети или через IPv6 может дать иной результат, если это входит в согласованный сценарий.

Почему open не означает «уязвим»

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

При этом каждый намеренно открытый сервис расширяет поверхность атаки и требует обоснования. Удалите ненужные слушатели, ограничьте административные интерфейсы, своевременно обновляйте ПО, применяйте аутентификацию, TLS, минимальные сетевые правила, журналирование и лимиты запросов. Закрытый или отфильтрованный порт тоже не является сертификатом безопасности всего узла.

Для внешнего взгляда используйте ограниченную проверку безопасности, указывая минимальный набор разрешённых портов. Это точечная диагностика, а не полноценный аудит. Если TCP-порт веб-сервиса доступен, продолжите проверкой сайта, чтобы отдельно оценить DNS и HTTP-ответ.

Практическая диагностика TCP-порта

Сначала зафиксируйте имя, фактический IP, TCP или UDP, номер порта, сеть-источник и время. Затем двигайтесь от сервера к приложению.

  1. На своём сервере проверьте локальный слушающий сокет и процесс через ss или системный аналог.
  2. Убедитесь, что сервис привязан к нужному интерфейсу, а не только к loopback.
  3. Сверьте firewall узла, облачные правила, балансировщик и NAT, не отключая защиту целиком.
  4. Выполните одну разрешённую проверку из той сети, где наблюдается ошибка.
  5. После успешного TCP-соединения проверьте прикладной протокол.

Для точечного TCP-connect в Linux и macOS часто используют netcat:

nc -vz -w 3 example.com 443

-z проверяет соединение без обычной передачи данных, -v выводит детали, а -w 3 ограничивает ожидание в реализациях, где этот синтаксис поддерживается. Опции netcat различаются, поэтому сверяйтесь с nc -h. Успех означает доступность TCP-порта только с текущей машины и в этот момент. Connection refused обычно соответствует closed; тайм-аут оставляет несколько возможных причин.

В Windows аналогичная проверка выглядит так:

Test-NetConnection example.com -Port 443

Смотрите RemoteAddress и TcpTestSucceeded. Если DNS-имя имеет A- и AAAA-записи, выбранный адрес важен: успешный IPv4-тест ничего не говорит о пути IPv6.

После TCP проверьте HTTPS на прикладном уровне:

curl --head --connect-timeout 5 https://example.com/

Здесь участвуют DNS, TCP, TLS, SNI и HTTP. Ошибка сертификата при успешном nc означает, что транспортный порт доступен, а проблема находится выше. Некоторые серверы не поддерживают метод HEAD, поэтому HTTP-ошибку нужно читать отдельно, а не переименовывать в «закрытый порт».

Типичные ошибки

  • Не указывать транспорт и считать 53/tcp тем же endpoint, что 53/udp.
  • Принимать зарегистрированное IANA имя сервиса за доказательство реально запущенного приложения.
  • Считать локальный LISTEN подтверждением внешней доступности.
  • Называть любой тайм-аут filtered, не проверив DNS, маршрут и потери.
  • Считать успешный TCP-connect подтверждением исправности TLS, HTTP или авторизации.
  • Игнорировать IPv6, несколько A-записей, CDN и балансировщики.
  • Открывать доступ для 0.0.0.0/0 ради теста вместо временного минимального правила для согласованного источника.
  • Проверять диапазон, когда достаточно одного хоста и одного порта.
  • Отключать firewall целиком и терять одновременно защиту и возможность точно найти причину.

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

Частые вопросы

Означает ли открытый порт, что сервер уязвим?

Нет. Состояние open означает, что с точки проверки доступен слушающий сервис. Уязвимость зависит от программы, версии, конфигурации, аутентификации и других условий; открытый порт лишь увеличивает доступную извне поверхность.

Чем состояние closed отличается от filtered?

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

Почему отсутствие ответа не доказывает, что UDP-порт закрыт?

UDP не устанавливает соединение рукопожатием. Сервис может отвечать только на корректный прикладной запрос, а firewall может отбросить пакет или ICMP-ошибку. Поэтому молчание часто означает неопределённость open|filtered, а не доказанное состояние closed.

Check it in practice

Related terms

Sources

  1. RFC 9293: Transmission Control Protocol (TCP)
  2. RFC 768: User Datagram Protocol
  3. IANA: Service Name and Transport Protocol Port Number Registry
  4. Nmap Network Scanning: Port Scanning Basics

Как проверить доступность порта

Успешное TCP-соединение подтверждает достижимость точки в момент проверки, но не гарантирует исправность приложения или доступность из другой сети.

IPv4 и IPv6: в чём разница

IPv4 и IPv6 различаются адресным пространством и работой протокола, а совместимость зависит от DNS, выбора адреса и реальной доступности сервера.