Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Безпека

Перевірка відкритих та прослуховуючих портів на Linux за допомогою netstat та ss

Моніторинг відкритих та прослуховуваних портів у системі Linux є однією з найкритичніших практик для підтримання безпеки сервера, діагностики проблем мережі та ефективного управління вашою інфраструктурою. Регулярно аудитуючи, які порти відкриті та які служби прив’язані до них, ви можете проактивно виявити спроби несанкціонованого доступу, виявити неправильні конфігурації та усунути непотрібні поверхні атак, перш ніж вони стануть серйозними вразливостями.

Незалежно від того, чи ви запускаєте високонавантажену програму на плані VPS Hosting або керуєте парком bare-metal машин, розуміння мережевої експозиції вашого сервера Linux є обов’язковим. Цей посібник надає комплексний, технічно точний огляд того, як використовувати як netstat та ss — два найширше використовувані інструменти командного рядка для інспекції портів на Linux — разом з додатковими інструментами та практиками з реального світу.

1. Розуміння портів та їх типів

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

Що таке мережевий порт?

Мережевий порт — це логічна точка комунікації, пов’язана з конкретним процесом або сервісом на хості. Порти дозволяють одному серверу з однією IP-адресою одночасно запускати кілька мережевих сервісів — наприклад, веб-сервер на порту 80, SSH-демон на порту 22 та базу даних на порту 3306.

Категорії портів

ДіапазонКатегоріяОпис
0–1023Добре відомі портиЗарезервовані для стандартних системних сервісів (HTTP, SSH, FTP тощо)
1024–49151Зареєстровані портиВикористовуються додатками та проміжним ПО (MySQL, PostgreSQL тощо)
49152–65535Динамічні/Тимчасові портиТимчасово призначаються для вихідних клієнтських з’єднань

Стани портів, з якими ви зустрінетеся

  • LISTEN — Порт відкритий і сервіс активно чекає на вхідні з’єднання.
  • ESTABLISHED — Існує активне з’єднання між двома кінцевими точками.
  • TIME_WAIT — З’єднання закривається; система чекає, щоб переконатися, що віддалена сторона отримала остаточне підтвердження.
  • CLOSE_WAIT — Віддалена сторона закрила з’єднання; локальний додаток ще не закрив свою сторону.

Транспортні протоколи

  • TCP (Transmission Control Protocol): Орієнтований на з’єднання, надійний, з перевіркою помилок та гарантованою доставкою. Використовується HTTP, HTTPS, SSH, FTP та більшістю протоколів прикладного рівня.
  • UDP (User Datagram Protocol): Без з’єднання, швидший, але без гарантій доставки. Використовується DNS, NTP, DHCP та потоковими сервісами.

2. Перевірка портів за допомогою netstat

Що таке netstat?

netstat (network statistics) — це класична утиліта командного рядка, яка відображає активні мережеві з’єднання, таблиці маршрутизації, статистику інтерфейсів та прослуховуючі порти. Хоча вона офіційно застаріла на користь ss на сучасних дистрибутивах Linux, netstat залишається широко розповсюджена — особливо на застарілих системах та в середовищах, де адміністратори добре знайомі з її синтаксисом.

Встановлення netstat

netstat входить до пакета net-tools, який більше не встановлюється за замовчуванням на багатьох сучасних дистрибутивах. Встановіть його таким чином:

Debian / Ubuntu:

sudo apt update && sudo apt install net-tools -y

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -y

Arch Linux:

sudo pacman -S net-tools

Основний синтаксис netstat

sudo netstat [options]

Перевірка всіх прослуховуючих TCP та UDP портів

sudo netstat -tuln

Розшифровка прапорців:

ПрапорецьЗначення
-tВідображати TCP з’єднання та порти
-uВідображати UDP з’єднання та порти
-lПоказувати лише прослуховуючі сокети (порти, що чекають на з’єднання)
-nВідображати числові IP-адреси та номери портів (пропустити розпізнавання DNS для швидкості)

Приклад виводу:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp6       0      0 :::443                  :::*                    LISTEN
udp        0      0 0.0.0.0:68              0.0.0.0:*

Читання виводу:

  • Proto — Протокол, що використовується (tcp, udp, tcp6, udp6).
  • Local Address — IP-адреса та номер порту, на якому служба прослуховує. 0.0.0.0 означає, що служба прослуховує на всіх доступних інтерфейсах; 127.0.0.1 означає, що вона доступна лише локально.
  • Foreign Address — Адреса віддаленого клієнта (показується як 0.0.0.0:* для прослуховуючих портів без активного з’єднання).
  • State — Стан з’єднання (LISTEN, ESTABLISHED, TIME_WAIT тощо).

