Перейти до основного вмісту

Посібники / Як перевірити сайт: практичні посібники

Як перевірити, чи відкритий порт

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

Швидкий спосіб: перевірка з-за меж вашої мережі

Введіть ім'я хоста чи IP-адресу і номер порту в інструмент перевірки портів і дайте йому відкрити з'єднання з машини десь-інде в інтернеті. Чи запущений сервіс - це інше питання. Вам потрібно знати, чи може хтось ззовні до нього дістатися, а перевірка з того самого сервера чи з тієї самої офісної мережі якраз пропускає ті шари, що зазвичай спричиняють проблему.

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

З будь-якої іншої машини в іншій мережі підійдуть три інструменти:

nc -zv example.com 443            # один порт, сканування без I/O, докладний вивід
nmap -Pn -p 22,80,443 example.com # кілька портів, показує open/closed/filtered
telnet example.com 25             # старий, але універсальний; Ctrl+] потім "quit" для виходу

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

Щоб побачити, що слухає на самій машині - а це інше питання - скористайтеся ss -tulpn на Linux чи netstat -ano на Windows. Якщо порт там слухає, але ззовні закритий, блокування десь посередині: брандмауер хоста, хмарна група безпеки чи провайдер.

Open, closed і filtered - це три різні відповіді

  • Open (відкритий). Щось завершило TCP-рукостискання. Сервіс слухає й прийняв з'єднання.
  • Closed (закритий). Хост відповів, але відмовою (TCP reset). Машина досяжна, але на цьому порту нічого не слухає. Це швидка й однозначна відповідь.
  • Filtered (відфільтрований). Не повернулося нічого. Брандмауер відкинув пакет без відповіді, тож зонд отримує таймаут. Це повільна відповідь, і вона означає, що на шляху брандмауер, а не те, що сервіс лежить.

Closed вказує на конфігурацію сервісу. Filtered вказує на правило брандмауера, групу безпеки чи блокування порту провайдером. Багато провайдерів блокують вихідний порт 25 за замовчуванням, а деякі блокують 445 та інші часто зловживані порти, що дає результат filtered, який жодне налаштування на стороні сервера не змінить.

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 локацій і повідомляє вас електронною поштою, SMS, у Slack, Telegram та інших каналах.

Можливості HostTracker

Ще в цьому розділі: Як перевірити сайт: практичні посібники