netstat e ss per visualizzare porte in ascolto e connessioni attive su un sistema LinuxIl numero di porta — 16 bit che fanno tutto il lavoro
Una volta che il pacchetto IP raggiunge l’host corretto, chi decide a quale processo consegnarlo? Il numero di porta: un intero a 16 bit (range 0–65535) che identifica in modo univoco un processo o servizio all’interno di un host. È il meccanismo più semplice e più potente del livello Transport.
Le tre categorie IANA
L’IANA divide l’intero spazio delle porte in tre fasce con regole di assegnazione diverse:
Riservate a servizi di sistema. Richiedono privilegi di root per essere usate. Assegnate formalmente da IANA. Esempi: 80 (HTTP), 443 (HTTPS), 22 (SSH).
Assegnate da IANA su richiesta di organizzazioni/vendor per applicazioni specifiche. Esempi: 3306 (MySQL), 5432 (PostgreSQL), 8080 (HTTP alternativo).
Assegnate dal sistema operativo al lato client in modo temporaneo per la durata di una connessione. Chiamate anche porte effimere o source port.
Su Linux il range effimero configurabile è visualizzabile con cat /proc/sys/net/ipv4/ip_local_port_range. Il default è tipicamente 32768–60999, che si discosta leggermente dalla definizione IANA. Ogni OS usa il range che preferisce in quel range high port.
Porte notevoli dei protocolli principali
| Porta | Protocollo | Servizio | Note |
|---|---|---|---|
| 20 / 21 | TCP | FTP | 20 = dati, 21 = controllo |
| 22 | TCP | SSH | Secure Shell — accesso remoto cifrato |
| 25 | TCP | SMTP | Invio email tra server |
| 53 | UDP / TCP | DNS | UDP per query brevi; TCP per zone transfer |
| 67 / 68 | UDP | DHCP | 67 = server, 68 = client (broadcast) |
| 80 | TCP | HTTP | Web non cifrato |
| 110 | TCP | POP3 | Scarica email dal server |
| 143 | TCP | IMAP | Accesso email con sincronizzazione server |
| 443 | TCP | HTTPS | HTTP over TLS — web cifrato |
| 3306 | TCP | MySQL | Registered — database |
| 3389 | TCP | RDP | Remote Desktop Protocol (Windows) |
| 5432 | TCP | PostgreSQL | Registered — database |
| 8080 | TCP | HTTP-alt | Spesso usato per proxy o server di sviluppo |
Il Socket — l’endpoint di comunicazione
Il numero di porta da solo non basta a identificare una comunicazione. Serve sapere anche: quale host? Quale protocollo? La risposta è il socket.
{ protocollo, IP_sorgente, porta_sorgente, IP_destinazione, porta_destinazione }Due socket con 5-tuple identiche identificano la stessa connessione; due socket che differiscono anche solo per un campo identificano connessioni distinte.
Socket TCP — connessioni multiple sulla stessa porta server
Un server web ascolta sulla porta 80. Tre client si connettono contemporaneamente. Come fa il kernel a non confonderli? Grazie alla 5-tupla: anche se dst_port=80 è uguale per tutti e tre, le 5-tuple sono diverse perché src_ip e/o src_port differiscono.
Socket UDP — connectionless
UDP non mantiene connessioni. Il socket UDP è identificato solo da (dst_ip, dst_port). Più client possono inviare datagrammi alla stessa porta UDP del server: arrivano tutti allo stesso socket. La distinzione tra mittenti diversi è lasciata all’applicazione (che legge l’indirizzo sorgente di ogni datagramma ricevuto).
Un DNS resolver ascolta su UDP porta 53. Riceve query da decine di client contemporaneamente sullo stesso socket. Risponde a ciascuno usando l’IP sorgente ricevuto nel datagramma in entrata. Nessuna connessione, nessuno stato mantenuto.
Visualizzare porte e connessioni attive
Su sistemi Linux puoi ispezionare in tempo reale quali porte sono in ascolto e quali connessioni sono attive con due strumenti fondamentali:
Ogni porta in ascolto è un potenziale punto d’ingresso. Il principio di minimizzazione della superficie d’attacco impone di chiudere tutte le porte non necessarie tramite firewall (regole iptables / nftables). Il comando ss -tlnp è il primo strumento di verifica post-installazione su qualsiasi server.
Il flusso completo: da applicazione a rete
Vediamo in sequenza cosa succede quando il tuo browser apre una connessione HTTPS:
- Le porte sono interi a 16 bit (0–65535): 0–1023 well-known (root), 1024–49151 registered, 49152–65535 dynamic/ephemeral
- Il socket è la 5-tupla
{protocollo, IP_src, porta_src, IP_dst, porta_dst}: identifica univocamente un endpoint di comunicazione - Un server TCP può gestire N connessioni simultanee sulla stessa porta: le 5-tuple differiscono per IP/porta sorgente dei client
- UDP non mantiene connessioni: il socket è identificato solo da
(dst_ip, dst_port); tutti i datagrammi arrivano allo stesso socket - Porte notevoli da ricordare: 22 SSH, 25 SMTP, 53 DNS, 80 HTTP, 110 POP3, 143 IMAP, 443 HTTPS, 67/68 DHCP
ss -tulnpè il comando moderno per visualizzare porte in ascolto e connessioni attive su Linux