Включення інформації про процес

Щоб побачити, який процес володіє кожним прослуховуючим портом, додайте прапорець -p:

sudo netstat -tulnp

Приклад виводу з інформацією про процес:

Proto Recv-Q Send-Q Local Address    Foreign Address  State   PID/Program name
tcp        0      0 0.0.0.0:22       0.0.0.0:*        LISTEN  1023/sshd
tcp        0      0 0.0.0.0:80       0.0.0.0:*        LISTEN  2847/nginx
tcp        0      0 127.0.0.1:3306   0.0.0.0:*        LISTEN  3102/mysqld

> Примітка: Ви повинні запустити цю команду з sudo щоб побачити імена процесів для всіх користувачів, а не лише своїх.

Фільтрування виводу для конкретних портів або служб

Використовуйте grep для звуження результатів до конкретного порту або служби:

# Check if anything is listening on port 80
sudo netstat -tuln | grep ":80"

# Check for SSH (port 22)
sudo netstat -tuln | grep ":22"

# Check for MySQL (port 3306)
sudo netstat -tuln | grep ":3306"

# Check for HTTPS (port 443)
sudo netstat -tuln | grep ":443"

Перегляд всіх активних з’єднань (не лише прослуховуючих)

Щоб побачити всі активні з’єднання, включаючи встановлені, видаліть прапорець -l:

sudo netstat -tunp

Відображення таблиці маршрутизації

sudo netstat -r

Відображення статистики мережевого інтерфейсу

sudo netstat -i

3. Перевірка портів за допомогою ss

Що таке ss?

ss (статистика сокетів) — це сучасна заміна netstat, розроблена як частина пакету iproute2. Вона взаємодіє безпосередньо з ядром Linux через сокети Netlink, що робить її значно швидшою та ефективнішою за netstat — особливо на системах з тисячами одночасних з’єднань.

ss встановлюється за замовчуванням практично на всіх сучасних дистрибутивах Linux, включаючи Ubuntu 18.04+, CentOS 7+, Debian 9+ та їхні похідні.

Основний синтаксис ss

ss [options] [filter]

Перевірка всіх прослуховуючих портів TCP та UDP

ss -tuln

Прапори мають однакове значення як у netstat:

ПрапорЗначення
-tПоказати сокети TCP
-uПоказати сокети UDP
-lПоказати тільки прослуховуючі сокети
-nПоказати числові адреси (без розпізнавання DNS)

Приклад виводу:

Netid  State   Recv-Q  Send-Q   Local Address:Port    Peer Address:Port
tcp    LISTEN  0       128      0.0.0.0:22             0.0.0.0:*
tcp    LISTEN  0       511      0.0.0.0:80             0.0.0.0:*
tcp    LISTEN  0       128      127.0.0.1:3306         0.0.0.0:*
tcp    LISTEN  0       511         [::]:443            [::]:*
udp    UNCONN  0       0        0.0.0.0:68             0.0.0.0:*

Включення інформації про процеси

sudo ss -tulnp

Приклад виводу:

Netid  State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
tcp    LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1023,fd=3))
tcp    LISTEN  0       511     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=2847,fd=6))
tcp    LISTEN  0       128     127.0.0.1:3306       0.0.0.0:*          users:(("mysqld",pid=3102,fd=21))

Фільтрування за протоколом

Показати тільки прослуховуючі порти TCP:

ss -tl

Показати тільки прослуховуючі порти UDP:

ss -ul

Показати всі з’єднання TCP (включаючи встановлені):

ss -t

Розширене фільтрування за допомогою ss

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

Фільтрування за конкретним номером порту:

ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22

Фільтрування за портом призначення:

ss -tuln dport = :3306

Показати всі сокети у стані ESTABLISHED:

ss -t state established

Показати всі сокети у стані LISTEN:

ss -t state listening

Фільтрування за IP-адресою джерела:

ss -tuln src 192.168.1.100

Показати з’єднання до конкретного віддаленого хосту:

ss -t dst 203.0.113.50

Комбінування кількох фільтрів:

ss -t state established '( dport = :443 or sport = :443 )'

Відображення використання пам’яті сокетів

ss також може показувати детальне використання пам’яті для кожного сокету, що корисно для діагностики проблем з продуктивністю:

ss -tm

Відображення інформації про таймери

ss -to

Це показує таймери повторної передачі та таймери keepalive для з’єднань TCP, що є неоціненним для діагностики проблем зі стабільністю з’єднання.

