Kategorie: Linux

Weryfikacja nasłuchiwanych portów w systemach linux

Sieć Internet to od dawna nie jest bezpieczne miejsce, warto zobaczyć dla kogo zostawiamy otwarte drzwi i do czego one prowadzą. Takim odpowiednikiem drzwi jest w sieciach komputerowych są porty.

Gdy będziemy wiedzieli z jakich aplikacji korzystamy, będziemy wtedy wiedzieli co dodać do własnych regułek firewalla iptables lub whitelisty UDP:

Jak to zrobić?

W większości systemów wystarczy polecenie:

netstat -l

Jak to czytać?

Na początku wydaje się to włoskim daniem makaronowym ale wystarczy przyjrzeć się bliżej że wynik tego polecenia to kopalnia wiedzy

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 *:40833                 *:*                     LISTEN     
tcp        0      0 localhost:27017         *:*                     LISTEN     
tcp        0      0 localhost:mysql         *:*                     LISTEN     
tcp        0      0 *:sunrpc                *:*                     LISTEN     
tcp        0      0 *:46834                 *:*                     LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 [::]:43937              [::]:*                  LISTEN     
tcp6       0      0 [::]:57793              [::]:*                  LISTEN     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
udp        0      0 localhost:608           *:*                                
udp        0      0 *:674                   *:*                                
udp        0      0 *:59774                 *:*                                
udp        0      0 *:bootpc                *:*                                
udp        0      0 *:sunrpc                *:*                                
udp        0      0 *:41251                 *:*                                
udp6       0      0 [::]:674                [::]:*                             
udp6       0      0 [::]:43086              [::]:*                             
udp6       0      0 [::]:40189              [::]:*                             
udp6       0      0 [::]:sunrpc             [::]:*                             
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     7424585  /tmp/mongodb-27017.sock
unix  2      [ ACC ]     STREAM     LISTENING     24344048 /run/user/1000/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     7467947  /run/user/1002/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     7459911  /run/user/1001/systemd/private
unix  2      [ ACC ]     SEQPACKET  LISTENING     7951     /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     7885     /run/systemd/journal/stdout
unix  2      [ ACC ]     STREAM     LISTENING     7931     /run/lvm/lvmetad.socket
unix  2      [ ACC ]     STREAM     LISTENING     7952     /run/lvm/lvmpolld.socket
unix  2      [ ACC ]     STREAM     LISTENING     13305    /var/lib/lxd/unix.socket
unix  2      [ ACC ]     STREAM     LISTENING     13303    /run/uuidd/request
unix  2      [ ACC ]     STREAM     LISTENING     13304    /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     13306    /run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     13307    /run/snapd.socket
unix  2      [ ACC ]     STREAM     LISTENING     13308    /run/snapd-snap.socket
unix  2      [ ACC ]     STREAM     LISTENING     14766    @ISCSIADM_ABSTRACT_NAMESPACE
unix  2      [ ACC ]     STREAM     LISTENING     24019    /run/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     42459    /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     45141    /run/rpcbind.sock

Po tym wyniku możemy stwierdzić że na tym systemie działa baza MySQL i MongoDB.

Tu mamy MySQL:

tcp        0      0 localhost:mysql         *:*                     LISTEN     

MySQL używa domyślnie portu 3306 i jest to dość znana od wielu lat aplikacja dlatego aplikacja od razu zamiast tego numeru portu mówi nam że jest to port używany przez MySQL

A tu MongoDB:

tcp        0      0 localhost:27017         *:*                     LISTEN     

Mongo jest mniej znane i znacznie młodsze, tu zostaje nam wyświetlony port 27017.

Możemy też użyć netstat -ln, wtedy uzyskamy listę wszystkich portów bez wykrywania od czego jest co.

Obie aplikacje mają localhost: przed portem więc nasłuchują tylko lokalnie, czyli nie można dostać się do nich z zewnątrz z sieci. Jest to bezpieczne rozwiązanie gdyż lepiej nie dawać dostępu obcym do naszej bazy nawet jeśli jest zabezpieczona hasłem.
Przykładowo jeśli zezwolimy na dostęp z zewnątrz, może okazać się kiedyś w przyszłości że jest luka która umożliwia zalogowanie się bez hasła a my zapomnimy o aktualizacji i problem gotowy.

Tu możemy zobaczyć nasłuchujący serwer SSH na standardowym porcie:

tcp        0      0 *:ssh                   *:*                     LISTEN    

Jest wystawiony na zewnątrz ale SSH to sprawdzona aplikacja i jakoś musimy się też dostać do serwera więc nie ma co się za bardzo obawiać o ile mamy długie i losowo wygenerowane hasło lub logujemy się parą kluczy (publicznego i prywatnego).

Na dole mamy jeszcze ciekawostkę:

unix  2      [ ACC ]     STREAM     LISTENING     42459    /var/run/mysqld/mysqld.sock

Jest to port ale nie do końca. Jest to socket (wtyczka) która umożliwia łączenie się aplikacji nie poprzez standardowy adres sieciowy lecz plik. Niektóre aplikacje obsługują łączenie się przez UNIXowe sockety i tu właśnie mamy tego przykład. Te pliki nie są w żaden sposób wystawione na świat, są dobrym rozwiązaniem aby połączyć ze sobą usługi na jednym serwerze z różnymi użytkownikami gdyż można zmieniać uprawnienia użytkowników do tego zasobu jak każdemu innemu plikowi na dysku.

To nie działa!

Jeśli nie mamy takiego polecenia w systemie jak netstat, należy doinstalować paczkę net-tools.
W przypadku Debiana i pochodnych np. Ubuntu wystarczy wykonać te komendy aby ją zainstalować:

apt-get update
apt-get install net-tools

Dla CentOS i innych pochodnych RHEL wystarczy:

yum install net-tools

Linux

Udostępnij
Opublikowane przez
Linux

Najnowsze wpisy

KeePass2 2.52 w Ubuntu 22.04

Poniższy poradnik opisuje sposób instalacji KeePass w systemie Ubuntu. Całość wykonamy za pomocą kilku poleceń…

2 lata temu

Instalacja Master PDF editor w Ubuntu 22.04

Master PDF Editor to wszechstronny program PDF, który zawiera wiele funkcji. Oprócz tworzenia i edycji…

2 lata temu

iotop – monitorowanie pamięci

Iotop jest prostym narzędziem dla systemów Uniksowych umożliwiającym monitorowanie użycia dowolnego nośnika pamięci flash/hdd/ssd w…

2 lata temu

Uruchomienie wiele poleceń w jednym zadaniu Cron

Możesz oddzielić dwa lub więcej poleceń za pomocą średników (;), Średnik (;): służy do oddzielania…

2 lata temu

Zmiana danych exif zdjęcia w terminalu Linux

Poniższy poradnik opisuje w jaki sposób za pomocą konsoli możemy dokonać edycji danych zdjęcia exif.…

2 lata temu

Instalacja Rocket.Chat Server w systemie Rocky Linux 8

Poniższy poradnik opisuje sposób instalacji Rocket.Chat W systemie Rocky Linux 8 Całość bardzo prosto zainstalujemy…

2 lata temu