Перевірка відкритих та прослуховуючих портів на 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 -yCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -yArch 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 -i3. Перевірка портів за допомогою 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
Обидва інструменти досягають однієї фундаментальної мети, але існують значні відмінності, які повинні керувати вашим вибором:
| Функція | netstat | ss |
|---|---|---|
| Пакет | 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 -tuln | sudo ss -tuln | |
| Усі прослуховуючі порти з PID | sudo netstat -tulnp | sudo ss -tulnp | |
| Тільки прослуховуючі TCP порти | sudo netstat -tln | sudo ss -tl | |
| Тільки прослуховуючі UDP порти | sudo netstat -uln | sudo ss -ul | |
| Фільтр за портом 80 | `sudo netstat -tuln | grep ":80"` | sudo ss -tuln sport = :80 |
| Усі встановлені з’єднання | sudo netstat -tunp | sudo ss -t state established | |
| Показати таблицю маршрутизації | sudo netstat -r | ip route show |
Висновок
Моніторинг відкритих та прослуховуваних портів — це фундаментальна навичка для будь-якого адміністратора системи Linux або інженера DevOps. Незалежно від того, чи ви захищаєте виробничий веб-сервер, усуваєте проблему з підключенням або проводите планову перевірку безпеки, netstat та ss дають вам негайну, практичну видимість мережевого впливу вашої системи.
Підсумовуючи ключові висновки:
- Використовуйте
ssяк основний інструмент на будь-якому сучасному дистрибутиві Linux — він швидший, багатофункціональніший і активно підтримується. - Використовуйте
netstatпри роботі з застарілими системами або коли існуючі скрипти та робочі процеси залежать від нього. - Доповніть
lsofтаnmapдля глибшого аналізу на рівні процесів та зовнішнього сканування портів. - Завжди дійте на основі своїх висновків — закривайте непотрібні порти, прив’язуйте сервіси до правильних інтерфейсів та застосовуйте правила брандмауера.
- Захищайте відкриті сервіси за допомогою належних SSL-сертифікатів та контролю доступу.
Якщо ви шукаєте хостинг-середовище, яке надає повний root-доступ для впровадження цих практик безпеки, плани VPS Hosting AlexHost забезпечують повний контроль над конфігурацією вашого сервера Linux — включаючи управління брандмауером, посилення сервісів та моніторинг мережі. Для команд, яким потрібна максимальна продуктивність та виділені ресурси, наші Dedicated Servers забезпечують необхідну потужність та ізоляцію для операцій безпеки корпоративного рівня. А якщо ви віддаєте перевагу керованому середовищу зі знайомим інтерфейсом, дослідіть наші VPS з cPanel для спрощеного управління сервером без втрати контролю.
Регулярний аудит портів у поєднанні з посиленою конфігурацією сервера — один із найефективніших захистів від несанкціонованого доступу та витоків даних. Зробіть це звичайною частиною вашої практики системного адміністрування.
на всіх хостингових послугах