Android

Jak sprawdzić nasłuchiwanie portów w systemie Linux (porty w użyciu)

Как открыть или закрыть порт в Iptables

Как открыть или закрыть порт в Iptables

Spisu treści:

Anonim

Podczas rozwiązywania problemów z łącznością sieciową lub problemami specyficznymi dla aplikacji jedną z pierwszych rzeczy do sprawdzenia powinno być, które porty są aktualnie używane w systemie i która aplikacja nasłuchuje na określonym porcie.

W tym artykule wyjaśniono, jak dowiedzieć się, które usługi nasłuchują na których portach za pomocą poleceń netstat , ss i lsof . Instrukcje dotyczą wszystkich systemów operacyjnych Linux i Unix, takich jak macOS.

Co to jest port nasłuchiwania

Port sieciowy jest identyfikowany przez jego numer, powiązany adres IP i typ protokołu komunikacyjnego, takiego jak TCP lub UDP.

Port nasłuchiwania to port sieciowy, na którym nasłuchuje aplikacja lub proces, działający jako punkt końcowy komunikacji.

Każdy port nasłuchujący może być otwarty lub zamknięty (przefiltrowany) za pomocą zapory ogniowej. Ogólnie rzecz biorąc, port otwarty to port sieciowy, który przyjmuje pakiety przychodzące ze zdalnych lokalizacji.

Nie możesz mieć dwóch usług nasłuchujących na tym samym porcie na tym samym adresie IP.

Na przykład, jeśli korzystasz z serwera WWW Apache, który nasłuchuje na portach 80 i 443 i próbujesz zainstalować Nginx, późniejsze uruchomienie się nie powiedzie, ponieważ porty HTTP i HTTPS są już w użyciu.

Sprawdź porty słuchania za pomocą netstat

netstat to narzędzie wiersza polecenia, które może dostarczyć informacji o połączeniach sieciowych.

Aby wyświetlić listę wszystkich portów TCP lub UDP, które są nasłuchiwane, w tym usługi korzystające z portów i stanu gniazda, użyj następującej komendy:

sudo netstat -tunlp

Opcje użyte w tym poleceniu mają następujące znaczenie:

  • -t - Pokazuje porty TCP. -u - Pokaż porty UDP. -n - Pokazuje adresy numeryczne zamiast rozpoznawania hostów. -l - Pokaż tylko porty nasłuchujące. -p - Pokazuje PID i nazwę procesu nasłuchującego. Informacje te są wyświetlane tylko wtedy, gdy uruchomisz polecenie jako użytkownik root lub sudo.

Dane wyjściowe będą wyglądać mniej więcej tak:

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 445/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master tcp6 0 0:::3306:::* LISTEN 534/mysqld tcp6 0 0:::80:::* LISTEN 515/apache2 tcp6 0 0:::22:::* LISTEN 445/sshd tcp6 0 0:::25:::* LISTEN 929/master tcp6 0 0:::33060:::* LISTEN 534/mysqld udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient

Ważnymi kolumnami w naszym przypadku są:

  • Proto - protokół używany przez gniazdo. Local Address - Local Address IP i numer portu, na którym nasłuchuje proces. PID/Program name - PID i nazwa procesu.

sudo netstat -tnlp | grep:22

Dane wyjściowe pokazują, że na tym komputerze port 22 jest używany przez serwer SSH:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp6 0 0:::22:::* LISTEN 445/sshd

Jeśli wyjście jest puste, oznacza to, że nic nie nasłuchuje na porcie.

Możesz także filtrować listę na podstawie kryteriów, na przykład PID, protokołu, stanu itd.

netstat jest przestarzały i zastąpiony przez ss i ip , ale nadal jest jednym z najczęściej używanych poleceń do sprawdzania połączeń sieciowych.

Sprawdź porty słuchania za pomocą ss

ss to nowy netstat . Brakuje niektórych funkcji netstat ale ujawnia więcej stanów TCP i jest nieco szybszy. Opcje poleceń są w większości takie same, więc przejście z netstat do ss nie jest trudne.

Aby uzyskać listę wszystkich nasłuchujących portów z ss , wpisz:

sudo ss -tunlp

Wynik jest prawie taki sam jak raportowany przez netstat :

State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd", pid=445, fd=3)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master", pid=929, fd=13)) LISTEN 0 128 *:3306 *:* users:(("mysqld", pid=534, fd=30)) LISTEN 0 128 *:80 *:* users:(("apache2", pid=765, fd=4), ("apache2", pid=764, fd=4), ("apache2", pid=515, fd=4)) LISTEN 0 128:22:* users:(("sshd", pid=445, fd=4)) LISTEN 0 100:25:* users:(("master", pid=929, fd=14)) LISTEN 0 70 *:33060 *:* users:(("mysqld", pid=534, fd=33))

Sprawdź porty słuchania za pomocą lsof

lsof to potężne narzędzie wiersza polecenia, które dostarcza informacji o plikach otwieranych przez procesy.

W Linuksie wszystko jest plikiem. Możesz myśleć o gnieździe jak o pliku, który zapisuje w sieci.

Aby uzyskać listę wszystkich nasłuchujących portów TCP typu lsof :

sudo lsof -nP -iTCP -sTCP:LISTEN

Dostępne opcje są następujące:

  • -n - Nie konwertuj numerów portów na nazwy portów. -p - Nie tłumacz nazw hostów, pokaż adresy numeryczne. -iTCP -sTCP:LISTEN - pokazuje tylko pliki sieciowe ze stanem TCP LISTEN.

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN) sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN) apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN) mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN) mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN) apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN) master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)

Większość nazw kolumn wyjściowych jest oczywista:

  • COMMAND , PID , USER - nazwa, pid i użytkownik uruchamiający program powiązany z portem. NAME - numer portu.

Aby znaleźć proces nasłuchujący na określonym porcie, na przykład na porcie 3306 , należy użyć:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

Dane wyjściowe pokazują, że port 3306 jest używany przez serwer MySQL:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)

Aby uzyskać więcej informacji, odwiedź stronę podręcznika lsof i przeczytaj o wszystkich innych potężnych opcjach tego narzędzia.

Wniosek

Pokazaliśmy kilka poleceń, których możesz użyć, aby sprawdzić, które porty są używane w twoim systemie i jak znaleźć proces nasłuchujący na określonym porcie.

terminal