SSD Nodes Learn
Przewodniki Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24

Czym są porty i jak działają usługi Linux

Dowiedz się, jak działają porty TCP i UDP oraz jak sprawdzić aktywne usługi w systemie Linux za pomocą polecenia ss. Poznaj różnice między portami lokalnymi.

Czym w rzeczywistości jest port

Port to numer umożliwiający jednemu serwerowi jednoczesną obsługę wielu usług bez mieszania ich ruchu. VPS posiada jeden adres IP, ale może jednocześnie obsługiwać serwer WWW, serwer SSH oraz bazę danych. Po odebraniu pakietu system operacyjny musi określić, do której usługi on należy. Odpowiedzią jest numer portu. Ruch WWW trafia na port 443, a SSH na port 22. Adres IP dostarcza pakiet do serwera; port dostarcza go do odpowiedniego programu na tym serwerze.

Port to 16-bitowa liczba: 16 bitów daje zakres od 0 do 65535. Numer 0 jest zarezerwowany, więc w praktyce porty obejmują zakres od 1 do 65535. Porty poniżej 1024 to porty "well-known", które wymagają uprawnień root do otwarcia. Dlatego standardowe usługi działają na tych portach: 22 dla SSH, 80 dla HTTP, 443 dla HTTPS, 53 dla DNS. Wszystko powyżej 1024 jest dostępne dla zwykłych programów.

Występują dwa rodzaje: TCP i UDP. Numer portu w protokole TCP jest oddzielny od tego samego numeru w UDP. TCP to protokół oparty na połączeniu, używany przez większość usług, takich jak SSH, HTTP czy bazy danych. UDP jest bezpołączeniowy i używany przez usługi takie jak DNS czy niektóre protokoły VPN. Podczas konfiguracji firewall zazwyczaj należy określić protokół, na przykład 22/tcp.

Listening oznacza, że program oczekuje na porcie

Program chcący odbierać połączenia prosi jądro systemu o "listen" na danym porcie. Od tego momentu port jest otwarty na maszynie, a program odpowiada na wszystko, co do niego dotrze (zależnie od ustawień firewall). Port, na którym nic nie jest w stanie "listen", po prostu odrzuca połączenia. Dlatego pierwszym pytaniem podczas audytu bezpieczeństwa jest: co jest w stanie "listen" i gdzie.

Poleceniem służącym do uzyskania odpowiedzi jest ss:

sudo ss -tlnp

Flagi oznaczają: TCP (t), tylko gniazda typu listening (l), numeryczne porty (n, dzięki czemu widać 22 zamiast ssh) oraz proces właściciela (p). Typowy wynik:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

Kolumna Process wskazuje, który program posiada dany port. Pozwala to zidentyfikować procesy, które nie powinny być uruchomione.

Kolumna Local Address jest kluczowa

Należy dokładnie sprawdzać adres przed każdym portem, ponieważ to on decyduje o tym, kto może uzyskać dostęp do usługi. Występują trzy powtarzające się przypadki.

0.0.0.0:22 oznacza "słuchaj na każdym adresie IPv4, który posiada ta maszyna", w tym na adresie publicznym. Usługa jest dostępna z internetu przez IPv4, jeśli firewall na to pozwala.

[::]:80 oznacza to samo dla IPv6: słuchaj na każdym adresie IPv6, w tym publicznym. Wiele programów domyślnie wiąże się (bind) z tym adresem, a w systemie Linux gniazdo :: często obsługuje również IPv4.

127.0.0.1:5432 oznacza "słuchaj tylko na loopback". 127.0.0.1 to adres, którego maszyna używa do komunikacji z samą sobą; nie jest on routowalny z zewnątrz. Usługa związana z tym adresem jest dostępna wyłącznie z tego samego serwera, nigdy z internetu, niezależnie od ustawień firewall. Powyższa linia dla Postgres jest bezpieczna z założenia.

Wynika z tego praktyczna zasada: baza danych, pamięć cache lub panel administracyjny używany wyłącznie przez własne aplikacje powinny być powiązane z 127.0.0.1, a nie z 0.0.0.0. Jeśli usługa nie słucha na adresie publicznym, napastnik nie ma możliwości nawiązania z nią połączenia.

Listening to nie to samo co dostępność (reachable)

To rozróżnienie pozwala uniknąć wielu nieporozumień. Fakt, że port jest otwarty na maszynie (program jest w stanie "listen"), różni się od faktu, że port jest dostępny z zewnątrz (firewall na to pozwala). Oba warunki muszą zostać spełnione, aby zdalny klient mógł nawiązać połączenie.

Istnieją zatem dwie warstwy kontroli. Pierwsza to decyzja o tym, co słucha, poprzez ustawienie adresu bind dla każdej usługi. Druga to decyzja o tym, co może dotrzeć z zewnątrz, realizowana przez firewall. Dobrze skonfigurowany serwer wykorzystuje oba mechanizmy: usługi wiążą się tylko tam, gdzie jest to konieczne, a firewall odrzuca wszystko, co nie zostało wyraźnie zezwolone. Sprawdzenie, co słucha za pomocą ss, to pierwszy krok; drugim krokiem jest określenie, na co pozwala firewall, co opisano w firewalls 101 with UFW.

Istnieje subtelność, która często myli użytkowników. IPv4 i IPv6 są oddzielne. Firewall skonfigurowany tylko dla IPv4 pozostawia usługi [::] otwarte w sieci IPv6. Ten konkretny problem opisano w artykule: the IPv6 firewall trap.

FAQ

Jak sprawdzić, jakie porty są otwarte na serwerze Linux?

Użyj sudo ss -tlnp dla TCP lub sudo ss -ulnp dla UDP. Wyświetli to wszystkie gniazda typu listening, numery portów, lokalne adresy oraz procesy właścicieli. Sprawdź kolumnę Local Address: 0.0.0.0 lub [::] oznacza, że usługa jest wystawiona do sieci, natomiast 127.0.0.1 oznacza, że usługa słucha tylko lokalnie na maszynie.

Jaka jest różnica między 0.0.0.0 a 127.0.0.1?

0.0.0.0 oznacza "słuchaj na wszystkich adresach IPv4", w tym na adresie publicznym, co umożliwia dostęp do usługi z sieci. 127.0.0.1 to loopback, adres używany przez maszynę do komunikacji wewnętrznej; nie jest on routowalny z zewnątrz, więc usługa związana z tym adresem jest dostępna tylko lokalnie. Usługi wewnętrzne należy wiązać z adresem 127.0.0.1, aby nie były wystawione na świat.

Czy muszę otwierać port w firewallu, aby usługa działała?

Tylko w przypadku usług, które muszą być dostępne z innych maszyn. Usługa związana z 127.0.0.1 nie wymaga reguły firewall, ponieważ nic z zewnątrz nie może się z nią połączyć. Usługa na porcie 0.0.0.0 lub [::] wymaga reguły firewall w celu zezwolenia na ruch i powinna być domyślnie blokowana, dopóki nie zostanie dodana odpowiednia reguła.

Jaka jest różnica między portem TCP a portem UDP?

TCP jest protokołem opartym na połączeniu i jest używany przez większość usług, takich jak SSH, serwery WWW i bazy danych. UDP jest bezpołączeniowy i używany przez DNS oraz niektóre protokoły VPN. Ten sam numer w TCP i UDP to oddzielne porty, zatem 53/tcp i 53/udp to różne porty. Pisząc reguły firewall, należy określić protokół, na przykład 22/tcp.