Перейти к основному содержимому

Руководства / Как проверить сайт: практические руководства

Как проверить, открыт ли порт

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

Быстрый способ: проверка извне вашей сети

Введите хост или IP-адрес и номер порта в инструмент проверки портов и дайте ему открыть соединение с машины где-то еще в интернете. Работает ли сам сервис - это уже другой вопрос. Знать нужно, может ли до него дотянуться кто-то извне, а проверка с того же сервера или из той же офисной сети как раз пропускает те слои, которые обычно и становятся причиной проблемы.

Ручной способ: nc, nmap и telnet

С любой другой машины в другой сети задачу решают три инструмента:

nc -zv example.com 443            # single port, zero-I/O scan, verbose
nmap -Pn -p 22,80,443 example.com # several ports, reports open/closed/filtered
telnet example.com 25             # old but universal; Ctrl+] then "quit" to exit

nc (netcat) - самый простой: -z значит подключиться и сразу отключиться, не отправляя данные, -v печатает результат. Он отвечает "succeeded" или "refused / timed out" и ничего больше. Тянитесь за nmap, когда важна разница, потому что из трех инструментов только он надежно отличает отказанное соединение от потерянного, а флаг -Pn велит ему пропустить ping-пробу и проверить порт, даже если хост не отвечает на пинги. telnet установлен почти везде, а для текстовых протоколов вроде SMTP или HTTP он вдобавок показывает приветственный баннер, который отправляет сервис.

Чтобы увидеть, что слушает на самой машине - это уже другой вопрос, используйте ss -tulpn в Linux или netstat -ano в Windows. Если порт слушает локально, но снаружи закрыт, блокировка находится между ними: файрвол хоста, облачная группа безопасности или сам провайдер.

Открыт, закрыт и отфильтрован - это три разных ответа

  • Открыт. Что-то завершило TCP-рукопожатие. Сервис слушает и принял соединение.
  • Закрыт. Хост ответил, но отказом (TCP reset). Машина доступна, но на этом порту никто не слушает. Это быстрый и однозначный ответ.
  • Отфильтрован. Не пришло вообще ничего. Файрвол сбросил пакет, не ответив, поэтому проба уходит в таймаут. Это медленный ответ, и он означает, что на пути стоит файрвол, а не что сервис лежит.

Ответ "закрыт" указывает на конфигурацию сервиса. Ответ "отфильтрован" указывает на правило файрвола, группу безопасности или блокировку порта провайдером. Многие провайдеры по умолчанию блокируют исходящий порт 25, а некоторые блокируют 445 и другие часто используемые для атак порты, что дает результат "отфильтрован", который никакая настройка на стороне сервера не изменит.

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

Почему открытый порт не значит работающий сервис

Открытый порт доказывает, что TCP-соединение можно установить. О том, что происходит дальше, он не говорит ничего. Все перечисленное ниже - открытые порты со сломанными сервисами:

  • Веб-сервер принимает соединения на 443, но отдает 502, потому что приложение за ним упало.
  • База данных слушает свой порт, но отклоняет любой вход.
  • Почтовый сервер завершает рукопожатие, а затем обрывает сессию, так и не приняв сообщение.
  • У сервиса вчера ночью истек TLS-сертификат. Порт открывается, а каждый клиент отклоняет соединение.
  • Порт проброшен не на ту внутреннюю машину, которая принимает соединения и не отвечает ничем полезным.

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

Короткий чек-лист, если порт не открывается

  1. Убедитесь, что сервис слушает на машине, причем на нужном интерфейсе. Сервис, привязанный к 127.0.0.1, недоступен откуда-либо еще, и это очень частая причина.
  2. Проверьте файрвол хоста (ufw, firewalld или файрвол Windows).
  3. Проверьте облачную группу безопасности или сетевой ACL - это отдельный от файрвола хоста слой, о котором часто забывают.
  4. Проверьте проброс портов на роутере или NAT, если машина не находится напрямую по публичному адресу.
  5. Убедитесь, что провайдер не блокирует этот порт, особенно если речь о почтовых портах.
  6. Повторите проверку из третьей сети, чтобы исключить собственную исходящую фильтрацию.

Регулярная перепроверка по расписанию

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

Проверить сейчас

Запустите бесплатную проверку своего сайта - аккаунт не нужен.

Port check

Следить за этим постоянно

Получайте оповещение в момент сбоя: HostTracker проверяет более чем из 300 локаций и уведомляет по email, SMS, в Slack, Telegram и не только.

Возможности HostTracker

Ещё в этом разделе: Как проверить сайт: практические руководства