4. Порівняння netstat та ss

Обидва інструменти досягають однієї фундаментальної мети, але існують значні відмінності, які повинні керувати вашим вибором:

Функціяnetstatss
Пакетnet-tools (часто не встановлено за замовчуванням)iproute2 (встановлено на сучасних дистрибутивах)
ШвидкістьПовільніше (читає з /proc/net/)Швидше (використовує інтерфейс ядра Netlink)
Продуктивність у масштабіПогіршується з тисячами з’єднаньЕфективно обробляє великі кількості з’єднань
Розширене фільтруванняВимагає передачі до grepВбудоване фільтрування на основі виразів
Деталізація виводуДобраБільш детальна (пам’ять, таймери тощо)
Підтримка IPv6АдекватнаВідмінна
Статус обслуговуванняЗастарілаАктивно розвивається
Крива навчанняЗнайома досвідченим адміністраторамДещо інший синтаксис, але добре задокументована

Коли використовувати netstat

  • При адмініструванні старіших систем Linux (CentOS 6, Debian 7 тощо), де ss може бути недоступна.
  • При роботі зі скриптами або документацією, які вже використовують синтаксис netstat.
  • Коли вам більше подобається формат її виводу і вам не потрібне розширене фільтрування.

Коли використовувати ss

  • На будь-якому сучасному дистрибутиві Linux (Ubuntu 18.04+, CentOS 7+, Debian 9+ та новіші).
  • При управлінні серверами з великим обсягом одночасних з’єднань — такими як ті, що працюють на Dedicated Servers під великим навантаженням.
  • Коли вам потрібне розширене фільтрування, інформація про таймери або статистика пам’яті сокетів.
  • Для автоматизації та скриптування, де важлива продуктивність.

5. Інші інструменти для перевірки відкритих портів

Крім netstat та ss, існує кілька інших утиліт, корисних для інспекції портів та аналізу мережі на Linux.

lsof — List Open Files (Including Sockets)

lsof (List Open Files) розглядає мережеві сокети як файли (відповідно до філософії Linux “все є файлом”) і може відобразити, який процес має відкритим конкретний порт.

Встановлення lsof:

# Debian/Ubuntu
sudo apt install lsof -y

# CentOS/RHEL
sudo yum install lsof -y

Перевірити, який процес використовує порт 80:

sudo lsof -i :80

Перевірити, який процес використовує порт 443:

sudo lsof -i :443

Список усіх мережевих з’єднань:

sudo lsof -i

Список усіх TCP сокетів, що прослуховують:

sudo lsof -i TCP -s TCP:LISTEN

Приклад виведення:

COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    2847     root    6u  IPv4  23456      0t0  TCP *:http (LISTEN)
nginx    2848 www-data    6u  IPv4  23456      0t0  TCP *:http (LISTEN)

nmap — Network Mapper

nmap — це потужний інструмент сканування мережі, який використовується для аудиту безпеки, виявлення мережі та сканування портів. На відміну від ss та netstat (які інспектують локальну систему), nmap може сканувати як локальні, так і віддалені хости.

Встановлення nmap:

# Debian/Ubuntu
sudo apt install nmap -y

# CentOS/RHEL
sudo yum install nmap -y

Сканувати всі TCP порти на localhost:

sudo nmap -sT localhost

Сканувати відкриті порти з виявленням ОС:

sudo nmap -sT -O localhost

Сканувати певний діапазон портів:

sudo nmap -p 1-1024 localhost

Сканувати UDP порти (потребує root):

sudo nmap -sU localhost

Сканувати віддалений сервер:

sudo nmap -sT 203.0.113.50

> Важливо: Скануйте лише системи, які ви власните, або мають явне дозволу на сканування. Несанкціоноване сканування портів може порушити закони та умови обслуговування.

fuser — Визначення процесів, які використовують файли або сокети

# Find which process is using port 80 (TCP)
sudo fuser 80/tcp

# Find which process is using port 53 (UDP)
sudo fuser 53/udp

/proc/net/ — Прямий інтерфейс ядра

Для цілей написання скриптів ви можете читати інформацію про порти безпосередньо з віртуальної файлової системи ядра Linux:

# View raw TCP socket table
cat /proc/net/tcp

# View raw UDP socket table
cat /proc/net/udp

Зверніть увагу, що адреси та порти в /proc/net/tcp відображаються в шістнадцятковій системі та потребують перетворення для читання людиною. Інструменти на кшталт ss та netstat автоматично аналізують ці дані.

