Перевірка відкритих портів

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

У полі вже стоїть ваша власна адреса — саме це потрібно майже всім. Діапазони не приймаються: перевірити кілька портів це діагностика, пройтися по діапазону — сканування.

Відкритий, закритий, фільтрується — три відповіді, а не дві

TCP-з'єднання починається з одного пакета — SYN. Те, що прийде у відповідь, вирішує все, і розрізняти тут варто рівно три результати.

Відкритий
На SYN відповіли SYN-ACK. Хтось слухає й готовий говорити. Це єдиний результат, який доводить, що служба доступна з інтернету.
Закритий
У відповідь прийшов RST — відмова. Це значно інформативніше, ніж здається: пакет дійшов. Вузол живий, він досяжний, маршрутизація й NAT справні. Просто на цьому порту ніхто не слухає, і все.
Фільтрується
Не прийшло нічого. Пакет проковтнули десь дорогою — фаєрвол, налаштований відкидати замість відмовляти, провайдер, що блокує порт, або роутер, у якому для нього немає правила проброса.

«Закритий» і «фільтрується» — протилежні діагнози. Закритий каже: «пакет дійшов до машини, лікуй службу». Фільтрується каже: «пакет туди не дійшов, лікуй шлях». Перевіряч, який зводить обидва до «не відкритий», відповів на половину питання — і саме на ту половину, яку ви й так знали.

Чому перевірка з власної машини не доводить нічого

Найпоширеніший спосіб переконати себе, що порт відкритий, — перевірити локально: telnet localhost 8080 або браузер, спрямований на власну машину. Така перевірка вдається незалежно від того, наскільки ретельно порт закрито ззовні, бо вона взагалі не залишає комп'ютера. Пропущено кожен шар, який міг бути проблемою: вхідні правила фаєрвола, проброс портів на роутері, фільтрація провайдера і питання, чи є у вас публічна адреса взагалі.

Відповідь на справжнє питання дає лише перевірка ззовні — бо вона проходить той самий шлях, яким ішов би справжній відвідувач.

Ланцюг, який має пройти пакет

Коли порт фільтрується, винен один із п'яти шарів. Перебирайте їх у цьому порядку — список відсортовано за тим, як часто кожен виявляється винним:

  1. Служба слухає не ту адресу. Найчастіша причина і найдратівливіша в пошуку. Процес, що слухає 127.0.0.1:8080, для мережі невидимий — хоча всі локальні перевірки проходять, а лог виглядає бездоганно. Дивіться ss -tlnp: якщо в стовпчику адреси стоїть 127.0.0.1, а не 0.0.0.0 чи [::], жодні інші зміни не допоможуть.
  2. Фаєрвол на самому вузлі. Сучасні дистрибутиви привозять його ввімкненим. Зазвичай він саме відкидає, а не відхиляє, — тобто дає рівно той результат «фільтрується».
  3. Роутер. Пробросу потрібні правило, правильна внутрішня адреса й правильний протокол. Внутрішні адреси від DHCP змінюються: правило, написане пів року тому, може вказувати на пристрій, якого вже немає.
  4. Провайдер. Вхідний порт 25 закритий практично на кожному домашньому підключенні, а 80, 443 і 445 закривають теж досить часто. Це політика, а не поломка, і жодне налаштування з вашого боку її не змінює.
  5. У вас немає публічної адреси. Якщо WAN-адреса роутера відрізняється від адреси, яку бачить цей сайт, між вами й інтернетом є ще один шар NAT, і вхідні з'єднання не можуть дійти взагалі. Про це нижче.

Коли проброс портів не запрацює в принципі

Вільні адреси IPv4 скінчилися багато років тому, і провайдери почали ділити те, що мали. За NAT рівня оператора ваш роутер публічної адреси не отримує зовсім: йому дають адресу з діапазону, зарезервованого саме для цього в RFC 6598 — 100.64.0.0/10, — а оператор перетворює її ще раз на виході. За однією публічною адресою можуть стояти сотні абонентів.

Вхідного шляху в такій схемі немає. Публічна адреса вам не належить, тож пробросити на вас нічого не можна: власний хостинг, ігрові сервери, вхідний VPN і віддалений доступ до домашнього сховища перестають працювати, і жодне налаштування роутера цього не змінить. Перевірка займає десять секунд: порівняйте WAN-адресу на сторінці стану роутера з адресою на головній сторінці. Якщо вони різні — а надто якщо роутер показує щось, що починається з 100., — це і є відповідь. Ліки: попросити в провайдера публічну адресу (часто платна послуга), скористатися IPv6, якщо він є, або взяти тунель, який дасть вам досяжну точку входу деінде.

Порти, які варто двічі подумати відкривати

Відкритий порт сам по собі не проблема — вебсерверу потрібні 80 і 443. Але частину служб проєктували для довірених мереж, і поводяться вони відповідно, коли стають доступними всьому інтернету:

