In rete, una porta è una caratteristica interessante. È un modo per il traffico di rete di identificare l’applicazione o il servizio di destinazione. Ogni processo/servizio ha la sua porta unica. Una porta sarà sempre associata all’indirizzo IP dell’host insieme al protocollo.
Questa è una delle mie metafore preferite per descrivere cos’è una porta. Immaginate una nave carica di merci, che viaggia verso una terra lontana. Quali informazioni sono necessarie per raggiungere correttamente la destinazione? Per semplicità, diciamo che ha bisogno del paese (l’indirizzo IP) e della porta in cui la nave attraccherà.
In questa guida, scopri come elencare le porte aperte su Linux.
Porte su Linux
Le porte agiscono come un punto finale di comunicazione. È un numero di 16 bit (da 0 a 65535 in decimale). Mentre la gamma è ampia, per facilità d’uso, le porte sono categorizzate in tre categorie. Ogni categoria è etichettata come la gamma del valore della porta:
- da 0 a 1023: Queste sono le porte “Well-known”, conosciute anche come le porte “System”, che sono riservate ai processi di sistema che offrono un’ampia varietà di servizi di rete. Per collegarsi con una porta “Well-known”, un processo deve avere privilegi da superutente.
- da 1024 a 49151: Queste sono le porte “Registrate”, note anche come porte “Utente”, che sono designate da IANA per servizi specifici. Su richiesta, un processo può avere accesso ad esse. Nel caso della maggior parte dei sistemi, non è necessario alcun privilegio da superutente per utilizzare queste porte.
- da 49152 a 65535: Queste sono le porte “dinamiche”, note anche come porte “private”. Queste porte non possono essere registrate con IANA. Queste porte sono aperte all’uso per servizi privati o personalizzati e possono anche essere assegnate automaticamente come porte effimere (porte di breve durata utilizzate da IP).
In Linux, ci sono diversi modi di controllare le porte aperte. Per impostazione predefinita, qualsiasi porta rimarrà chiusa a meno che un’applicazione non la stia usando. Se una porta è aperta, allora deve essere assegnata ad un servizio/processo.
Lista delle porte aperte
È più facile identificare quali porte sono in uso piuttosto che quali porte sono aperte. Ecco perché la seguente sezione presenterà metodi per elencare tutte le porte che sono attualmente in uso. In Linux, ci sono diversi strumenti disponibili per questo compito. La maggior parte di essi sono integrati in qualsiasi distro Linux.
Imparare quali porte sono attualmente aperte può essere utile in vari scenari. È possibile configurare una porta dedicata per una certa applicazione. Una porta aperta può anche essere una forte indicazione di intrusione nella rete.
I seguenti metodi sono dimostrati su Ubuntu 20.04.1 LTS.
List protocolli e porte aperte da /etc/services
Il file /etc/services contiene informazioni sui servizi attualmente in esecuzione. È un file grande, quindi preparati ad essere sommerso.
Elenco delle porte aperte utilizzando netstat
Lo strumento netstat è una utility per visualizzare le connessioni di rete per TCP, tabelle di routing e varie interfacce di rete. Offre anche statistiche sui protocolli di rete. Usando netstat, possiamo elencare tutte le porte aperte del sistema.
Esegui il seguente comando netstat:
Facciamo una rapida analisi di tutti i flag che abbiamo usato in questo comando.
- a: Dice a netstat di mostrare tutti i socket
- t: Dice a netstat di elencare le porte TCP
- u: Dice a netstat di elencare le porte UDP
Ecco un’altra variazione del comando netstat:
Ci sono due nuovi flag usati nel comando. Cosa significano?
- l: Dice a netstat di stampare solo i socket in ascolto
- n: Dice a netstat di mostrare il numero di porta
Per visualizzare il PID del processo che sta usando una porta, usate il flag “-p”:
Lista delle porte aperte usando ss
Lo strumento ss è un’utilità per indagare sui socket. Il suo utilizzo è simile a quello di netstat.
Per elencare le porte aperte, eseguire il seguente comando ss:
I flag sono simili a netstat. Le funzioni che descrivono sono anche abbastanza simili.
- l: Dice a ss di visualizzare i socket in ascolto
- n: Dice a ss di non provare a risolvere i nomi dei servizi
- t: Dice a ss di visualizzare i socket TCP
- u: Dice a ss di visualizzare i socket UDP
Lista delle porte aperte usando lsof
Il comando lsof serve per elencare i file aperti. Tuttavia, può anche essere usato per visualizzare le porte aperte.
Esegui il seguente comando lsof:
Per ottenere le porte aperte di un protocollo specifico (TCP, UDP, ecc.) definirlo dopo il flag “-i”, utilizzare:
Elenco delle porte aperte usando nmap
Lo strumento nmap è uno strumento potente per l’esplorazione della rete e la sicurezza/scansione delle porte. Può segnalare tutte le porte aperte nel sistema.
Per elencare le porte TCP aperte, eseguire il seguente comando nmap. Qui, l’indirizzo IP è quello del computer ospite:
Qui, ci sono due porzioni di argomento del comando.
- -sT: Questa sezione dice a nmap di scansionare le porte TCP.
- -p- : Questo dice a nmap di scansionare tutte le porte 65535. Se non utilizzato, allora nmap scansionerà solo 1000 porte per impostazione predefinita.
Se hai bisogno di elencare le porte UDP aperte, esegui il seguente comando nmap:
Per ottenere sia le porte TCP che UDP aperte, utilizzare il seguente comando:
Elenco delle porte aperte usando netcat
Lo strumento netcat è un’utilità a riga di comando per leggere e scrivere dati attraverso connessioni di rete sui protocolli TCP e UDP. Questo strumento può anche essere usato per elencare le porte aperte. Può eseguire test su una porta specifica o su un intervallo di porte.
Il seguente comando netcat scansionerà la porta da 1 a 1000. Il comando netcat eseguirà la scansione sul protocollo TCP per impostazione predefinita:
Può anche essere esteso all’intera lista di porte possibili:
Facciamo una rapida analisi dei flags.
- z: Dice a netcat di cercare solo le porte aperte senza inviare alcun dato
- v: Dice a netcat di eseguire in modalità verbosa
Per ottenere solo le porte aperte da questa lista, filtrare l’output con grep per il termine “succeeded”.
Se si vuole eseguire la scansione sul protocollo UDP, allora aggiungere il flag “-u”.
Pensieri finali
Come dimostrato, ci sono tonnellate di modi per cercare le porte aperte su Linux. Suggerisco di provare tutti i metodi prima di decidere quale padroneggiare. Se state usando un certo strumento come netcat o nmap regolarmente, allora padroneggiare i metodi associati sarà il più vantaggioso.
Felice computing!