Una porta è un endpoint di comunicazione. All’interno di un sistema operativo, una porta viene aperta o chiusa per pacchetti di dati per processi o servizi di rete specifici.
In genere, le porte identificano un servizio di rete specifico assegnato a loro. Questo può essere modificato configurando manualmente il servizio per l’utilizzo di una porta diversa, ma in generale è possibile utilizzare le impostazioni predefinite.
Le prime 1024 porte (numeri di porta a ) sono indicate come numeri di porta noti e sono riservate ai servizi più comunemente utilizzati. Questi includono SSH (22), HTTP (80), HTTPS (443).
I numeri di porta superiori a 1024 sono indicati come porte effimere.
I numeri di porta 1024 49151 sono chiamati porte registrate/utente. Sono assegnate da IANA (Internet Assigned Numbers Authority) su richiesta e approvazione di un’organizzazione o di uno sviluppatore di applicazioni. Queste porte sono usate dai protocolli di trasporto (TCP, UDP, DCCP, SCTP) per identificare un’applicazione o un servizio specifico. Queste porte dovrebbero essere trattate come semi-riservate.
I numeri di porta 49152 65535 sono chiamati porte dinamiche/private o effimere. Queste porte non sono assegnate, controllate o registrate da nessuna autorità. Sono usate per porte temporanee o private. Sono anche note come porte non riservate. Queste porte sono usate dai client e dai server per stabilire connessioni a breve termine. Queste porte possono essere cambiate dal sistema operativo o dall’applicazione in base alle necessità.
I comandi Netstat e SS sono utilizzati per darci informazioni sullo stato di queste porte e sui servizi che le utilizzano. Passiamo ora dopo questa introduzione al loro approfondimento.
Netstat, è un comando composto dalle parole network (“rete”) e statistics (“statistiche”), è un programma che funziona tramite istruzioni date dalla riga di comando. Fornisce statistiche essenziali su tutte le attività di rete e dà informazioni su quali porte e indirizzi funzionino le rispettive connessioni – TCP, UDP – oltre a indicare quali siano le porte aperte per accogliere le richieste.
SS è un’utilità utilizzata per studiare i socket nei sistemi Linux e Unix. Mostra informazioni simili a netstat e in grado di scaricare le statistiche del socket. Il comando ss può visualizzare più di TCP e informazioni sullo stato rispetto ad altri strumenti. Per impostazione predefinita, ss visualizza un elenco di socket aperti non in ascolto (ad esempio TCP/UNIX/UDP) che hanno stabilito una connessione.
Comando Netstat
Il programma netstat fu implementato per la prima volta nel 1983 su BSD (Berkeley Software Distribution), sistema derivato di UNIX, di cui all’epoca la versione 4.2 fu tra le prime a supportare la famiglia di protocolli Internet TCP/IP. Su Linux, sviluppato nel 1991, così come su Windows a partire dalla versione 3.11 (1993), netstat è stato integrato come standard. Le diverse implementazioni sono molto simili per quanto riguarda la loro funzionalità, mentre i parametri dei comandi netstat, così come il loro output, si differenziano leggermente a seconda dei sistemi.
Il comando netstat è uno strumento utile per monitorare le connessioni sulla tua rete. Puoi usare diverse opzioni per visualizzare diverse informazioni sulle connessioni, le porte, le statistiche e molto altro.
Oltre ai socket collegati, può anche elencare i socket in ascolto che sono in attesa di connessioni in entrata. Quindi, verificando una porta aperta 80 è possibile confermare se un server Web è in esecuzione sul sistema o meno.
Questo lo rende uno strumento molto utile per gli amministratori di rete e di sistema. In questa guida vediamo alcuni esempi di utilizzo del comando netstat per vedere informazioni sulle connessioni di rete e aprire le porte su un sistema.
Per visualizzare tutte le connessioni sia in ascolto che non in ascolto da diversi protocolli come socket tcp, udp e unix. Tuttavia questo non è interessante. Gli amministratori spesso desiderano scegliere connessioni specifiche in base a protocolli o numeri di porta, ad esempio.
Il comando ss è in grado di mostrare i dettagli sulle connessioni di rete con più informazioni rispetto al comando netstat ed è più veloce. Il comando netstat legge vari file /proc per raccogliere informazioni. Tuttavia, questo approccio è più lento quando ci sono molte connessioni da visualizzare.
Il comando ss ottiene le sue informazioni direttamente dallo spazio del kernel. Le opzioni utilizzate con i comandi ss sono molto simili a netstat rendendolo una facile sostituzione.
Quindi in questo tutorial vedremo alcuni esempi di come utilizzare il comando ss per controllare le connessioni di rete e le statistiche del socket.
Il comando più semplice è quello di elencare tutte le connessioni.
Per visualizzare solo le connessioni tcp o udp o unix utilizzare l’opzione t, u o x.
$ ss -t
bitnami@zpxwpress:~$ ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 36 192.168.188.74:2203 192.168.188.175:14354 ESTAB 0 0 192.168.188.74:2203 192.168.188.175:14358 bitnami@zpxwpress:~$
Per impostazione predefinita, l’opzione “t” da sola riporterà solo le connessioni “stabilite” o CONNESSE”. Non segnala i socket tcp che sono “LISTENING”. Usa l’opzione ‘-a’ insieme a t, per segnalarli tutti in una volta.
Per ottenere l’output più velocemente, utilizzare l’opzione “n” per impedire a ss di risolvere gli indirizzi IP in nomi host. Ma questo impedirà anche la risoluzione dei numeri di porta.
$ ss - nt
bitnami@zpxwpress:~$ ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 36 192.168.188.74:2203 192.168.188.175:14354
ESTAB 0 0 192.168.188.74:2203 192.168.188.175:14358
Questo comando elencherà tutti i socket di ascolto. Ad esempio, il server Web Apache apre una connessione socket sulla porta 80 per ascoltare le connessioni in entrata.
Il comando ss supporta filtri che possono essere utilizzati per visualizzare solo connessioni specifiche. L’espressione del filtro deve avere il suffisso dopo tutte le opzioni. Il comando ss accetta il filtro nel seguente formato.
Ora ecco alcuni esempi di come filtrare le connessioni socket in base agli stati del socket. Per visualizzare tutti i socket TCP IPv4 che si trovano nello stato “connesso”.
bitnami@zpxwpress:~$ ss -t4 state established
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0 36 192.168.188.74:2203 192.168.188.175:14354
0 0 192.168.188.74:2203 192.168.188.175:14358
I possibili stati sono: 1. established 2. syn-sent 3. syn-recv 4. fin-wait-1 5. fin-wait-2 6. time-wait 7. closed 8. close-wait 9. last-ack 10. closing 11. all – All of the above states 12. connected – All the states except for listen and closed 13. synchronized – All the connected states except for syn-sent 14. bucket – Show states, which are maintained as minisockets, i.e. time-wait and syn-recv. 15. big – Opposite to bucket state.
Da notare che molti stati come syn-sent, syn-recv non mostrerebbero alcun socket per la maggior parte del tempo, poiché i socket rimangono in tali stati per un tempo molto breve. Sarebbe ideale utilizzare il comando watch per rilevare tali stati di presa in tempo reale. Ecco un esempio:
$ watch -n 1 "ss -t4 state syn-sent"
Dopo aver eseguito il comando precedente, prova ad aprire alcuni siti Web in un browser o scarica qualcosa da un URL. Immediatamente dovresti vedere le connessioni socket apparire nell’output, ma per un breve periodo.
Every 1.0s: ss -t4 state syn-sent Tue Apr 1 10:07:33 2014
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 1 192.168.1.2:55089 202.79.210.121:https
0 1 192.168.1.2:33733 203.84.220.80:https
0 1 192.168.1.2:36240 106.10.198.33:https
Oltre agli stati del socket tcp, il comando ss supporta anche il filtraggio in base all’indirizzo e al numero di porta del socket. Gli esempi seguenti lo dimostrano.
Visualizza tutte le connessioni socket con porta di origine o di destinazione di ssh(2204).
$ ss -at '( dport = :2204 or sport = :2204 )'
zipixel@zpxc321:~$ ss -at '( dport = :2204 or sport = :2204 )'
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:2204 0.0.0.0:*
ESTAB 0 48 192.168.188.35:2204 192.168.188.175:13756
ESTAB 0 0 192.168.188.35:2204 192.168.188.175:13792
LISTEN 0 128 [::]:2204 [::]:*
Socket con porta di destinazione 443 o 80
$ ss -nt '( dst :443 or dst :80 )'
# Filter by address
$ ss -nt dst 74.125.236.178
# CIDR notation is also supported
$ ss -nt dst 74.125.236.178/16
# Address and Port combined
$ ss -nt dst 74.125.236.178:80
Le porte possono anche essere filtrate con opzioni dport / sport. I numeri di porta devono essere preceduti da un “:”.
$ ss -nt dport = :80
# source address is 127.0.0.1 and source port is greater than 5000
$ ss -nt src 127.0.0.1 sport gt :5000
# local smtp (port 25) sockets
$ sudo ss -ntlp sport eq :smtp
# port numbers greater than 25
$ sudo ss -nt sport gt :1024
# sockets with remote ports less than 100
$ sudo ss -nt dport \< :100
# connections to remote port 80
$ sudo ss -nt state connected dport = :80
Conclusione
Il comando netstat è un’utilità di rete disponibile sui sistemi operativi Unix e Windows che consente di visualizzare le connessioni di rete in corso, le porte in ascolto e le statistiche di rete.
Il comando ss (Socket Statistics) è un’alternativa più recente a netstat, disponibile sui sistemi operativi Linux e Unix-like. ss fornisce informazioni più dettagliate sullo stato delle connessioni di rete.
le principali differenze tra i comandi possono riassumersi:
Output formattato: netstat mostra l’output formattato in una tabella, mentre ss utilizza un output meno formale, ma più dettagliato.
Velocità: ss è notevolmente più veloce di netstat in quanto è stato progettato per essere più efficiente e utilizza meno risorse di sistema.
Mostrare tutti gli stati di connessione: ss mostra tutti gli stati di connessione, mentre netstat mostra solo alcune connessioni.
Disponibilità: netstat è disponibile sia su sistemi Unix-like che su Windows, mentre ss è disponibile solo su sistemi Unix-like.
Funzionalità: ss fornisce una maggiore quantità di informazioni rispetto a netstat, ad esempio, è in grado di visualizzare i timer delle connessioni, i socket UNIX, le connessioni multicast, gli spazi dei nomi delle reti e altro ancora.
In sintesi, ss è un’alternativa più efficiente e dettagliata a netstat, ma non è disponibile su Windows. Se hai bisogno di informazioni più dettagliate sulle connessioni di rete su un sistema Unix-like, ti consiglio di utilizzare il comando ss.