SSD Nodes Learn Hosting plans →
Guide Matt ConnorDi Matt Connor · Aggiornato 2026-08-27

Porte Linux: cosa sono e come vedere i servizi in ascolto

Scopri come funzionano le porte Linux, perché 443 e 22 identificano servizi diversi e come usare ss per distinguere porte locali e pubbliche.

Che cos’è realmente una porta

Una porta è un numero che consente a un server di eseguire più servizi contemporaneamente senza mescolarne il traffico. Il VPS ha un solo indirizzo IP, ma può eseguire nello stesso momento un web server, un server SSH e un database. Quando arriva un pacchetto, il sistema operativo deve sapere a quale servizio è destinato. Il numero di porta fornisce questa informazione. Il traffico web usa la porta 443, SSH la porta 22. L’indirizzo IP consegna il pacchetto al server; la porta lo indirizza al programma corretto su quel server.

Una porta è un numero a 16 bit: 16 bit consentono valori da 0 a 65535 e 0 è riservato, quindi nella pratica le porte vanno da 1 a 65535. Le porte inferiori a 1024 sono le porte “well-known” e per aprirle è necessario l’account root. Per questo i servizi standard usano queste porte: 22 per SSH, 80 per HTTP, 443 per HTTPS e 53 per DNS. Le porte superiori a 1024 possono essere utilizzate dai normali programmi.

Esistono due tipi di porte, TCP e UDP, e il numero di porta di uno è distinto dallo stesso numero nell’altro. TCP è il protocollo basato sulla connessione usato dalla maggior parte dei servizi, tra cui SSH, HTTP e i database. UDP non usa connessioni ed è impiegato, ad esempio, per DNS e per alcune VPN. Quando apri una porta nel firewall, di solito devi specificare anche il protocollo, ad esempio 22/tcp.

L’ascolto indica che un programma attende connessioni su una porta

Un programma che deve ricevere connessioni chiede al kernel di mettersi in «ascolto» su una porta. Da quel momento la porta è aperta sulla macchina e il programma risponde alle connessioni in arrivo, secondo le regole del firewall. Una porta su cui non è in ascolto alcun programma rifiuta semplicemente le connessioni. Per questo, il primo controllo di qualsiasi verifica di sicurezza consiste nel chiedersi: che cosa è in ascolto e su quale indirizzo.

Il comando per verificarlo è ss:

sudo ss -tlnp

I flag indicano TCP (t), solo i socket in ascolto (l), le porte in formato numerico (n, quindi viene visualizzato 22 invece di ssh) e il processo proprietario (p). Un risultato tipico è:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

La colonna Process indica quale programma possiede ogni porta. Questo consente di individuare un processo che non si intendeva lasciare in esecuzione.

La colonna Local Address è la parte importante

Leggete con attenzione l'indirizzo riportato davanti a ogni porta, perché determina chi può raggiungere il servizio. I casi che incontrerete più spesso sono tre.

0.0.0.0:22 significa «in ascolto su ogni indirizzo IPv4 disponibile sul computer», compreso l'indirizzo pubblico. Il servizio è raggiungibile da Internet tramite IPv4, se il firewall lo consente.

[::]:80 indica lo stesso comportamento per IPv6: il servizio è in ascolto su ogni indirizzo IPv6, compresi quelli pubblici. Molti programmi eseguono il bind qui per impostazione predefinita e, in Linux, un socket :: accetta spesso anche connessioni IPv4.

127.0.0.1:5432 significa «in ascolto soltanto sull'interfaccia di loopback». 127.0.0.1 è l'indirizzo che un computer usa per comunicare con se stesso e non è instradabile da altri sistemi. Un servizio associato a questo indirizzo è raggiungibile soltanto dallo stesso server, mai da Internet, indipendentemente dalla configurazione del firewall. La riga di Postgres riportata sopra è sicura per sua stessa configurazione.

La regola pratica è diretta: un database, una cache o un pannello di amministrazione utilizzato soltanto dalle proprie applicazioni dovrebbe eseguire il bind su 127.0.0.1, non su 0.0.0.0. Se non è mai in ascolto su un indirizzo pubblico, non c'è nulla che un attaccante possa raggiungere.

L’ascolto non equivale alla raggiungibilità

C’è un’altra distinzione che evita molta confusione. Una porta aperta sul computer, cioè con un programma in ascolto, è diversa dalla raggiungibilità di quella porta dall’esterno, cioè dal fatto che il firewall ne consenta l’accesso. Entrambe le condizioni devono essere vere perché un client remoto possa connettersi. I due errori appaiono diversi anche dal lato del client: una connessione rifiutata indica che non c’era alcun processo in ascolto, mentre una connessione che resta in attesa e poi va in timeout indica in genere che un firewall ha eliminato il pacchetto. È esattamente ciò che indicano quei due errori SSH.

Esistono quindi due livelli di controllo. Si decide quali servizi devono restare in ascolto impostando l’indirizzo di bind di ciascun servizio. Si decide invece cosa può essere raggiunto dall’esterno configurando un firewall. Un server gestito correttamente usa entrambi: i servizi restano in ascolto solo dove necessario e il firewall nega tutto ciò che non è stato consentito esplicitamente. Leggere cosa è in ascolto con ss è il primo passaggio; decidere cosa consente il firewall è il secondo, descritto in guida introduttiva ai firewall con UFW.

Esiste anche una particolarità che spesso causa problemi. IPv4 e IPv6 sono separati e un firewall che protegge soltanto IPv4 lascia aperti su IPv6 i servizi [::]. Questo problema specifico è trattato in un articolo dedicato: il problema del firewall IPv6.

FAQ

Come posso vedere quali porte sono aperte sul mio server Linux?

Esegui sudo ss -tlnp per TCP o sudo ss -ulnp per UDP. Il comando elenca ogni socket in ascolto, la porta, l'indirizzo locale a cui è associato e il processo che lo possiede. Controlla la colonna Local Address: 0.0.0.0 o [::] indicano che il servizio è esposto alla rete, mentre 127.0.0.1 indica che è in ascolto soltanto sulla macchina stessa.

Qual è la differenza tra 0.0.0.0 e 127.0.0.1?

0.0.0.0 significa «ascolta su tutti gli indirizzi IPv4», incluso quello pubblico, quindi il servizio può essere raggiunto dalla rete. 127.0.0.1 è l'indirizzo di loopback che la macchina usa per comunicare con se stessa. Non è instradabile dall'esterno, quindi un servizio associato a questo indirizzo è raggiungibile soltanto localmente. Associa i servizi interni a 127.0.0.1 per evitare che siano esposti.

Devo aprire una porta nel firewall perché un servizio funzioni?

Soltanto per i servizi che devono essere raggiunti da altre macchine. Un servizio associato a 127.0.0.1 non richiede una regola del firewall, perché dall'esterno non è comunque raggiungibile. Un servizio su 0.0.0.0 o [::] richiede una regola del firewall per consentire il traffico e, per impostazione predefinita, dovrebbe essere negato finché non aggiungi la regola.

Qual è la differenza tra una porta TCP e una porta UDP?

TCP è basato sulla connessione ed è usato dalla maggior parte dei servizi, ad esempio SSH, server web e database. UDP è senza connessione ed è usato da DNS e da alcune VPN. Lo stesso numero in TCP e UDP identifica porte distinte, quindi 53/tcp e 53/udp sono diverse. Quando scrivi le regole del firewall devi specificare il protocollo, ad esempio 22/tcp.