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
| Zakres | Kategoria | Opis |
|---|---|---|
| 0–1023 | Porty dobrze znane | Zarezerwowane dla standardowych usług systemowych (HTTP, SSH, FTP, itp.) |
| 1024–49151 | Porty zarejestrowane | Używane przez aplikacje i oprogramowanie pośredniczące (MySQL, PostgreSQL, itp.) |
| 49152–65535 | Porty dynamiczne/efemeryczne | Tymczasowo 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 -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-toolsPodstawowa składnia netstat
sudo netstat [options]Sprawdzanie wszystkich nasłuchujących portów TCP i UDP
sudo netstat -tulnRozbicie flag:
| Flaga | Znaczenie |
|---|---|
-t | Wyświetl połączenia TCP i porty |
-u | Wyświetl połączenia UDP i porty |
-l | Pokaż tylko nasłuchujące gniazda (porty oczekujące na połączenia) |
-n | Wyś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.0oznacza, że usługa nasłuchuje na wszystkich dostępnych interfejsach;127.0.0.1oznacza, ż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 -tulnpPrzykł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 -tunpWyświetlanie tabeli routingu
sudo netstat -rWyświetlanie statystyk interfejsu sieciowego
sudo netstat -i3. 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 -tulnFlagi mają identyczne znaczenie jak w netstat:
| Flaga | Znaczenie |
|---|---|
-t | Pokaż gniazda TCP |
-u | Pokaż gniazda UDP |
-l | Pokaż tylko nasłuchujące gniazda |
-n | Pokaż 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 -tulnpPrzykł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 -tlPokaż tylko nasłuchujące porty UDP:
ss -ulPokaż wszystkie połączenia TCP (w tym nawiązane):
ss -tZaawansowane 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 = :22Filtruj według portu docelowego:
ss -tuln dport = :3306Pokaż wszystkie gniazda w stanie ESTABLISHED:
ss -t state establishedPokaż wszystkie gniazda w stanie LISTEN:
ss -t state listeningFiltruj według adresu IP źródła:
ss -tuln src 192.168.1.100Pokaż połączenia do konkretnego hosta zdalnego:
ss -t dst 203.0.113.50Połą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 -tmWyświetlanie informacji o timerach
ss -toPokazuje 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:
| Funkcja | netstat | ss |
|---|---|---|
| Pakiet | net-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 filtrowanie | Wymaga potoku do grep | Wbudowane filtrowanie oparte na wyrażeniach |
| Szczegółowość wyjścia | Dobra | Bardziej szczegółowa (pamięć, timery, itp.) |
| Obsługa IPv6 | Wystarczająca | Doskonała |
| Status utrzymania | Przestarzały | Aktywnie utrzymywany |
| Krzywa uczenia się | Znany administratorom z długim stażem | Nieco inna składnia, ale dobrze udokumentowana |
Kiedy używać netstat
- Podczas administrowania starszymi systemami Linux (CentOS 6, Debian 7, itp.), gdzie
ssmoż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 -ySprawdzenie, który proces używa portu 80:
sudo lsof -i :80Sprawdzenie, który proces używa portu 443:
sudo lsof -i :443Wyświetlenie wszystkich połączeń sieciowych:
sudo lsof -iWyświetlenie wszystkich nasłuchujących gniazd TCP:
sudo lsof -i TCP -s TCP:LISTENPrzykł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 -ySkanowanie wszystkich portów TCP na localhost:
sudo nmap -sT localhostSkanowanie otwartych portów z wykrywaniem systemu operacyjnego:
sudo nmap -sT -O localhostSkanowanie określonego zakresu portów:
sudo nmap -p 1-1024 localhostSkanowanie portów UDP (wymaga uprawnień root):
sudo nmap -sU localhostSkanowanie 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/udpZwróć 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.1Uż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 22Regularnie 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).txtZabezpiecz 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
| Zadanie | Polecenie netstat | Polecenie ss | |
|---|---|---|---|
| Wszystkie nasłuchujące porty TCP/UDP | sudo netstat -tuln | sudo ss -tuln | |
| Wszystkie nasłuchujące porty z PID-ami | sudo netstat -tulnp | sudo ss -tulnp | |
| Tylko nasłuchujące porty TCP | sudo netstat -tln | sudo ss -tl | |
| Tylko nasłuchujące porty UDP | sudo netstat -uln | sudo ss -ul | |
| Filtruj po porcie 80 | `sudo netstat -tuln | grep ":80"` | sudo ss -tuln sport = :80 |
| Wszystkie ustanowione połączenia | sudo netstat -tunp | sudo ss -t state established | |
| Pokaż tabelę routingu | sudo netstat -r | ip 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
ssjako głównego narzędzia w każdej nowoczesnej dystrybucji Linux — jest szybsze, bogatsze w funkcje i aktywnie utrzymywane. - Używaj
netstatpodczas pracy na starszych systemach lub gdy istniejące skrypty i przepływy pracy od niego zależą. - Uzupełnij za pomocą
lsofinmapdo 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.
na wszystkich usługach hostingowych