Перевірка відкритих та прослуховуваних портів у Linux за допомогою Netstat та SS
Моніторинг відкритих та прослуховуваних портів у системі Linux є однією з найбільш фундаментальних практик для підтримання безпеки сервера, діагностики проблем з мережею та ефективного управління вашою інфраструктурою. Незалежно від того, чи ви запускаєте виробничий веб-сервер, середовище VPS Hosting або Dedicated Server, розуміння того, які саме порти відкриті — та які сервіси до них прив’язані — дає вам видимість, необхідну для запобігання несанкціонованому доступу, виявлення неправильних конфігурацій та усунення непотрібних поверхонь атак.
У цьому комплексному посібнику ми розглянемо, як використовувати команди netstat та ss для перевірки відкритих та прослуховуваних портів у будь-якій системі Linux, порівняємо їхні переваги та представимо додаткові інструменти, такі як lsof та nmap для глибшого аналізу мережі.
Чому моніторинг відкритих портів має значення
Кожен відкритий порт на вашому сервері являє собою потенційну точку входу. Сервіси, які неправильно налаштовані, застарілі або просто забуті, можуть піддати вашу систему експлуатації. Регулярний аудит портів, які прослуховуються, дозволяє вам:
- Виявити несанкціоновані сервіси, які запущені на неочікуваних портах
- Виявити спроби вторгнення або скомпрометовані процеси
- Перевірити правила брандмауера працюють як передбачено
- Підтвердити, що новорозгорнуті програми прив’язані до правильних інтерфейсів
- Закрити невикористовувані порти, щоб зменшити вашу поверхню атаки
Це особливо критично для адміністраторів, які керують середовищами спільного веб-хостингу або серверами з кількома орендарями, де одночасно запущено кілька сервісів.
Розуміння портів та їх типів
Перш ніж переходити до інструментів, важливо розуміти термінологію, яку ви зустрінете у виводі команд.
| Термін | Опис |
|---|---|
| Відкритий порт | Порт, на якому програма активно прослуховує вхідні з’єднання |
| Порт прослуховування | Порт, пов’язаний зі службою, яка очікує мережевий трафік |
| 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 сертифікатами:
sudo netstat -tuln | grep ":443"Щоб також відобразити ім’я процесу та PID, відповідальні за кожне з’єднання, додайте прапорець -p:
sudo netstat -tulnpПеревірка портів за допомогою ss
Що таке ss?
ss (socket statistics) — це сучасна заміна для 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 vs. 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 (список відкритих файлів) розглядає мережеві сокети як файли, що робить це ще одним потужним способом визначити, який процес використовує даний порт.
Щоб перевірити, який процес прив’язаний до порту 80:
sudo lsof -i :80Щоб перевірити всі прослуховуючі порти:
sudo lsof -i -P -n | grep LISTENПриклад результату:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 23456 0t0 TCP *:80 (LISTEN)
sshd 987 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)Використання nmap
nmap — це потужний інструмент сканування мережі, який може виявляти відкриті порти як локально, так і на віддалених хостах. Це особливо корисно для перевірки конфігурації вашого брандмауера з зовнішної перспективи.
Встановіть nmap, якщо він ще не встановлений:
sudo apt install nmap # Debian/Ubuntu
sudo yum install nmap # CentOS/RHELСканування всіх TCP портів на локальній машині:
sudo nmap -sT localhostСканування відкритих портів на конкретній IP-адресі:
sudo nmap -sV 192.168.1.100Прапор -sV також намагається виявити версію служби, яка працює на кожному відкритому порту, що є неоціненним для виявлення застарілого або вразливого програмного забезпечення.
> Примітка безпеки: Запускайте сканування nmap лише на системах, які ви власните, або маєте явний дозвіл на сканування.
Практичний робочий процес безпеки: аудит портів вашого сервера
Ось рекомендований покроковий робочий процес для аудиту відкритих портів на сервері Linux:
- Перелічіть усі прослуховуючі порти з інформацією про процеси:
ss -tulnp- Перехресно перевірте кожен порт відповідно до очікуваних служб. Якщо ви бачите невідомий процес на неочікуваному порту, негайно розслідуйте.
- Перевірте, чи служби прослуховують усі інтерфейси (
0.0.0.0), які повинні бути доступні лише локально. Наприклад, сервер бази даних (порт 3306) зазвичай повинен прив’язуватися до127.0.0.1, а не до0.0.0.0.
- Перевірте правила брандмауера за допомогою
iptables -L -nабоufw status verbose, щоб переконатися, що зовні відкриті лише потрібні порти.
- Використовуйте
nmapз зовнішнього хоста, щоб підтвердити, які порти насправді доступні з інтернету, оскільки правила брандмауера можуть відрізнятися від того, щоssповідомляє локально.
- Закрийте або обмежте будь-які порти, які не потрібні, використовуючи брандмауер або зупинивши пов’язану службу.
Швидкий довідник: найбільш корисні команди
# List all listening TCP and UDP ports (modern, recommended)
ss -tuln
# List listening ports with process names and PIDs
ss -tulnp
# List all listening ports using netstat (legacy)
sudo netstat -tulnp
# Check which process is using port 443
ss -tulnp | grep ":443"
# Check open ports with lsof
sudo lsof -i -P -n | grep LISTEN
# Scan local machine for open ports with nmap
sudo nmap -sT localhostВисновок
Регулярний аудит відкритих та прослуховуваних портів є невід’ємною частиною адміністрування Linux-серверів. Такі інструменти як netstat та ss надають вам негайну, детальну видимість того, які сервіси запущені, які порти вони займають, і чи присутнє щось несподіване у вашій системі.
Для сучасних Linux-середовищ ss є очевидним вибором — він швидший, більш потужний і доступний за замовчуванням. Однак netstat залишається надійною альтернативою для застарілих систем або адміністраторів, які вже звикли до його синтаксису. Доповнення цих інструментів за допомогою lsof та nmap забезпечує повну картину мережевої експозиції вашого сервера.
Незалежно від того, чи ви посилюєте розгортання свіжого VPS Hosting, керуєте парком Dedicated Servers, чи захищаєте середовище Email Hosting, оволодіння аудитом портів є важливою навичкою, яка безпосередньо сприяє безпеці та надійності вашої інфраструктури.
на всіх хостингових послугах