Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Bezpieczeństwo Linux

Sprawdzanie otwartych i nasłuchujących portów w systemie Linux za pomocą netstat i ss

Monitorowanie otwartych i nasłuchujących portów w systemie Linux jest jedną z najkrytyczniejszych praktyk utrzymania bezpieczeństwa serwera, diagnozowania problemów sieciowych i efektywnego zarządzania infrastrukturą. Poprzez regularne audytowanie, które porty są otwarte i które usługi są do nich przywiązane, możesz proaktywnie zidentyfikować nieautoryzowane próby dostępu, wykryć błędy konfiguracji i wyeliminować niepotrzebne powierzchnie ataku, zanim staną się poważnymi lukami w zabezpieczeniach.

Niezależnie od tego, czy uruchamiasz aplikację o dużym ruchu na planie VPS Hosting, czy zarządzasz flotą maszyn bare-metal, zrozumienie ekspozycji sieciowej serwera Linux jest niezbędne. Ten przewodnik zawiera kompleksowy, technicznie dokładny przegląd sposobu korzystania zarówno z netstat jak i ss — dwóch najczęściej używanych narzędzi wiersza poleceń do inspekcji portów w Linux — wraz z narzędziami uzupełniającymi i najlepszymi praktykami z rzeczywistego świata.

1. Zrozumienie portów i ich typów

Zanim przejdziemy do samych narzędzi, ważne jest ustalenie jasnego zrozumienia tego, czym są porty, jak są kategoryzowane i dlaczego ich monitorowanie ma znaczenie.

Czym jest port sieciowy?

Port sieciowy to logiczny punkt końcowy komunikacji powiązany z konkretnym procesem lub usługą na hoście. Porty umożliwiają pojedynczemu serwerowi z jednym adresem IP uruchamianie wielu usług sieciowych jednocześnie — na przykład serwer WWW na porcie 80, demon SSH na porcie 22 i bazę danych na porcie 3306.

Kategorie portów

ZakresKategoriaOpis
0–1023Porty dobrze znaneZarezerwowane dla standardowych usług systemowych (HTTP, SSH, FTP, itp.)
1024–49151Porty zarejestrowaneUżywane przez aplikacje i oprogramowanie pośredniczące (MySQL, PostgreSQL, itp.)
49152–65535Porty dynamiczne/efemeryczneTymczasowo przydzielane dla wychodzących połączeń klienta

Stany portów, które napotkasz

  • LISTEN — Port jest otwarty i usługa aktywnie czeka na połączenia przychodzące.
  • ESTABLISHED — Istnieje aktywne połączenie między dwoma punktami końcowymi.
  • TIME_WAIT — Połączenie się zamyka; system czeka, aby upewnić się, że zdalny koniec otrzymał ostateczne potwierdzenie.
  • CLOSE_WAIT — Zdalny koniec zamknął połączenie; aplikacja lokalna jeszcze nie zamknęła swojej strony.

Protokoły transportowe

  • TCP (Transmission Control Protocol): Zorientowany na połączenie, niezawodny, ze sprawdzaniem błędów i gwarantowaną dostawą. Używany przez HTTP, HTTPS, SSH, FTP i większość protokołów warstwy aplikacji.
  • UDP (User Datagram Protocol): Bezpołączeniowy, szybszy, ale bez gwarancji dostawy. Używany przez DNS, NTP, DHCP i usługi streamingowe.

2. Sprawdzanie portów za pomocą netstat

Co to jest netstat?

netstat (network statistics) to klasyczne narzędzie wiersza poleceń, które wyświetla aktywne połączenia sieciowe, tabele routingu, statystyki interfejsów i porty nasłuchujące. Chociaż zostało oficjalnie wycofane na rzecz ss w nowoczesnych dystrybucjach Linux, netstat pozostaje szeroko wdrażane — szczególnie w systemach starszych i w środowiskach, gdzie administratorzy są głęboko zaznajomieni z jego składnią.

Instalacja netstat

netstat jest częścią pakietu net-tools, który nie jest już instalowany domyślnie w wielu nowoczesnych dystrybucjach. Zainstaluj go w następujący sposób:

Debian / Ubuntu:

sudo apt update && sudo apt install net-tools -y

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -y

Arch Linux:

sudo pacman -S net-tools

Podstawowa składnia netstat

sudo netstat [options]

Sprawdzanie wszystkich nasłuchujących portów TCP i UDP

sudo netstat -tuln

Rozbicie flag:

FlagaZnaczenie
-tWyświetl połączenia TCP i porty
-uWyświetl połączenia UDP i porty
-lPokaż tylko nasłuchujące gniazda (porty oczekujące na połączenia)
-nWyświetl numeryczne adresy IP i numery portów (pomiń rozdzielczość DNS dla szybkości)

Przykładowe wyjście:

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:*

