Quando diciamo che un server “ha aperta la porta 443” stiamo comprimendo in una frase parecchie cose. Un processo è in ascolto su un socket, il kernel accetta pacchetti destinati a quella porta, eventuali firewall lungo il percorso li lasciano passare e il client riesce a completare almeno una parte della conversazione prevista dal protocollo.
Il port scanning prova a osservare questa situazione dall’esterno. Non ci dice necessariamente tutto ciò che gira sul server: ci dice ciò che è raggiungibile dal punto da cui stiamo effettuando il test. È una distinzione essenziale. La stessa macchina può mostrare SSH dalla rete Gestione, soltanto HTTPS da Internet e nessuna delle due cose dalla VLAN guest.
Cosa significa davvero “porta aperta”
Nel TCP una scansione può distinguere abbastanza bene tre casi: open, quando qualcuno risponde come servizio in ascolto; closed, quando l’host risponde ma non esiste un listener; filtered, quando il traffico viene filtrato e lo scanner non può stabilire lo stato con certezza. Questi risultati descrivono il percorso di rete, non soltanto la configurazione locale dell’host.
UDP è più ambiguo perché molti servizi non rispondono a datagrammi che non comprendono. L’assenza di risposta può quindi significare sia “porta filtrata” sia “servizio presente ma silenzioso”. Per questo Nmap usa stati come open|filtered.
Port scanner come strumento di verifica, non come oracolo
Un buon uso amministrativo dello scanner consiste nel formulare prima un’aspettativa e poi verificarla. “Da Ufficio il PBX deve mostrare 5061 ma non 22”. “Da Internet il reverse proxy deve mostrare 443 ma il backend 8080 non deve essere raggiungibile”. Il risultato diventa così un test di una policy, non una semplice lista di numeri.
In questa guida useremo Nmap soltanto su sistemi propri o esplicitamente autorizzati e ci concentreremo sull’inventario e sulla verifica difensiva.
Come funziona uno scan TCP SYN
Per capire cosa faccia Nmap con -sS conviene ricordare il normale three-way handshake TCP. Un client che vuole aprire una connessione invia SYN; se la porta è in ascolto il server risponde SYN/ACK; il client conclude con ACK. Se invece non esiste alcun listener, normalmente arriva un RST.
Il SYN scan sfrutta proprio questa distinzione. Nmap invia il primo SYN e osserva la risposta: SYN/ACK indica una porta aperta, RST una porta chiusa, mentre l’assenza di risposta o alcuni messaggi ICMP possono indicare filtraggio. In genere Nmap non completa la connessione applicativa: dopo aver ottenuto l’informazione necessaria interrompe il tentativo.
Questo spiega anche perché -sS richiede normalmente privilegi sufficienti a costruire pacchetti raw. Quando non li abbiamo, -sT usa invece la normale chiamata di sistema connect() e completa il tentativo TCP come farebbe un’applicazione qualunque.
Host discovery e -Pn
Prima del port scan Nmap cerca normalmente di capire se l’host sia raggiungibile. In una rete filtrata questo passaggio può ingannare: il server può essere acceso ma ignorare i probe usati per il discovery. In quel caso -Pn dice a Nmap di assumere l’host attivo e procedere direttamente alla scansione.
# Discovery della rete senza port scan
nmap -sn 192.168.1.0/24
# Il target non risponde al discovery ma vogliamo verificare alcune porte
sudo nmap -Pn -sS -p 22,80,443 192.168.1.50
-Pn non “bypassa” il firewall: elimina semplicemente la fase preliminare di discovery. Se le porte sono filtrate continueranno a esserlo.
Installare Nmap
apt update
apt install nmap
nmap --version
Discovery degli host
nmap -sn 192.168.1.0/24
-sn esegue host discovery senza il normale port scan. In reti filtrate un host può risultare assente anche se è acceso.
Scan TCP SYN
sudo nmap -sS 192.168.1.50
sudo nmap -sS -p 22,80,443,5060,5061 192.168.1.50
sudo nmap -sS -p- 192.168.1.50
Gli stati più importanti sono open, closed e filtered. Closed indica che l’host è raggiungibile ma nessun servizio accetta quella porta; filtered indica che Nmap non riesce a determinare lo stato a causa di un filtro.
Version detection
sudo nmap -sS -sV -p 22,80,443 192.168.1.50
-sV interroga le porte aperte con probe applicativi per capire cosa sta realmente rispondendo.
UDP
sudo nmap -sU -p 53,123,161,5060 192.168.1.50
Lo scan UDP è più lento e spesso restituisce open|filtered, perché l’assenza di risposta non permette sempre di distinguere un servizio silenzioso da un pacchetto scartato.
Verificare un firewall
Il test va eseguito dal punto di rete che ci interessa. Scandire un server dalla stessa LAN non dimostra cosa è esposto su Internet. Per verificare la segmentazione, ripetiamo lo stesso scan da Ufficio, Gestione o una VLAN guest.
sudo nmap -sS -p 22,5060,5061 10.0.10.100
Salvare l’output
nmap -sS -sV -oA audit-pbx-2026-09-24 10.0.10.100
-oA produce output normale, grepable e XML, utile per confrontare due audit nel tempo.
Riferimento
Documentazione ufficiale: Nmap Reference Guide.
Approfondimenti collegati
- Segmentare una rete con OpenWrt, per trasformare i risultati della scansione in una verifica delle policy di zona.
- Firewall proattivo, per passare dall’inventario dei servizi alla risposta automatica agli eventi ostili.
- Reactive Web Firewall, esempio concreto di detection applicativa che termina in un ban nftables.

