15%

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
30.10.2024

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 powiązane, możesz proaktywnie identyfikować nieautoryzowane próby dostępu, wykrywać błędy konfiguracji i eliminować niepotrzebne powierzchnie ataku, zanim staną się poważnymi lukami w zabezpieczeniach.

Niezależnie od tego, czy uruchamiasz aplikację o wysokim 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 opis 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.

Spis treści

  1. Zrozumienie portów i ich typów
  2. Sprawdzanie portów za pomocą netstat
  3. Sprawdzanie portów za pomocą ss
  4. Porównanie netstat vs. ss
  5. Inne narzędzia do sprawdzania otwartych portów
  6. Najlepsze praktyki bezpieczeństwa dla zarządzania otwartymi portami
  7. Podsumowanie

1. Zrozumienie portów i ich typów {#understanding-ports}

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

Co to 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 transportu

  • TCP (Transmission Control Protocol): Zorientowany na połączenie, niezawodny, z 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 {#netstat}

Co to jest netstat?

netstat (statystyka sieciowa) to klasyczne narzędzie wiersza poleceń, które wyświetla aktywne połączenia sieciowe, tabele routingu, statystyki interfejsu i nasłuchujące porty. Chociaż zostało oficjalnie wycofane na rzecz ss w nowoczesnych dystrybucjach Linux, netstat pozostaje szeroko wdrażane — szczególnie w starszych systemach 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 czekają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:*

Czytanie wyjścia:

  • Proto — Używany protokół (tcp, udp, tcp6, udp6).
  • Local Address — Adres IP i numer portu, na którym nasłuchuje usługa. 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 (pokazany jako * dla nasłuchujących portów bez aktywnego połączenia).
  • State — Stan połączenia (LISTEN, ESTABLISHED, TIME_WAIT, itp.).

Włączenie informacji o procesie

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 informacją o procesie:

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 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 ustalone, 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 {#ss}

Co to jest ss?

ss (statystyka gniazda) to nowoczesna zamiana dla netstat, opracowana jako część pakietu iproute2. Komunikuje się bezpośrednio z jądrem Linux poprzez gniazda Netlink, co czyni go znacznie szybszym i bardziej wydajnym niż netstat — szczególnie w systemach z tysiącami jednoczesnych 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 do netstat:

FlagaZnaczenie
-tPokaż gniazda TCP
-uPokaż gniazda UDP
-lPokaż tylko nasłuchujące gniazda
-nPokaż adresy numeryczne (bez rozdzielczości 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:*

Włączenie informacji o procesie

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

ss -t

Zaawansowane filtrowanie za pomocą ss

Jedną z najpotężniejszych cech ss jest jego wbudowane filtrowanie oparte na wyrażeniach, które pozwala filtrować po porcie, adresie, stanie i nie tylko — bez polegania na grep.

Filtruj według określonego 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 określonego 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 timerze

ss -to

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 {#comparison}

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 w nowoczesnych dystrybucjach)
SzybkośćWolniejszy (czyta z /proc)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 IPv6OdpowiedniaDoskonała
Status konserwacjiWycofaneAktywnie utrzymywane
Krzywa uczenia sięZnana długoletnim administratoromNieco 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ępne.
  • Podczas pracy ze skryptami lub dokumentacją, która już używa składni netstat.
  • Gdy bardziej czujesz się 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 uruchamiane na Dedicated Servers pod dużym obciążeniem.
  • Gdy potrzebujesz zaawansowanego filtrowania, informacji o timerze lub statystyk pamięci gniazda.
  • Do automatyzacji i skryptowania, gdzie wydajność ma znaczenie.

5. Inne narzędzia do sprawdzania otwartych portów {#other-tools}

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

lsof — Lista 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.

Zainstaluj lsof:

# Debian/Ubuntu
sudo apt install lsof -y

# CentOS/RHEL
sudo yum install lsof -y

Sprawdź, który proces używa portu 80:

sudo lsof -i :80

Sprawdź, który proces używa portu 443:

sudo lsof -i :443

Wyświetl wszystkie połączenia sieciowe:

sudo lsof -i

Wyświetl wszystkie nasłuchujące gniazda 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 netstat i ss (które sprawdzają system lokalny), nmap może skanować zarówno hosty lokalne, jak i zdalne.

Zainstaluj nmap:

# Debian/Ubuntu
sudo apt install nmap -y

# CentOS/RHEL
sudo yum install nmap -y

Skanuj wszystkie porty TCP na localhost:

sudo nmap -sT localhost

Skanuj otwarte porty z detekcją systemu operacyjnego:

sudo nmap -sT -O localhost

Skanuj określony zakres portów:

sudo nmap -p 1-1024 localhost

Skanuj porty UDP (wymaga root):

sudo nmap -sU localhost

Skanuj zdalny serwer:

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ć prawa i warunki świadczenia usług.

fuser — Identyfikuj procesy używające 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 czytać 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 formacie szesnastkowym i wymagają konwersji dla czytelności człowieka. Narzędzia takie jak netstat i ss automatycznie analizują te dane.

6. Najlepsze praktyki bezpieczeństwa dla zarządzania otwartymi portami {#security}

Wiedza o tym, jak sprawdzić otwarte porty, to tylko połowa bitwy. Działanie na podstawie tych informacji to to, co utrzymuje Twój serwer w bezpiecznym stanie. Oto praktyczne najlepsze praktyki, które powinien znać każdy administrator Linux:

Zasada najmniejszej ekspozycji

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

Powiąż usługi z określonymi 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 nasłuchujące porty

Zaplanuj regularne audyty portów za pomocą zadań cron lub narzędzi monitorowania. Nowy nasłuchujący port może wskazywać na zagrożoną usługę, błąd konfiguracji 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 eksponowana w Internecie — serwery WWW, serwery poczty, panele sterowania — powinna używać szyfrowanych połączeń. Połącz otwarte porty z ważnymi SSL Certificates, aby chronić dane w tranzycie i zapobiegać atakom man-in-the-middle.

Monitoruj nieoczekiwane zmiany

Użyj narzędzi do wykrywania włamań, takich jak Aide, Tripwire lub Osquery, aby otrzymywać alerty, gdy nowe procesy zaczynają nasłuchiwać na portach. Integruj z centralizowanym logowaniem (np. ELK Stack, Graylog) w celu uzyskania 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>

Szybka referencja: najczęściej używane polecenia

ZadaniePolecenie netstatPolecenie ss
Wszystkie nasłuchujące porty TCP/UDPnetstat -tulnss -tuln
15%

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