Un’introduzione al comando ss

Impara come ottenere informazioni sulla rete usando il comando ss in questo tutorial dagli archivi.

Linux include una serie abbastanza massiccia di strumenti disponibili per soddisfare quasi ogni esigenza. Dallo sviluppo alla sicurezza, alla produttività, all’amministrazione… se devi farlo, Linux è lì per servire. Uno dei molti strumenti a cui gli amministratori si rivolgevano spesso era netstat. Tuttavia, il comando netstat è stato deprecato in favore del più veloce e più leggibile comando ss.

Il comando ss è uno strumento utilizzato per scaricare le statistiche dei socket e visualizza informazioni in modo simile (anche se più semplice e veloce) a netstat. Il comando ss può anche visualizzare più informazioni TCP e di stato rispetto alla maggior parte degli altri strumenti. Poiché ss è il nuovo netstat, daremo un’occhiata a come fare uso di questo strumento in modo da poter ottenere più facilmente informazioni sulla tua macchina Linux e su cosa sta succedendo con le connessioni di rete.

L’utilità a riga di comando ss può visualizzare statistiche per socket del tipo PACKET, TCP, UDP, DCCP, RAW, e Unix domain. Il sostituto di netstat è più facile da usare (confrontare le pagine man per avere un’idea immediata di quanto sia più facile ss). Con ss, si ottengono informazioni molto dettagliate su come la vostra macchina Linux sta comunicando con altre macchine, reti e servizi; dettagli sulle connessioni di rete, statistiche dei protocolli di rete e connessioni di socket Linux. Con queste informazioni in mano, è possibile risolvere molto più facilmente vari problemi di rete.

Prendiamo velocità con ss, in modo da poterlo considerare un nuovo strumento nel vostro kit di amministratore.

Uso di base

Il comando ss funziona come qualsiasi comando sulla piattaforma Linux: Lancia il comando eseguibile e lo segue con qualsiasi combinazione di opzioni disponibili. Se dai un’occhiata alla pagina man di ss (emetti il comando man ss), noterai che non ci sono quasi le opzioni che si trovano per il comando netstat; tuttavia, questo non equivale ad una mancanza di funzionalità. Infatti, ss è abbastanza potente.

Se si lancia il comando ss senza argomenti o opzioni, restituirà una lista completa di socket TCP con connessioni stabilite (Figura 1).

Figura 1: Una lista completa di tutte le connessioni TCP stabilite.

Perché il comando ss (senza opzioni) visualizzerà una quantità significativa di informazioni (tutti i dettagli delle connessioni tcp, udp e unix socket), si potrebbe anche inviare l’output del comando a un file per una successiva visualizzazione in questo modo:

ss > ss_output

Naturalmente, un comando molto semplice non è così utile per ogni situazione. Cosa succede se vogliamo solo visualizzare i socket in ascolto? Semplice, aggiungete l’opzione -l in questo modo:

ss -l

Il comando di cui sopra produrrà solo una lista di socket in ascolto.

Per renderlo un po’ più specifico, pensatelo in questo modo: ss può essere usato per visualizzare le connessioni TCP usando l’opzione -t, le connessioni UDP usando l’opzione -u, o le connessioni UNIX usando l’opzione -x; quindi ss -t, ss -u, o ss -x. L’esecuzione di uno qualsiasi di questi comandi vi elencherà un sacco di informazioni da spulciare (Figura 2).

Figura 2: L’esecuzione di ss -u su Elementary OS offre una rapida visualizzazione delle connessioni UDP.

Per impostazione predefinita, usando solo le opzioni -t, -u, o -x elencherà solo le connessioni che sono stabilite (o connesse). Se vogliamo raccogliere le connessioni in ascolto, dobbiamo aggiungere l’opzione -a come:

ss -t -a 

L’output del comando precedente includerà tutti i socket TCP (Figura 3).

Figura 3: Notate che l’ultimo socket è ssh in ascolto sul dispositivo.

Nell’esempio precedente, potete vedere che le connessioni UDP (in vari stati) sono state fatte dall’indirizzo IP della mia macchina, da varie porte, a vari indirizzi IP, attraverso varie porte. A differenza della versione netstat di questo comando, ss non mostra il PID e il nome del comando responsabile di queste connessioni. Anche così, hai ancora un sacco di informazioni per iniziare la risoluzione dei problemi. Se una di queste porte o URL dovesse essere sospetta, ora sapete quale indirizzo IP/Porta sta facendo la connessione. Con questo, ora avete le informazioni che possono aiutarvi nelle prime fasi della risoluzione di un problema.

Filtrare ss con gli stati TCP

Un’opzione molto utile disponibile al comando ss è la capacità di filtrare usando gli stati TCP (le “fasi di vita” di una connessione). Con gli stati, è possibile filtrare più facilmente i risultati del comando ss. Lo strumento ss può essere utilizzato insieme a tutti gli stati TCP standard:

  • established

  • syn-sent

  • syn-recv

  • fin-wait-1

  • fin-wait-2

  • time-wait

  • closed

  • close-wait

  • last-ack

  • listening

  • closing

Altri identificatori di stato disponibili che ss riconosce sono:

  • all (tutti gli stati di cui sopra)

  • connected (tutti gli stati ad eccezione di listen e closed)

  • synchronized (tutti gli stati connected ad eccezione di syn-sent)

  • bucket (stati che sono mantenuti come minisockets, per esempio time-wait e

  • syn-recv)

  • big (opposto allo stato bucket)

La sintassi per lavorare con gli stati è semplice.

For tcp ipv4:ss -4 state FILTERFor tcp ipv6:ss -6 state FILTER

dove FILTER è il nome dello stato che volete usare.

Si supponga che vogliate visualizzare tutti i socket IPv4 in ascolto sulla vostra macchina. Per questo, il comando sarebbe:

ss -4 state listening

I risultati di questo comando sarebbero simili alla Figura 4.

Figura 4: Utilizzo di ss con un filtro di stato di ascolto.

Mostra i socket connessi da un indirizzo specifico

Un compito comodo che potete assegnare a ss è quello di fargli riportare le connessioni effettuate da un altro indirizzo IP. Diciamo che volete scoprire se/come una macchina all’indirizzo IP 192.168.1.139 si è connessa al vostro server. Per questo, potreste dare il comando:

ss dst 192.168.1.139

Le informazioni risultanti (Figura 5) vi informeranno il Netid, lo stato, l’IP:porta locale, e l’IP:porta remota del socket.

Figura 5: Una macchina remota ha stabilito una connessione ssh con la nostra macchina locale.

Fallo funzionare per te

Il comando ss può fare molto per aiutarti a risolvere i problemi del tuo server Linux o della tua rete. Sarebbe opportuno che ti prendessi il tempo di leggere la pagina man di ss (emetti il comando man ss). Ma, a questo punto, dovresti almeno avere una comprensione fondamentale di come utilizzare questo comando indispensabile.

Impara di più su Linux attraverso il corso gratuito “Introduzione a Linux” di The Linux Foundation e edX.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.