Jak sprawdzić nasłuchujące porty

vps
sieć
Tagi: #<Tag:0x00007f14a9db30c0> #<Tag:0x00007f14a9db2f80>

#1

Dlaczego?

Warto wiedzieć co się dzieje na naszym serwerze, dzięki temu możemy podjąć celne działania aby coś naprawić, przyspieszyć czy lepiej zabezpieczyć.

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

Źrodła