Проверка на отворени и слушащи портове в 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 адресът и номерът на портa, където услугата слуша.
0.0.0.0означава, че услугата слуша на всички налични интерфейси. - Отдалечен адрес — Отдалеченият IP и портa за активни връзки. Звездичка (
*) означава, че все още няма установена връзка. - Състояние — Състоянието на връзката.
LISTENуказва, че портът е отворен и чака входящи връзки.
Филтриране на конкретни портове с netstat
Можете да пропуснете резултата чрез grep за да изолирате конкретен портa или услуга. Например, за проверка дали нещо слуша на портa 80 (HTTP):
sudo netstat -tuln | grep ":80"За проверка на портa 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 срещу 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 (list open files) третира мрежовите сокети като файлове, което го прави още един мощен начин за идентифициране кой процес използва даден порт.
За проверка кой процес е свързан към порт 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 е мощен инструмент за сканиране на мрежата, който може да открива открити портове както локално, така и на отдалечени хостове. Той е особено полезен за проверка на конфигурацията на вашия firewall от външна перспектива.
Инсталирайте 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.
- Проверете правилата на вашия firewall с
iptables -L -nилиufw status verboseза да се уверите, че само предвидените портове са експозирани външно.
- Използвайте
nmapот външен хост за да потвърдите кои портове са действително достъпни от интернет, тъй като правилата на firewall могат да се различават от това, коетоssдокладва локално.
- Затворете или ограничете всички портове, които не са необходими с помощта на вашия firewall или чрез спиране на свързаната услуга.
Бърза справка: Най-полезни команди
# 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 среда, овладяването на одитирането на портове е съществено умение, което директно допринася за сигурността и надеждността на вашата инфраструктура.
от всички хостинг услуги