Verifica delle porte di ascolto nei sistemi Linux
Internet non è stato un luogo sicuro per molto tempo, vale la pena vedere per chi lasciamo la porta aperta e a cosa conduce. Le porte sono un equivalente delle porte nelle reti di computer.
Quando sappiamo quali applicazioni utilizziamo, sapremo quindi cosa aggiungere alle nostre regole del firewall iptables o alla whitelist UDP:
Come farlo?
Sulla maggior parte dei sistemi, il comando è sufficiente:
1 2 | netstat -l |
Come leggerlo?
A prima vista sembra un piatto di pasta all'italiana, ma basta guardare più da vicino che il risultato di questo comando è una miniera di conoscenze
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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 |
Dopo questo risultato, possiamo concludere che questo sistema esegue MySQL e MongoDB.
Hai MySQL:
1 2 | tcp 0 0 localhost:mysql *:* LISTEN |
MySQL usa la porta per impostazione predefinita 3306 ed è un'applicazione abbastanza nota da molti anni, quindi l'applicazione ci dice immediatamente che è la porta utilizzata da MySQL invece del numero di porta
Hai MongoDB?:
1 2 | tcp 0 0 localhost:27017 *:* LISTEN |
Mongo è meno conosciuto e molto più giovane, qui è dove ci viene mostrata la porta 27017
.
Possiamo anche usare netstat -ln
, quindi otterremo un elenco di tutte le porte senza rilevare cosa è cosa.
Entrambe le app hanno localhost:
davanti alla porta in modo che ascoltino solo localmente, cioè, non è possibile accedervi dall'esterno tramite la rete. È una soluzione sicura perché è meglio non dare accesso a estranei al nostro database, anche se è protetto da password.
Ad esempio, se consentiamo l'accesso dall'esterno, potrebbe risultare in futuro che esiste una scappatoia che ti consente di accedere senza password e ci dimenticheremo dell'aggiornamento e il problema è pronto.
Qui possiamo vedere un server SSH in ascolto su una porta standard:
1 2 | tcp 0 0 *:ssh *:* LISTEN |
È esposto all'esterno, ma SSH è un'applicazione collaudata e in qualche modo dobbiamo anche raggiungere il server, quindi non preoccuparti troppo finché abbiamo una password lunga e generata casualmente o accedi con una coppia di chiavi (pubblico e privato).
Abbiamo anche una curiosità in fondo:
1 2 | unix 2 [ ACC ] STREAM LISTENING 42459 /var/run/mysqld/mysqld.sock |
È un porto, ma non proprio. È una presa (spina) che consente all'applicazione di connettersi non tramite un indirizzo di rete standard ma tramite un file. Alcune applicazioni supportano la connessione tramite socket UNIX, ed ecco un esempio di questo. Questi file non sono in alcun modo esposti al mondo, sono una buona soluzione per connettere servizi su un server con utenti diversi perché puoi modificare i diritti degli utenti su questa risorsa come qualsiasi altro file sul disco.
Non funziona!
Se non abbiamo un tale comando nel sistema come netstat
, devi installare il pacchetto net-tools
.
Nel caso di Debian e derivati, ad es.. Ubuntu basta eseguire questi comandi per installarlo:
1 2 3 | apt-get update apt-get install net-tools |
Sufficiente per CentOS e altri derivati RHEL:
1 2 | yum install net-tools |