Odczytywanie wyjścia:

  • Proto — Używany protokół (tcp, udp, tcp6, udp6).
  • Local Address — Adres IP i numer portu, na którym usługa nasłuchuje. 0.0.0.0 oznacza, że usługa nasłuchuje na wszystkich dostępnych interfejsach; 127.0.0.1 oznacza, że jest dostępna tylko lokalnie.
  • Foreign Address — Adres zdalnego klienta (wyświetlany jako 0.0.0.0:* dla portów nasłuchujących bez aktywnego połączenia).
  • State — Stan połączenia (LISTEN, ESTABLISHED, TIME_WAIT, itp.).

Dołączanie informacji o procesach

Aby zobaczyć, który proces jest właścicielem każdego nasłuchującego portu, dodaj flagę -p:

sudo netstat -tulnp

Przykładowe wyjście z informacjami o procesach:

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

> Uwaga: Musisz uruchomić to polecenie z sudo, aby zobaczyć nazwy procesów dla wszystkich użytkowników, a nie tylko dla swoich.

Filtrowanie wyjścia dla określonych portów lub usług

Użyj grep aby zawęzić wyniki do określonego portu lub usługi:

# 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"

Wyświetlanie wszystkich aktywnych połączeń (nie tylko nasłuchujących)

Aby zobaczyć wszystkie aktywne połączenia, w tym nawiązane, usuń flagę -l:

sudo netstat -tunp

Wyświetlanie tabeli routingu

sudo netstat -r

Wyświetlanie statystyk interfejsu sieciowego

sudo netstat -i

3. Sprawdzanie portów za pomocą ss

Co to jest ss?

ss (statystyka gniazd) to nowoczesna zamiana dla netstat, opracowana jako część pakietu iproute2. Komunikuje się bezpośrednio z jądrem Linux za pośrednictwem gniazd Netlink, co czyni go znacznie szybszym i bardziej wydajnym niż netstat — szczególnie w systemach z tysiącami równoczesnych połączeń.

ss jest instalowany domyślnie na praktycznie wszystkich nowoczesnych dystrybucjach Linux, w tym Ubuntu 18.04+, CentOS 7+, Debian 9+ i ich pochodnych.

Podstawowa składnia ss

ss [options] [filter]

Sprawdzanie wszystkich nasłuchujących portów TCP i UDP

ss -tuln

Flagi mają identyczne znaczenie jak w netstat:

FlagaZnaczenie
-tPokaż gniazda TCP
-uPokaż gniazda UDP
-lPokaż tylko nasłuchujące gniazda
-nPokaż adresy numeryczne (bez rozpoznawania DNS)

Przykładowe wyjście:

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:*

Dołączanie informacji o procesach

sudo ss -tulnp

Przykładowe wyjście:

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))

Filtrowanie według protokołu

Pokaż tylko nasłuchujące porty TCP:

ss -tl

Pokaż tylko nasłuchujące porty UDP:

ss -ul

Pokaż wszystkie połączenia TCP (w tym nawiązane):

ss -t

Zaawansowane filtrowanie za pomocą ss

Jedną z ss najpotężniejszych funkcji jest wbudowane filtrowanie oparte na wyrażeniach, które pozwala filtrować według portu, adresu, stanu i więcej — bez polegania na grep.

Filtruj według konkretnego numeru portu:

ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22

Filtruj według portu docelowego:

ss -tuln dport = :3306

Pokaż wszystkie gniazda w stanie ESTABLISHED:

ss -t state established

Pokaż wszystkie gniazda w stanie LISTEN:

ss -t state listening

Filtruj według adresu IP źródła:

ss -tuln src 192.168.1.100

Pokaż połączenia do konkretnego hosta zdalnego:

ss -t dst 203.0.113.50

Połącz wiele filtrów:

ss -t state established '( dport = :443 or sport = :443 )'

Wyświetlanie użycia pamięci gniazda

ss może również wyświetlać szczegółowe użycie pamięci na gniazdo, co jest przydatne do diagnozowania problemów z wydajnością:

ss -tm

Wyświetlanie informacji o timerach

ss -to

Pokazuje timery retransmisji i timery keepalive dla połączeń TCP, co jest nieocenione do diagnozowania problemów ze stabilnością połączenia.

4. Porównanie netstat vs. ss

Oba narzędzia osiągają ten sam fundamentalny cel, ale istnieją znaczące różnice, które powinny kierować Twoim wyborem:

