Порт 443 в LISTEN: что это доказывает?

Мы разбираем инфраструктуру по фактам: Linux, Zabbix, мониторинг, диагностика и архитектура. От симптома — к проверяемому выводу: что именно доказывает метрика, какие гипотезы остаются и как подтвердить решение. Без догадок там, где можно проверить. Если нужно понимать не только что сделать, но и почему — вам сюда.

listenпорт 443ss

Знакомая проверка:

ss -lntp

В выводе видим:

LISTEN 0 511 0.0.0.0:443 0.0.0.0:*

Порт 443 находится в состоянии LISTEN.
Можно ли после этого сделать вывод: «Сервис доступен пользователям по HTTPS»?
Нет.
Мы подтвердили только один из уровней проверки.

Что на самом деле означает LISTEN

Состояние LISTEN подтверждает, что в системе существует сокет, ожидающий входящие соединения на указанном адресе и порту.
В нашем примере:

0.0.0.0:443

означает, что процесс слушает TCP-порт 443 на IPv4-адресах узла.
Это полезный факт.
Но:

LISTEN
   ≠
доступность по сети

Что LISTEN ещё не подтверждает

Даже если процесс слушает нужный порт, соединение пользователя может не пройти из-за:

  • правил локального межсетевого экрана;
  • сетевых ACL;
  • маршрутизации;
  • промежуточного межсетевого экрана;
  • правил NAT;
  • балансировщика нагрузки;
  • обратного прокси;
  • ошибок DNS;
  • неверного IP-адреса;
  • сетевой фильтрации на стороне провайдера или облачной платформы.

То есть:

процесс слушает порт
        ≠
пакет доходит до сервера

А если TCP-соединение устанавливается?

Допустим, с клиентского узла выполняем:

nc -vz server.example.ru 443

и получаем успешное соединение.
Теперь доказано уже больше: от конкретной точки проверки TCP-порт 443 доступен.
Но даже это ещё не подтверждает работоспособность приложения.
Например, TCP-соединение устанавливается, а HTTP-запрос возвращает:

HTTP/1.1 502 Bad Gateway

Сеть работает.
Порт доступен.
Обратный прокси отвечает.
Но приложение за ним — нет.

TCP reachable
      ≠
application works

Следующий уровень — проверяем сам сервис

Для HTTPS это может быть:

curl -I https://server.example.ru/

Теперь мы проверяем уже не только открытие TCP-соединения, но и ответ HTTP-сервиса.
Однако и здесь важно понимать, откуда выполняется проверка.

Например:

curl https://localhost/

успешно работает на сервере.
Это подтверждает локальную работоспособность сервиса.
Но пользователь из другой сети всё ещё может не иметь к нему доступа.

Точка проверки имеет значение

Сравним:

сервер → localhost:443 → OK

и:

рабочая станция → server:443 → FAIL

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

Получается несколько разных утверждений

LISTEN
   ↓
процесс ожидает соединение
TCP connection successful
   ↓
порт доступен из конкретной точки сети
HTTP 200 / корректный ответ
   ↓
прикладной сервис отвечает

И это не одно и то же.

Главное

LISTEN
   ≠
доступность по сети
   ≠
работоспособность приложения

Команда ss отвечает на вопрос:
«Есть ли на узле процесс, слушающий этот сокет?»
Но она не отвечает на вопрос:
«Может ли пользователь реально воспользоваться сервисом?»
Для второго утверждения нужны уже другие проверки — сетевые и прикладные.
Один положительный факт подтверждает только тот уровень системы, который мы действительно проверили.

#Фактоскопия #Linux #Network #ПоФактам

Читайте так же