Alla base di tutte le comunicazioni che si effettuano sulla rete Internet e in locale, all’interno della LAN domestica o aziendale, ci sono protocolli come TCP (Transmission Control Protocol), inventato nel 1973 dai “padri della rete” Vint Cerf e Bob Kahn, e UDP (User Datagram Protocol), la cui nascita risale al 1980. Le differenze tra TCP e UDP sono importanti: ne abbiamo parlato nell’articolo citato.
Entrambi, TCP e UDP, come il più recente QUIC sono protocolli di trasporto ossia di fornire un canale di comunicazione per i pacchetti dati trasmessi su una rete di telecomunicazioni.
I principali protocolli di trasporto come TCP e UDP permettono di utilizzare 65535 porte di comunicazione sulle quali possono essere abilitati molteplici servizi. Per convenzione, alcuni servizi vengono posti su alcune porte specifiche: il documento della IANA (Internet Assigned Numbers Authority) raccoglie le corrispondenze tra numero di porte e servizi comunemente in ascolto sulle stesse.
Il port scan consiste nell’effettuare una scansione di un indirizzo IP pubblico o privato per verificare se ci sono server in ascolto e quindi servizi effettivamente utilizzati su ciascuna porta.
Come abbiamo visto nell’articolo sulle operazioni da fare per rendere sicuro il router, sull’interfaccia WAN e quindi sull’IP pubblico non si dovrebbero aprire porte in ingresso, a meno che non si abbiano specifiche necessità (ad esempio per rendere un server Web, FTP o un servizio di storage raggiungibili da remoto).
Con la tecnica del port forwarding è infatti possibile inoltrare le richieste di connessione provenienti da host remoti sull’IP pubblico verso un indirizzo IP locale (corrispondente al sistema dove è installato il software che offre funzionalità server).
In passato abbiamo presentato tanti strumenti per controllare le porte aperte su router e IP pubblico, compreso Nmap ovvero il “re” dei port scanner.
Port scan senza installare nulla: come usare Test-NetConnection in Windows
Senza utilizzare strumenti online né installare un software professionale come Nnmap, molti amministratori di rete utilizzano il comando telnet
in Windows per capire se un sistema remoto risponda su una porta specifica: basta infatti digitare telnet
seguito dall’indirizzo IP dell’host e della porta da verificare.
Telnet non è però installato di default in Windows e può essere aggiunto premendo Windows+R
quindi digitando optionalfeatures
e spuntando infine la casella Client Telnet.
PowerShell offre tuttavia una comoda cmdlet che permette di verificare se una porta risulta aperta con un servizio in ascolto. La cmdlet si chiama Test-NetConnection e, come le altre PowerShell, può essere utilizzata anche nella forma breve tnc
.
Provate a premere Windows+X
quindi a selezionare la voce Windows PowerShell o Terminale, a seconda che si utilizzi Windows 10 o Windows 11. Digitando quanto segue è possibile verificare che il server Web di Google risponde correttamente sulla porta TCP 443:
Il messaggio TcpTestSucceeded : True conferma che il server remoto ha risposto correttamente sulla porta TCP 443 (HTTPS).
Al posto di google.com è ovviamente possibile sostituire qualunque indirizzo IP o mnemonico mentre al posto di 443 si può indicare il numero della porta TCP da verificare.
Rob VandenBrink ha realizzato uno script PowerShell che permette di specificare uno o più host da verificare (IP o indirizzi mnemonici) e le porte da sottoporre a scansione.
Copiando questo codice e incollandolo nella finestra PowerShell, lo script verifica se le porte TCP indicate risultano o meno aperte.
È inoltre possibile specificare sia indirizzi IP remoti che IP locali in modo da controllare quali porte sono aperte sui dispositivi di rete.
Ovviamente lo script è liberamente modificabile, ad esempio per fare in modo che venga controllato un intervallo specifico di porte di comunicazione. Il limite è che il port scanning è ridotto alle porte TCP e non è ad esempio possibile controllare le porte UDP aperte.
Per trovare le porte aperte sui dispositivi connessi in rete locale si può usare il già citato Nmap oppure soluzioni intuitive come l’app Fing.
Il port scanning è un po’ un’arma a doppio taglio: da un lato consente di capire se un sistema remoto risulta correttamente accessibile, dall’altro può essere utilizzata da parte di malintenzionati per scoprire server esposti su Internet senza che l’amministratore degli stessi ne sia consapevole: si pensi anche a videocamere, server NAS, dispositivi per l’Internet delle Cose, interfacce di amministrazione dei router e di altri prodotti per il networking. Il motore di ricerca Shodan raccoglie proprio gli host che, a livello mondiale, rispondono su determinate porte ed espongono certi servizi su indirizzi IP pubblici.
Eventuali vulnerabilità presenti lato server possono essere sfruttate da parte di quei malintenzionati che si rendessero conto dell’avvenuta esposizione di una o più porte di comunicazione sull’IP pubblico. Da qui scaturisce l’importanza di verificare le porte aperte sull’IP pubblico, chiudere quelle non necessarie (disattivando eventualmente port forwarding e UPnP), bloccare gli accessi agli IP sconosciuti.