Funkcjanetstatss
Pakietnet-tools (często nie preinstalowany)iproute2 (preinstalowany na nowoczesnych dystrybucjach)
SzybkośćWolniejszy (czyta z /proc/net/)Szybszy (używa interfejsu jądra Netlink)
Wydajność na dużą skalęPogarsza się przy tysiącach połączeńEfektywnie obsługuje dużą liczbę połączeń
Zaawansowane filtrowanieWymaga potoku do grepWbudowane filtrowanie oparte na wyrażeniach
Szczegółowość wyjściaDobraBardziej szczegółowa (pamięć, timery, itp.)
Obsługa IPv6WystarczającaDoskonała
Status utrzymaniaPrzestarzałyAktywnie utrzymywany
Krzywa uczenia sięZnany administratorom z długim stażemNieco inna składnia, ale dobrze udokumentowana

Kiedy używać netstat

  • Podczas administrowania starszymi systemami Linux (CentOS 6, Debian 7, itp.), gdzie ss może być niedostępny.
  • Podczas pracy ze skryptami lub dokumentacją, która już używa składni netstat.
  • Gdy czujesz się bardziej komfortowo z jego formatem wyjścia i nie potrzebujesz zaawansowanego filtrowania.

Kiedy używać ss

  • Na każdej nowoczesnej dystrybucji Linux (Ubuntu 18.04+, CentOS 7+, Debian 9+ i nowsze).
  • Podczas zarządzania serwerami z dużą liczbą jednoczesnych połączeń — takimi jak te działające na Dedicated Servers pod dużym obciążeniem.
  • Gdy potrzebujesz zaawansowanego filtrowania, informacji o timerach lub statystyk pamięci gniazda.
  • Do automatyzacji i skryptów, gdzie wydajność ma znaczenie.

5. Inne narzędzia do sprawdzania otwartych portów

Poza netstat i ss, istnieje kilka innych narzędzi przydatnych do inspekcji portów i analizy sieci w Linux.

lsof — List Open Files (Wyświetlanie otwartych plików, w tym gniazd)

lsof (List Open Files) traktuje gniazda sieciowe jako pliki (zgodnie z filozofią Linux „wszystko jest plikiem”) i może wyświetlić, który proces ma otwarty określony port.

Instalacja lsof:

# Debian/Ubuntu
sudo apt install lsof -y

# CentOS/RHEL
sudo yum install lsof -y

Sprawdzenie, który proces używa portu 80:

sudo lsof -i :80

Sprawdzenie, który proces używa portu 443:

sudo lsof -i :443

Wyświetlenie wszystkich połączeń sieciowych:

sudo lsof -i

Wyświetlenie wszystkich nasłuchujących gniazd TCP:

sudo lsof -i TCP -s TCP:LISTEN

Przykładowe wyjście:

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 to potężne narzędzie do skanowania sieci używane do audytów bezpieczeństwa, odkrywania sieci i skanowania portów. W przeciwieństwie do ss i netstat (które sprawdzają system lokalny), nmap może skanować zarówno hosty lokalne, jak i zdalne.

Instalacja nmap:

# Debian/Ubuntu
sudo apt install nmap -y

# CentOS/RHEL
sudo yum install nmap -y

Skanowanie wszystkich portów TCP na localhost:

sudo nmap -sT localhost

Skanowanie otwartych portów z wykrywaniem systemu operacyjnego:

sudo nmap -sT -O localhost

Skanowanie określonego zakresu portów:

sudo nmap -p 1-1024 localhost

Skanowanie portów UDP (wymaga uprawnień root):

sudo nmap -sU localhost

Skanowanie serwera zdalnego:

sudo nmap -sT 203.0.113.50

> Ważne: Skanuj tylko systemy, które posiadasz lub masz wyraźne pozwolenie na skanowanie. Nieautoryzowane skanowanie portów może naruszać prawo i warunki świadczenia usług.

fuser — Identyfikacja procesów używających plików lub gniazd

# 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/ — Bezpośredni interfejs jądra

Do celów skryptowania możesz odczytać informacje o portach bezpośrednio z wirtualnego systemu plików jądra Linux:

# View raw TCP socket table
cat /proc/net/tcp

# View raw UDP socket table
cat /proc/net/udp

Zwróć uwagę, że adresy i porty w /proc/net/tcp są wyświetlane w systemie szesnastkowym i wymagają konwersji, aby były czytelne dla człowieka. Narzędzia takie jak ss i netstat automatycznie analizują te dane.

6. Najlepsze praktyki bezpieczeństwa w zarządzaniu otwartymi portami

Wiedza, jak sprawdzić otwarte porty, to tylko połowa sukcesu. Działanie na podstawie tych informacji to to, co zapewnia bezpieczeństwo serwera. Oto praktyczne najlepsze praktyki, które powinien stosować każdy administrator Linux:

Zasada najmniejszej ekspozycji

Udostępniaj tylko porty, które są absolutnie niezbędne do funkcjonowania aplikacji. Każdy otwarty port to potencjalny wektor ataku. Regularnie audytuj porty nasłuchujące i zamykaj lub blokuj zaporą wszystko, co nie musi być publicznie dostępne.

