Проверка на отворени и слушащи портове в Linux с помощта на Netstat и SS
Мониторингът на отворени и слушащи портове на Linux система е една от най-фундаменталните практики за поддържане на сигурност на сървъра, диагностициране на проблеми с мрежата и ефективно управление на вашата инфраструктура. Независимо дали управлявате production уеб сървър, 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 (списък на отворени файлове) третира мрежовите сокети като файлове, което го прави още един мощен начин за идентифициране кой процес използва даден порт.
За проверка кой процес е свързан с порт 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 е мощен инструмент за сканиране на мрежата, който може да открие отворени портове както локално, така и на отд
