SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-08-28

Що таке порт і як Linux-сервіси слухають мережу

Розберіться, як порт спрямовує трафік до сервісу, перевірте прослуховування командою ss і відрізніть локальний порт від доступного з Інтернету.

Що насправді таке порт

Порт — це число, яке дає змогу одному серверу одночасно запускати багато сервісів, не змішуючи їхній мережевий трафік. Ваш VPS має одну IP-адресу, але на ньому можуть одночасно працювати вебсервер, SSH-сервер і база даних. Коли надходить пакет, операційній системі потрібно визначити, якому сервісу він призначений. На це вказує номер порту. Вебтрафік надходить на порт 443, SSH — на порт 22. IP-адреса доставляє пакет на сервер, а порт — потрібній програмі на цьому сервері.

Порт — це 16-бітове число: 16 біт дають діапазон від 0 до 65535, а 0 зарезервовано, тому на практиці порти мають номери від 1 до 65535. Порти з номерами до 1024 включно називають «відомими» (well-known). Для їх відкриття потрібен root, тому стандартні сервіси використовують саме їх: 22 для SSH, 80 для HTTP, 443 для HTTPS, 53 для DNS. Порти з номерами понад 1024 можуть використовувати звичайні програми.

Є два типи протоколів: TCP і UDP. Номер порту в одному протоколі є окремим від такого самого номера в іншому. TCP — протокол із встановленням з’єднання, який використовує більшість сервісів, зокрема SSH, HTTP і бази даних. UDP працює без встановлення з’єднання й використовується, наприклад, для DNS і деяких VPN. Під час відкриття порту у firewall зазвичай потрібно вказати протокол, наприклад 22/tcp.

Прослуховування означає, що програма очікує підключення на порту

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

Команда для цього — ss:

sudo ss -tlnp

Прапорці означають TCP (t), лише сокети, що прослуховуються (l), числові порти (n, тому ви бачите 22, а не ssh) і процес-власник (p). Типовий результат:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

У стовпці Process указано, яка програма володіє кожним портом. Так можна знайти процес, який ви не планували залишати запущеним.

Важлива саме колонка Local Address

Уважно читайте адресу перед кожним портом, оскільки саме вона визначає, хто може отримати доступ до сервісу. Постійно трапляються три варіанти.

0.0.0.0:22 означає «слухати на кожній IPv4-адресі цього комп’ютера», зокрема на публічній. За наявності дозволу у firewall сервіс доступний з інтернету через IPv4.

[::]:80 означає те саме для IPv6: слухати на кожній IPv6-адресі, зокрема на публічній. Багато програм прив’язуються до цієї адреси за замовчуванням, а в Linux socket :: часто також приймає IPv4-з’єднання.

127.0.0.1:5432 означає «слухати лише на loopback». 127.0.0.1 — це адреса, яку комп’ютер використовує для звернення до самого себе. Вона не маршрутизується з будь-якого іншого місця. Сервіс, прив’язаний до цієї адреси, доступний лише з того самого сервера і ніколи — з інтернету, незалежно від налаштувань firewall. Наведений вище рядок Postgres безпечний саме завдяки цьому.

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

Прослуховування не означає доступність

Є ще одна відмінність, яка допомагає уникнути багатьох непорозумінь. Відкритий на машині порт, тобто порт, на якому програма прослуховує з’єднання, — це не те саме, що доступність цього порту ззовні, коли firewall дозволяє підключення. Для підключення віддаленого клієнта мають виконуватися обидві умови. На стороні клієнта ці дві помилки також виглядають по-різному: відмова в підключенні означає, що жодна програма не прослуховувала порт, а зависання з подальшим тайм-аутом зазвичай означає, що firewall відкинув пакет. Саме це показують ці дві помилки SSH.

Отже, є два рівні керування. Ви визначаєте, які порти прослуховуються, налаштовуючи адресу прив’язки кожного сервісу. Також ви визначаєте, до чого може підключатися зовнішній світ, за допомогою firewall. На належно налаштованому сервері використовуються обидва механізми: сервіси прив’язуються лише до потрібних адрес, а firewall забороняє все, що не було явно дозволено. Перевірка прослуховуваних портів за допомогою ss — це перший крок. Визначення дозволів firewall — другий крок, описаний у матеріалі основи firewall із UFW.

Тут є важлива особливість, яка часто спричиняє проблеми. IPv4 та IPv6 працюють окремо, тому firewall, який охоплює лише IPv4, залишає сервіси [::] відкритими через IPv6. Цій конкретній проблемі присвячено окремий матеріал: поширена проблема firewall в IPv6.

FAQ

Як переглянути відкриті порти на Linux-сервері?

Виконайте sudo ss -tlnp для TCP або sudo ss -ulnp для UDP. Команда покаже кожен сокет, що прослуховується, порт, локальну адресу, до якої він прив’язаний, і процес, якому він належить. Перевірте стовпець Local Address: 0.0.0.0 або [::] означає, що сервіс доступний із мережі, а 127.0.0.1 — що він прослуховує лише сам сервер.

У чому різниця між 0.0.0.0 і 127.0.0.1?

0.0.0.0 означає «прослуховувати всі IPv4-адреси», зокрема публічну, тому сервіс доступний із мережі. 127.0.0.1 — це loopback, адреса, яку сервер використовує для взаємодії із самим собою. Вона не маршрутизується з інших систем, тому сервіс, прив’язаний до неї, доступний лише локально. Прив’язуйте внутрішні сервіси до 127.0.0.1, щоб вони ніколи не були доступні ззовні.

Чи потрібно відкривати порт у firewall, щоб сервіс працював?

Лише для сервісів, до яких мають підключатися інші системи. Сервіс, прив’язаний до 127.0.0.1, не потребує правила firewall, оскільки зовнішні системи все одно не можуть до нього підключитися. Для сервісу на 0.0.0.0 або [::] потрібне правило firewall, яке дозволяє мережевий трафік. За замовчуванням такий трафік слід блокувати, доки ви не додасте відповідне правило.

У чому різниця між TCP-портом і UDP-портом?

TCP працює на основі з’єднання. Його використовує більшість сервісів, зокрема SSH, вебсервери та бази даних. UDP працює без встановлення з’єднання. Його використовують DNS і деякі VPN. Однаковий номер у TCP і UDP позначає різні порти, тому 53/tcp і 53/udp — це різні порти. У правилах firewall потрібно вказувати протокол, наприклад 22/tcp.