Powiąż usługi z konkretnymi interfejsami

Unikaj powiązania usług z 0.0.0.0 (wszystkie interfejsy), chyba że jest to wymagane. Na przykład serwer bazy danych MySQL powinien nasłuchiwać tylko na 127.0.0.1 jeśli jest dostępny tylko lokalnie:

# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1

Użyj zapory sieciowej

Użyj ufw (Ubuntu) lub firewalld / iptables (CentOS/RHEL), aby ograniczyć dostęp do otwartych portów według adresu IP, podsieci lub interfejsu sieciowego:

# 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

Regularnie audytuj porty nasłuchujące

Zaplanuj regularne audyty portów za pomocą zadań cron lub narzędzi monitorowania. Nowy port nasłuchujący może wskazywać na zagrożoną usługę, błędną konfigurację lub — w najgorszym przypadku — złośliwe oprogramowanie:

# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txt

Zabezpiecz usługi za pomocą SSL/TLS

Każda usługa udostępniona w internecie — serwery WWW, serwery poczty, panele sterowania — powinna używać szyfrowanych połączeń. Połącz otwarte porty z ważnymi Certyfikatami SSL, aby chronić dane w transmisji i zapobiec atakom man-in-the-middle.

Monitoruj nieoczekiwane zmiany

Użyj narzędzi do wykrywania włamań, takich jak AIDE, Tripwire lub auditd, aby otrzymywać alerty, gdy nowe procesy zaczną nasłuchiwać na portach. Zintegruj z centralizowanym rejestrowaniem (np. ELK Stack, Graylog) dla kompleksowej widoczności.

Wyłącz nieużywane usługi

Jeśli usługa nie jest potrzebna, zatrzymaj ją i wyłącz jej uruchamianie przy starcie:

# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>

Szybki Przewodnik: Najczęściej Używane Polecenia

ZadaniePolecenie netstatPolecenie ss
Wszystkie nasłuchujące porty TCP/UDPsudo netstat -tulnsudo ss -tuln
Wszystkie nasłuchujące porty z PID-amisudo netstat -tulnpsudo ss -tulnp
Tylko nasłuchujące porty TCPsudo netstat -tlnsudo ss -tl
Tylko nasłuchujące porty UDPsudo netstat -ulnsudo ss -ul
Filtruj po porcie 80`sudo netstat -tulngrep ":80"`sudo ss -tuln sport = :80
Wszystkie ustanowione połączeniasudo netstat -tunpsudo ss -t state established
Pokaż tabelę routingusudo netstat -rip route show

Podsumowanie

Monitorowanie otwartych i nasłuchujących portów jest umiejętnością fundamentalną dla każdego administratora systemu Linux lub inżyniera DevOps. Niezależnie od tego, czy zabezpieczasz produkcyjny serwer WWW, rozwiązujesz problem łączności, czy przeprowadzasz rutynowy audyt bezpieczeństwa, netstat i ss dają ci natychmiastową, praktyczną widoczność ekspozycji sieciowej twojego systemu.

Podsumowując kluczowe wnioski:

  • Używaj ss jako głównego narzędzia w każdej nowoczesnej dystrybucji Linux — jest szybsze, bogatsze w funkcje i aktywnie utrzymywane.
  • Używaj netstat podczas pracy na starszych systemach lub gdy istniejące skrypty i przepływy pracy od niego zależą.
  • Uzupełnij za pomocą lsof i nmap do głębszej inspekcji na poziomie procesów i skanowania portów zewnętrznych.
  • Zawsze działaj na podstawie swoich ustaleń — zamykaj niepotrzebne porty, wiąż usługi z poprawnymi interfejsami i egzekwuj reguły zapory.
  • Zabezpiecz odsłonięte usługi za pomocą odpowiednich Certyfikatów SSL i kontroli dostępu.

Jeśli szukasz środowiska hostingowego, które daje ci pełny dostęp root do wdrażania tych praktyk bezpieczeństwa, plany VPS Hosting AlexHost zapewniają pełną kontrolę nad konfiguracją serwera Linux — w tym zarządzanie zaporą, utwardzanie usług i monitorowanie sieci. Dla zespołów, które potrzebują maksymalnej wydajności i dedykowanych zasobów, nasze Serwery Dedykowane dostarczają czystą moc i izolację wymaganą do operacji bezpieczeństwa klasy korporacyjnej. A jeśli wolisz zarządzane środowisko ze znanym interfejsem, zapoznaj się z naszymi opcjami VPS z cPanel umożliwiającymi usprawnione zarządzanie serwerem bez poświęcania kontroli.

Regularne audyty portów, w połączeniu z utwardzoną konfiguracją serwera, to jedna z najskuteczniejszych obrony przed nieautoryzowanym dostępem i naruszeniami danych. Uczyń to rutynową częścią swojej praktyki administracji systemem.