Usate ancora netstat? Retrogradi, lo strumento del futuro è ss!

1

Il servizio che ho avviato si è messo in ascolto sulla porta che ho configurato?

In genere la risposta a questa domanda di apertura è racchiusa per la maggioranza degli utilizzatori in questo comando:

[root@anomalia ~]# netstat -nutlp

che utilizza il comando netstat per fornire una lista di porte numeriche (n) di tipo udp (u) o tcp (t) in ascolto (l) per mezzo di un processo (p). Ma forse non tutti sanno che le moderne distribuzioni installando, di default, un nuovo tool che permette di recuperare le stesse informazioni ed anche qualcosa di più: ss (socket statistics).

Ma come funziona ss? Quali informazioni fornisce? ss permette di recuperare informazioni di tipo summary (-s) per avere un’idea di quante e quali porte siano aperte nel proprio sistema, oppure permette di investigare nel dettaglio le porte in ascolto (-l) associate ai processi (-p), ottenendo un risultato del tutto simile a quello illustrato ad inizio articolo con netstat anzi, osservando questo comando in maniera del tutto identica (almeno in termini di opzioni):

[root@anomalia ~]# ss -nutlp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=1279,fd=5))
...

udp UNCONN 7680 0 [::]:5353 [::]:* users:(("avahi-daemon",pid=873,fd=16))

tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1001,fd=11))
...

tcp LISTEN 0 50 *:1716 *:* users:(("kdeconnectd",pid=1588,fd=12))

Sebbene quindi la conformazione dell’output sia leggermente differente, in particolare per quel che riguarda la composizione delle informazioni sul PID associato al socket aperto, tutto sommato i due comandi sono intercambiabili. Dove però ss può far la differenza è nella composizione di query per limitare l’output unicamente a quanto interessa.

Ad esempio, supponendo di trovarci su un server web, per capire quante connessioni sono aperte dallo stesso per la porta https basterà esplicitare il filtro come segue:

root@web-1:~# ss -np state established '( sport = :https )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:52017 users:(("apache2",pid=22173,fd=31))
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:50605 users:(("apache2",pid=20254,fd=31))
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:54608 users:(("apache2",pid=25649,fd=31))
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:47168 users:(("apache2",pid=16788,fd=31))

O qualcosa di più complesso, ad esempio tutte le porte in ascolto relative ad un mail server:

root@mail-1:~# ss -np state listening '( sport = :pop3s or sport = :imaps or sport = :ssmtp )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 100 *:993 *:* users:(("dovecot",pid=1132,fd=43))
tcp 0 100 *:995 *:* users:(("dovecot",pid=1132,fd=29))
tcp 0 100 *:465 *:* users:(("smtpd",pid=2052,fd=6),("master",pid=1260,fd=17))
tcp 0 100 :::993 :::* users:(("dovecot",pid=1132,fd=44))
tcp 0 100 :::995 :::* users:(("dovecot",pid=1132,fd=30))
tcp 0 100 :::465 :::* users:(("smtpd",pid=2052,fd=7),("master",pid=1260,fd=18))

Quali possono essere le opzioni per le query? È tutto elencato nella man page del comando, ad esempio per le porte TCP standard gli stati disponibili sono: established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listen and closing.

Ma la capacità dei filtri va oltre, è possibile ad esempio effettuare la lista di porte che rispettando determinati range:

root@mail-1:~# ss -np state listening '( sport ge 500 and sport le 1000 )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 100 *:993 *:* users:(("dovecot",pid=1132,fd=43))
tcp 0 100 *:995 *:* users:(("dovecot",pid=1132,fd=29))
tcp 0 100 :::993 :::* users:(("dovecot",pid=1132,fd=44))
tcp 0 100 :::995 :::* users:(("dovecot",pid=1132,fd=30))

E quindi tutte le combinazioni possibili <= / le, >= / ge, == / eq, != / ne, < / lt, > / gt. Niente male per un tool che potrebbe essere la copia sbiadita di netstat, non credete?

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.