Перевірка відкритих та прослуховуваних портів у Linux за допомогою Netstat та SS
Моніторинг відкритих та прослуховуваних портів у системі Linux — це одна з найфундаментальніших практик для підтримання безпеки сервера, діагностики проблем мережі та ефективного управління інфраструктурою. Незалежно від того, чи ви запускаєте виробничий веб-сервер, середовище VPS Hosting або Dedicated Server, розуміння того, які саме порти відкриті — і які сервіси до них прив’язані — дає вам видимість, необхідну для запобігання несанкціонованому доступу, виявлення неправильних конфігурацій та усунення непотрібних поверхонь атак.
У цьому комплексному посібнику ми розглянемо, як використовувати команди netstat та ss для перевірки відкритих та прослуховуваних портів у будь-якій системі Linux, порівняємо їхні переваги та представимо додаткові інструменти, такі як lsof та nmap, для глибшого аналізу мережі.
Чому моніторинг відкритих портів має значення
Кожен відкритий порт на вашому сервері представляє потенційну точку входу. Сервіси, які неправильно налаштовані, застарілі або просто забуті, можуть піддати вашу систему експлуатації. Регулярний аудит прослуховуваних портів дозволяє вам:
- Виявити несанкціоновані сервіси, що запущені на неочікуваних портах
- Виявити спроби вторгнення або скомпрометовані процеси
- Перевірити, що правила брандмауера працюють як передбачено
- Підтвердити, що щойно розгорнуті додатки прив’язані до правильних інтерфейсів
- Закрити невикористовувані порти, щоб зменшити поверхню атак
Це особливо критично для адміністраторів, які керують середовищами Shared Web Hosting або серверами з кількома орендаторами, де одночасно запущено кілька сервісів.
Розуміння портів та їхніх типів
Перш ніж переходити до інструментів, важливо розуміти термінологію, яку ви зустрінете у виводі команд.
| Термін | Опис |
|---|---|
| Відкритий порт | Порт, на якому додаток активно прослуховує вхідні з’єднання |
| Прослуховуваний порт | Порт, прив’язаний до сервісу, який чекає на мережевий трафік |
| TCP (Transmission Control Protocol) | Орієнтований на з’єднання, надійний, використовується HTTP, SSH, FTP тощо |
| UDP (User Datagram Protocol) | Без з’єднання, швидший, але менш надійний, використовується DNS, NTP тощо |
Перевірка портів за допомогою netstat
Що таке netstat?
netstat (мережеві статистики) — це класична утиліта командного рядка, яка надає детальну інформацію про мережеві з’єднання, таблиці маршрутизації, статистику інтерфейсів та прослуховувані порти. Хоча вона офіційно застаріла на користь ss у сучасних дистрибутивах, вона залишається широко використовуваною та все ще присутня на багатьох застарілих системах.
Встановлення netstat
Команда netstat є частиною пакета net-tools, який може бути не встановлений за замовчуванням у сучасних дистрибутивах Linux.
Debian / Ubuntu:
sudo apt install net-toolsCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-toolsВикористання netstat для перевірки відкритих та прослуховуваних портів
Щоб відобразити всі прослуховувані TCP та UDP порти у вашій системі, виконайте таку команду:
sudo netstat -tulnРозбір прапорців:
| Прапорець | Опис |
|---|---|
-t | Показати TCP порти |
-u | Показати UDP порти |
-l | Показати тільки прослуховувані порти |
-n | Відобразити числові адреси замість розв’язування імен хостів |
Приклад виводу
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
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:53 0.0.0.0:*Розуміння стовпців виводу
- Локальна адреса — IP адреса та номер порту, на якому прослуховує сервіс.
0.0.0.0означає, що сервіс прослуховує на всіх доступних інтерфейсах. - Віддалена адреса — віддалена IP та порт для активних з’єднань. Зірочка (
*) означає, що з’єднання ще не встановлено. - Стан — стан з’єднання.
LISTENвказує, що порт відкритий і чекає на вхідні з’єднання.
Фільтрування конкретних портів за допомогою netstat
Ви можете передати вивід через grep для ізоляції конкретного порту або сервісу. Наприклад, щоб перевірити, чи щось прослуховує на порту 80 (HTTP):
sudo netstat -tuln | grep ":80"Щоб перевірити порт 443 (HTTPS), який необхідний для серверів з встановленими SSL Certificates:
sudo netstat -tuln | grep ":443"Щоб також відобразити назву процесу та PID, відповідальні за кожне з’єднання, додайте прапорець -p:
sudo netstat -tulnpПеревірка портів за допомогою ss
Що таке ss?
ss (статистика сокетів) — це сучасна заміна для netstat. Вона швидша, більш ефективна та надає багатший вивід — особливо на системах з великою кількістю одночасних з’єднань. Команда ss включена за замовчуванням практично у всіх сучасних дистрибутивах Linux і не потребує додаткового встановлення.
Використання ss для перевірки відкритих та прослуховуваних портів
Синтаксис ss тісно відповідає синтаксису netstat, що робить перехід простим:
ss -tulnРозбір прапорців:
| Прапорець | Опис |
|---|---|
-t | Показати TCP сокети |
-u | Показати UDP сокети |
-l | Показати тільки прослуховувані сокети |
-n | Відобразити числові адреси |
Приклад виводу
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 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:*Розширене використання ss
Команда ss пропонує низку розширених опцій фільтрування та відображення, які виходять далеко за межі можливостей netstat.
Показати тільки прослуховувані TCP порти
ss -tlПоказати тільки прослуховувані UDP порти
ss -ulВідобразити назви процесів та PID
Щоб визначити, який саме процес використовує конкретний порт, використовуйте прапорець -p:
ss -tulnpЦе одна з найкорисніших команд для усунення неполадок — вона показує назву процесу та PID поряд з кожним прослуховуваним сокетом, що робить відразу зрозумілим, який додаток володіє яким портом.
Приклад виводу з прапорцем -p
Netid State Local Address:Port Process
tcp LISTEN 0.0.0.0:80 users:(("nginx",pid=1234,fd=6))
tcp LISTEN 0.0.0.0:22 users:(("sshd",pid=987,fd=3))
tcp LISTEN 0.0.0.0:3306 users:(("mysqld",pid=2345,fd=21))Фільтрування за конкретним портом
Щоб перевірити, який процес прослуховує порт 8080:
ss -tulnp | grep ":8080"Показати всі встановлені TCP з’єднання
ss -tn state establishedПоказати статистику підсумків
ss -sЦе надає швидкий підсумок загальної кількості сокетів за типом та станом — корисно для виявлення незвичайних обсягів з’єднань.
netstat проти ss: пряме порівняння
| Функція | `netstat` | `ss` |
|---|---|---|
| Продуктивність | Повільніше на завантажених системах | Значно швидше |
| Доступність за замовчуванням | Потребує пакета net-tools | Попередньо встановлено на сучасних дистрибутивах |
| Опції фільтрування | Базові (потребує grep) | Розширені вбудовані фільтри |
| Інформація про процес | Доступна з -p | Доступна з -p |
| Деталізація виводу | Стандартна | Більш детальна інформація про сокети |
| Рекомендується для | Застарілі системи, знайомість | Сучасні середовища Linux |
Коли використовувати netstat
- На старіших системах Linux, де
ssнедоступна - При роботі зі скриптами або документацією, написаною навколо синтаксису
netstat - Для швидких перевірок на системах, де
net-toolsвже встановлена
Коли використовувати ss
- На будь-якому сучасному дистрибутиві Linux (Ubuntu 20.04+, CentOS 8+, Debian 10+ тощо)
- Коли вам потрібен швидший вивід на серверах з високим трафіком
- Для розширеного фільтрування та детального аналізу сокетів
Додаткові інструменти для аудиту портів
Поза netstat та ss, кілька інших утиліт цінні для ретельного аудиту портів.
Використання lsof
lsof (список відкритих файлів) розглядає мережеві сокети як файли, що робить це ще одним потужним способом визначити, який процес використовує
