W sieci, port jest interesującą cechą. Jest to sposób na identyfikację docelowej aplikacji lub usługi przez ruch sieciowy. Każdy proces/usługa otrzymuje swój unikalny port. Port zawsze będzie powiązany z adresem IP hosta wraz z protokołem.
Jest to moja ulubiona metafora opisująca czym jest port. Wyobraźmy sobie statek załadowany ładunkiem, który będzie podróżował do odległego lądu. Jakie informacje są potrzebne, aby prawidłowo dotrzeć do celu? Dla uproszczenia, powiedzmy że potrzebuje kraju (adresu IP) i portu do którego zadokuje.
W tym poradniku, sprawdź jak wylistować otwarte porty w Linuksie.
Porty w Linuksie
Porty działają jako punkty końcowe komunikacji. Jest to 16-bitowa liczba (od 0 do 65535 w systemie dziesiętnym). Chociaż zakres jest duży, dla łatwości użycia, porty są podzielone na trzy kategorie. Każda kategoria jest oznaczona jako zakres wartości portu:
- 0 do 1023: Są to porty „Well-known”, znane również jako porty „systemowe”, które są zarezerwowane dla procesów systemowych, które oferują szeroką gamę usług sieciowych. Aby związać się z portem „Well-known”, proces musi mieć uprawnienia superużytkownika.
- 1024 do 49151: Są to porty „Registered”, znane również jako porty „User”, które są wyznaczone przez IANA dla konkretnych usług. Na żądanie, proces może mieć do nich dostęp. W przypadku większości systemów, korzystanie z tych portów nie wymaga żadnych uprawnień superużytkownika.
- 49152 do 65535: Są to porty „Dynamic”, znane również jako porty „Private”. Te porty nie mogą być zarejestrowane w IANA. Te porty są otwarte do wykorzystania dla prywatnych lub niestandardowych usług i mogą być również automatycznie przydzielane jako porty efemeryczne (krótko żyjące porty wykorzystywane przez IP).
W Linuksie, istnieje wiele sposobów sprawdzania otwartych portów. Domyślnie, każdy port pozostanie zamknięty, chyba że korzysta z niego jakaś aplikacja. Jeśli port jest otwarty, to musi być przypisany do usługi/procesu.
Lista otwartych portów
Łatwiej jest zidentyfikować które porty są w użyciu niż które są otwarte. Dlatego też w poniższej sekcji przedstawimy metody na wylistowanie wszystkich portów, które są aktualnie w użyciu. W Linuksie, istnieje wiele narzędzi dostępnych do tego zadania. Większość z nich jest wbudowana w każdą dystrybucję Linuksa.
Dowiedzenie się które porty są aktualnie otwarte może być przydatne w różnych scenariuszach. Możliwe jest skonfigurowanie dedykowanego portu dla określonej aplikacji. Otwarty port może również wskazywać na włamanie do sieci.
Poniższe metody zostały zademonstrowane na Ubuntu 20.04.1 LTS.
Lista protokołów i otwartych portów z /etc/services
Plik /etc/services zawiera informacje o aktualnie uruchomionych usługach. Jest to duży plik, więc przygotuj się na przytłoczenie.
Lista otwartych portów przy użyciu netstat
Narzędzie netstat jest narzędziem do wyświetlania połączeń sieciowych dla TCP, tablic routingu i różnych interfejsów sieciowych. Oferuje również statystyki protokołów sieciowych. Używając netstat, możemy wyświetlić listę wszystkich otwartych portów w systemie.
Uruchom następujące polecenie netstat:
Zróbmy szybki podział wszystkich flag, których użyliśmy w tym poleceniu.
- a: Mówi netstatowi, aby pokazał wszystkie gniazda
- t: Mówi netstatowi, aby wylistował porty TCP
- u: Mówi netstatowi, aby wylistował porty UDP
Oto kolejna wariacja polecenia netstat:
W poleceniu tym występują dwie nowe flagi. Co one oznaczają?
- l: Mówi netstatowi, aby drukował tylko nasłuchujące gniazda
- n: Mówi netstatowi, aby pokazał numer portu
Aby wyświetlić PID procesu, który używa portu, użyj flagi „-p”:
Lista otwartych portów przy użyciu ss
Narzędzie ss jest narzędziem do badania gniazd. Jego użycie jest podobne do netstat.
Aby wyświetlić listę otwartych portów, wykonaj następujące polecenie ss:
Flagi są podobne do netstatu. Funkcje, które opisują są również dość podobne.
- l: Mówi ss, aby wyświetlał nasłuchujące gniazda
- n: Mówi ss, aby nie próbował rozwiązywać nazw usług
- t: Mówi ss, aby wyświetlał gniazda TCP
- u: Mówi ss, aby wyświetlał gniazda UDP
Listuj otwarte porty za pomocą lsof
Komenda lsof służy do listowania otwartych plików. Jednakże, może być również użyte do wyświetlenia otwartych portów.
Uruchom następujące polecenie lsof:
Aby uzyskać otwarte porty konkretnego protokołu (TCP, UDP, itp.) to zdefiniuj go po fladze „-i”, użyj:
Lista otwartych portów przy użyciu nmap
Narzędzie nmap jest potężnym narzędziem do eksploracji sieci i skanowania bezpieczeństwa/portów. Może zgłosić wszystkie otwarte porty w systemie.
Aby wyświetlić listę otwartych portów TCP, uruchom następujące polecenie nmap. Tutaj adres IP jest adresem komputera hosta:
W tym miejscu występują dwie porcje argumentów polecenia.
- -sT: Ta sekcja mówi nmapowi, aby skanował dla portów TCP.
- -p- : To mówi nmapowi, aby skanował dla wszystkich 65535 portów. Jeśli nie zostanie użyta, to nmap będzie domyślnie skanował tylko 1000 portów.
Jeśli chcesz wyświetlić listę otwartych portów UDP, uruchom następującą komendę nmap:
Aby uzyskać zarówno otwarte porty TCP, jak i UDP, użyj następującego polecenia:
Lista otwartych portów przy użyciu netcat
Narzędzie netcat jest narzędziem wiersza poleceń służącym do odczytywania i zapisywania danych przez połączenia sieciowe za pośrednictwem protokołów TCP i UDP. Narzędzie to może być również używane do listowania otwartych portów. Może ono wykonywać testy na określonym porcie lub zakresie portów.
Następujące polecenie netcat przeskanuje porty od 1 do 1000. Polecenie netcat domyślnie wykona skanowanie na protokole TCP:
Można je również rozszerzyć na całą listę możliwych portów:
Pozwólmy sobie na szybki podział flag.
- z: Mówi netcatowi, aby skanował tylko w poszukiwaniu otwartych portów bez wysyłania jakichkolwiek danych
- v: Mówi netcatowi, aby działał w trybie verbose
Aby uzyskać tylko otwarte porty z tej listy, przefiltruj wyjście za pomocą grep dla terminu „succeeded”.
Jeśli chcesz wykonać skanowanie na protokole UDP, dodaj flagę „-u”.
Myślenie końcowe
Jak pokazano, istnieje mnóstwo sposobów na skanowanie otwartych portów w Linuksie. Sugeruję wypróbowanie wszystkich metod zanim zdecydujesz się, którą z nich opanować. Jeśli regularnie używasz jakiegoś narzędzia, jak netcat czy nmap, to opanowanie powiązanych z nimi metod będzie najbardziej korzystne.
Wesołej pracy z komputerem!
Skorzystaj z tego!