Як перевірити, чи відкритий порт
Щоб перевірити, чи відкритий порт ззовні, потрібно перевіряти саме ззовні: спроба з'єднання з іншої мережі - єдиний результат, що щось означає. Порт, що відповідає з вашої власної машини, все одно може бути заблокований брандмауером, групою безпеки чи вашим хостинг-провайдером ще до того, як до нього дійде зовнішній відвідувач.
Швидкий спосіб: перевірка з-за меж вашої мережі
Введіть ім'я хоста чи 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-сертифікат сервісу прострочився вчора вночі. Порт відкривається, а кожен клієнт відхиляє з'єднання.
- Порт переспрямовано не на ту внутрішню машину, яка приймає з'єднання, але не відповідає нічим корисним.
Тож перевірка порту - це перший крок діагностики, а не вся діагностика. Щойно порт відповідає, перевірте протокол: запросіть сторінку і прочитайте код стану, виконайте реальний вхід чи надішліть тестове повідомлення. Порядок важливий, бо перевірка порту швидко виключає весь мережевий рівень і дозволяє більше туди не дивитися.
Короткий чекліст, коли порт не відкривається
- Підтвердьте, що сервіс слухає на машині, і на правильному інтерфейсі. Сервіс, прив'язаний до
127.0.0.1, недосяжний ні з якого іншого місця, і це дуже поширена причина. - Перевірте брандмауер хоста (
ufw,firewalldчи брандмауер Windows). - Перевірте хмарну групу безпеки чи мережевий ACL - це окремий рівень від брандмауера хоста, про який часто забувають.
- Перевірте переспрямування портів на роутері чи NAT, якщо машина не має прямої публічної адреси.
- Підтвердьте, що провайдер не блокує цей порт, особливо для поштових портів.
- Перевірте ще раз із третьої мережі, щоб виключити власну вихідну фільтрацію.
Регулярна перевірка за розкладом
Перевірка порту показує стан прямо зараз, з того місця, звідки виконано зонд. Порти зазвичай не закриваються самі по собі. Правила брандмауера редагують, групи безпеки посилюють, сертифікати спливають, а сервіси перестають перезапускатися після перезавантаження, і ніщо з цього саме про себе не повідомляє. Моніторинг портів за розкладом перепідключається з інтервалом із кількох локацій і сповіщає, коли з'єднання перестає встановлюватися, що також ловить випадок, коли порт досяжний з одного регіону і відфільтрований з іншого. Перевірте порт просто зараз за допомогою інструмента перевірки портів. Якщо порт відкривається, але TLS не проходить, далі варто прочитати посібник як перевірити термін дії сертифіката.