6. Найкращі практики безпеки для управління відкритими портами

Знання того, як перевірити відкриті порти, — це лише половина справи. Дія на основі цієї інформації — це те, що забезпечує безпеку вашого сервера. Ось практичні рекомендації, які повинен дотримуватися кожен адміністратор Linux:

Принцип найменшої експозиції

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

Прив’язка сервісів до конкретних інтерфейсів

Уникайте прив’язки сервісів до 0.0.0.0 (усі інтерфейси), якщо це не потрібно. Наприклад, сервер бази даних MySQL повинен прослуховувати 127.0.0.1 лише якщо він доступний локально:

# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1

Використовуйте брандмауер

Використовуйте ufw (Ubuntu) або firewalld / iptables (CentOS/RHEL) для обмеження доступу до відкритих портів за IP-адресою, підмережею або мережевим інтерфейсом:

# Allow SSH only from a specific IP (ufw)
sudo ufw allow from 203.0.113.10 to any port 22

# Deny all other access to port 22
sudo ufw deny 22

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

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

# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txt

Захист сервісів за допомогою SSL/TLS

Будь-який сервіс, відкритий для інтернету — веб-сервери, поштові сервери, панелі керування — повинен використовувати зашифровані з’єднання. Поєднайте ваші відкриті порти з дійсними SSL сертифікатами для захисту даних під час передачі та запобігання атакам «людина посередині».

Моніторинг несподіваних змін

Використовуйте інструменти виявлення вторгнень, такі як AIDE, Tripwire або auditd, щоб отримувати сповіщення, коли новий процес починає прослуховувати порти. Інтегруйте з централізованим логуванням (наприклад, ELK Stack, Graylog) для комплексної видимості.

Вимкнення невикористовуваних сервісів

Якщо сервіс не потрібен, зупиніть його та вимкніть його запуск під час завантаження:

# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>

Швидкий довідник: найбільш корисні команди

Завданняnetstat командаss команда
Усі прослуховуючі TCP/UDP портиsudo netstat -tulnsudo ss -tuln
Усі прослуховуючі порти з PIDsudo netstat -tulnpsudo ss -tulnp
Тільки прослуховуючі TCP портиsudo netstat -tlnsudo ss -tl
Тільки прослуховуючі UDP портиsudo netstat -ulnsudo ss -ul
Фільтр за портом 80`sudo netstat -tulngrep ":80"`sudo ss -tuln sport = :80
Усі встановлені з’єднанняsudo netstat -tunpsudo ss -t state established
Показати таблицю маршрутизаціїsudo netstat -rip route show

Висновок

Моніторинг відкритих та прослуховуваних портів — це фундаментальна навичка для будь-якого адміністратора системи Linux або інженера DevOps. Незалежно від того, чи ви захищаєте виробничий веб-сервер, усуваєте проблему з підключенням або проводите планову перевірку безпеки, netstat та ss дають вам негайну, практичну видимість мережевого впливу вашої системи.

Підсумовуючи ключові висновки:

  • Використовуйте ss як основний інструмент на будь-якому сучасному дистрибутиві Linux — він швидший, багатофункціональніший і активно підтримується.
  • Використовуйте netstat при роботі з застарілими системами або коли існуючі скрипти та робочі процеси залежать від нього.
  • Доповніть lsof та nmap для глибшого аналізу на рівні процесів та зовнішнього сканування портів.
  • Завжди дійте на основі своїх висновків — закривайте непотрібні порти, прив’язуйте сервіси до правильних інтерфейсів та застосовуйте правила брандмауера.
  • Захищайте відкриті сервіси за допомогою належних SSL-сертифікатів та контролю доступу.

Якщо ви шукаєте хостинг-середовище, яке надає повний root-доступ для впровадження цих практик безпеки, плани VPS Hosting AlexHost забезпечують повний контроль над конфігурацією вашого сервера Linux — включаючи управління брандмауером, посилення сервісів та моніторинг мережі. Для команд, яким потрібна максимальна продуктивність та виділені ресурси, наші Dedicated Servers забезпечують необхідну потужність та ізоляцію для операцій безпеки корпоративного рівня. А якщо ви віддаєте перевагу керованому середовищу зі знайомим інтерфейсом, дослідіть наші VPS з cPanel для спрощеного управління сервером без втрати контролю.

Регулярний аудит портів у поєднанні з посиленою конфігурацією сервера — один із найефективніших захистів від несанкціонованого доступу та витоків даних. Зробіть це звичайною частиною вашої практики системного адміністрування.