Zacznę od tego, czego tu nie będzie. Nie będzie nmapa.

Wiem, każdy poradnik o portach zaczyna się właśnie od niego. Tyle że nmap to skaner, który sprawdza z zewnątrz, co jest otwarte na danej maszynie, a skanowanie portów jest na Mikrusie zakazane. Również wtedy, gdy celem jest Twój własny serwer. Kończy się to banem, i to wcale nie przez czyjąś złośliwość: dla sieci taki skan wygląda kropka w kropkę jak przygotowania do ataku, więc automaty reagują od razu.

Na szczęście do sprawdzenia własnej maszyny od środka nmap jest zbędny. Wystarczą narzędzia, które i tak masz w systemie.

Co nasłuchuje na serwerze (ss)#

ss to młodszy brat netstat, a dziś po prostu standard. Wszystkie nasłuchujące porty TCP razem z procesami, które je trzymają:

sudo ss -tlnp

-t to TCP, -l - tylko porty nasłuchujące, -n - gołe numery zamiast zgadywania nazw usług, a -p dokłada nazwę i PID procesu. Ta ostatnia wymaga roota. Stąd sudo.

To samo dla UDP:

sudo ss -ulnp

Chcesz zobaczyć także aktywne połączenia? Wyrzuć -l:

sudo ss -tnp

Który proces trzyma dany port (lsof)#

ss sprawdza się świetnie, dopóki nie zapytasz o coś bardziej szczegółowego, na przykład o wszystkie połączenia jednego konkretnego procesu. Wtedy wchodzi lsof:

sudo lsof -i -P -n
  • -i - tylko ruch sieciowy. Bez tej flagi lsof wypluje każdy otwarty plik w systemie i utoniesz.
  • -P - numery portów zamiast nazw.
  • -n - bez zamiany adresów IP na nazwy hostów, czyli szybciej.

Konkretny port, powiedzmy 3000:

sudo lsof -i :3000

Sprawdzanie z zewnątrz, bez skanera#

Port otwarty lokalnie to jedno. Czy widać go z internetu, to zupełnie inna para kaloszy.

Jak to sprawdzić bez skanera? Najprościej na świecie: spróbuj się połączyć. Z telefonu na danych komórkowych, z drugiego komputera, skądkolwiek spoza serwera:

curl -v telnet://adres-twojego-serwera:20112

Established connection to oznacza, że port jest osiągalny z zewnątrz. Connection refused albo głucha cisza aż do timeoutu - port zablokowany albo nikt na nim nie słucha.

Różnica względem skanera jest zasadnicza. Pukasz do jednych, konkretnych drzwi, które sam wskazałeś, zamiast obchodzić cały budynek i szarpać za każdą klamkę. Nikt tego nie weźmie za rekonesans.

Porty a firewall#

Usługa jest w ss, a z zewnątrz ani widu, ani słychu? Bardzo możliwe, że zatrzymuje ją UFW albo iptables:

sudo ufw status

Konfiguracji firewalla poświęciliśmy osobne wpisy, o UFW i o iptables.

Jest jeszcze jedna mikrusowa osobliwość. Numery portów widoczne z zewnątrz nie zawsze pokrywają się z tymi, na których usługa naprawdę nasłuchuje w kontenerze. SSH słucha na 22, a Ty łączysz się na 10000+ID. ss i lsof pokazują zawsze port wewnętrzny.

Najczęstsze błędy#

Port widać w ss, a z zewnątrz ani drgnie. Po pierwsze firewall. Po drugie adres nasłuchu, i tu warto się przyjrzeć uważnie: 0.0.0.0:port albo *:port to wszystkie interfejsy, i o to chodzi, natomiast 127.0.0.1:port oznacza, że usługa rozmawia wyłącznie sama ze sobą, czyli z tym samym serwerem.

Port zewnętrzny pomylony z wewnętrznym. Na Mikrusie to chyba najczęstsza pułapka. Patrz akapit wyżej.

ss -tlnp nie pokazuje procesów. Zabrakło sudo. Bez uprawnień roota kolumna z procesami zostaje pusta.