ПортСлужбаЧому це важливо
22SSHДоступність — нормально, автентифікація паролем — ні. Автоматичні спроби входу починаються за хвилини після відкриття порту. Лише ключі й без входу під root.
3389RDPВідкритий назовні RDP — один із найнадійніших шляхів, якими шифрувальники потрапляють у мережу. Йому місце за VPN, а не у відкритому інтернеті.
445SMBСпільний доступ до файлів ніколи не проєктували для інтернету. Ззовні він не має бути досяжним узагалі, і більшість провайдерів закривають його за вас.
3306 · 5432MySQL · PostgreSQLБаза має бути доступна вашому застосунку, а не всім. Прив'яжіть її до локальної адреси або приватної мережі.
6379 · 27017 · 9200Redis · MongoDB · ElasticsearchУсі три історично постачалися без автентифікації й слухали всі інтерфейси. Масові зломи відкритих екземплярів — подія, що повторюється, а не теоретичний ризик.
23TelnetБез шифрування, разом із паролем. Головне його застосування, що лишилося, — точка входу для ботнетів, які сканують побутові пристрої.
21FTPТеж без шифрування і незручний крізь NAT через друге з'єднання для даних. Ту саму роботу робить SFTP поверх SSH.

Чому ми не скануємо діапазони

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

З тих самих міркувань поле від початку заповнене вашою власною адресою. Перевірка власних портів покриває фактично всі законні причини тут опинитися: «чи спрацював мій проброс», «чи відкритий 25-й на моєму сервері», «чи робить нове правило фаєрвола те, що я задумав». Перевірка чужих іноді законна, а частіше ні — і значення за замовчуванням мають робити легким саме звичайний чесний випадок.

Після перевірки

Відкритий порт каже, що служба досяжна; він не каже, що вона справна. Якщо порт відкритий, а сайт не відкривається, проблема перемістилася на шар вище — до TLS, до віртуального хоста або до самого застосунку. Саме туди дивиться наша перевірка сайту. Якщо порт фільтрується і треба зрозуміти, чи вузол досяжний узагалі, швидку відповідь на вужче питання дасть ping — з поправкою на те, що чимало вузлів навмисно відкидають ICMP.

Часті запитання

Служба запущена — чому порт показує «фільтрується»?

Найчастіше тому, що служба слухає 127.0.0.1 замість усіх інтерфейсів. Вона бездоганно проходить будь-яку локальну перевірку і при цьому цілком невидима з мережі. Спершу подивіться адресу, яку вона слухає: у Linux її показує ss -tlnp. Далі перевіряйте фаєрвол на самому вузлі, потім правило проброса на роутері — саме в такому порядку.

Чим «закритий» відрізняється від «фільтрується»?

Закритий означає, що ваш пакет дійшов до машини і його активно відхилили пакетом RST: маршрутизація, NAT і проброс працюють, просто на цьому порту ніхто не слухає. «Фільтрується» означає, що у відповідь не прийшло нічого, тобто пакет мовчки відкинули десь дорогою. Вони вказують на протилежні половини проблеми, і саме тому ми показуємо їх окремо.

Чому в мене не відкривається жоден порт, хоч що я налаштовую?

Порівняйте WAN-адресу на роутері з адресою, яку показує цей сайт. Якщо вони різні, провайдер тримає вас за NAT рівня оператора: публічна адреса спільна з іншими абонентами, тож вхідного шляху до вашого роутера, який можна було б пробросити, просто немає. Налаштуваннями роутера це не змінюється. Варіанти: публічна адреса від провайдера, IPv6, якщо він є, або тунельний сервіс.

Чи можна перевіряти порти на чужому сервері?

Поле приймає будь-який вузол, але тримайтеся систем, за які ви відповідаєте. Перевірка кількох портів — це діагностика; прохід по діапазонах — сканування, і воно породжує скарги на того, хто виглядає його джерелом. Саме тому цей інструмент бере короткий перелік окремих портів замість діапазонів і записує кожну ціль у журнал.

Чи небезпечно мати відкритий порт?

Лише якщо небезпечне те, що за ним. Вебсерверу потрібні відкриті 80 і 443, і це цілком нормально. Ризик дають служби, розраховані на довірені мережі, — віддалений робочий стіл, спільний доступ до файлів, бази даних і кеші: їх починають атакувати автоматично за хвилини після появи в мережі. Якщо таку службу конче треба відкрити, ставте її за VPN, а не у відкритий інтернет.

У мене не відкривається порт 25. Це моя помилка?

Ні. Вхідний і вихідний порт 25 закривають практично всі домашні провайдери, а чимало хостерів — за замовчуванням, саме щоб обмежити спам зі зламаних машин. Це рішення з їхнього боку. На бізнес-тарифах його іноді відкривають за запитом; інакше пошта має виходити через ретранслятор.

Чому іноді результат з'являється миттєво?

Бо ми ненадовго зберігаємо результат для тієї самої адреси й того самого набору портів. Тиснути «перевірити» багато разів поспіль, поки щось лагодиш, — природна поведінка, і без цього сховища кожне натискання слало б у бік цілі нову серію спроб з'єднання, а це рівно та поведінка, за яку перевіряльний сервіс блокують.

Пов'язані перевірки