Sia che tu stia risolvendo problemi di connettività di rete o configurando un firewall, una delle prime cose da verificare è quali porte sono effettivamente aperte sul tuo sistema.

Questo articolo descrive diversi approcci per scoprire quali porte sono aperte all’esterno sul tuo sistema Linux.

Cos’è la porta aperta #

Una porta di ascolto è una porta di rete su cui un’applicazione ascolta., È possibile ottenere un elenco delle porte in ascolto sul sistema interrogando lo stack di rete con comandi come ss, netstat o lsof. Ogni porta di ascolto può essere aperta o chiusa (filtrata) utilizzando un firewall.

In termini generali, una porta aperta è una porta di rete che accetta pacchetti in arrivo da posizioni remote.,

Ad esempio, se si esegue un server web in ascolto sulle porte80e443 e tali porte sono aperte sul firewall, chiunque (tranne gli ip bloccati) sarà in grado di accedere ai siti web ospitati sul server web utilizzando il proprio browser. In questo caso, sia 80 che 443 sono porte aperte.

Le porte aperte possono rappresentare un rischio per la sicurezza in quanto ogni porta aperta può essere utilizzata dagli aggressori per sfruttare una vulnerabilità o eseguire qualsiasi altro tipo di attacco., È necessario esporre solo le porte necessarie per la funzionalità dell’applicazione e chiudere tutte le altre porte.

Controlla le porte aperte con nmap #

Nmap è un potente strumento di scansione di rete in grado di eseguire la scansione di singoli host e reti di grandi dimensioni. Viene utilizzato principalmente per audit di sicurezza e test di penetrazione.

Se disponibile, nmap dovrebbe essere il tuo primo strumento quando si tratta di scansione delle porte. Oltre alla scansione delle porte, nmap può anche rilevare l’indirizzo Mac , il tipo di sistema operativo , le versioni del kernel e molto altro.,

Il seguente comando da console, determina le porte in ascolto per connessioni TCP:

sudo nmap -sT -p- 10.10.8.8

-sT dice nmap scansione delle porte TCP e -p- per la scansione di tutti i 65535 porte. Se -p-non viene utilizzato nmap eseguirà la scansione solo delle 1000 porte più popolari.

L’output sopra mostra che solo le porte22,80e8069 sono aperte sul sistema di destinazione.,

Per cercare le porte UDP usa -sU invece di -sT:

sudo nmap -sU -p- 10.10.8.8

Per ulteriori informazioni, visita la pagina man di nmap e leggi tutte le altre potenti opzioni di questo strumento.

Controlla le porte aperte con netcat #

Netcat (onc) è uno strumento da riga di comando in grado di leggere e scrivere dati attraverso le connessioni di rete, utilizzando i protocolli TCP o UDP.

Con netcat è possibile eseguire la scansione di una singola porta o di un intervallo di porte.,

Per esempio per eseguire la scansione per aprire le porte TCP su una macchina remota con indirizzo IP 10.10.8.8 nell’intervallo 20-80 si può usare il seguente comando:

nc -z -v 10.10.8.8 20-80

-z opzione dice nc per eseguire la scansione solo per aprire le porte, senza l’invio di tutti i dati e le -v per ulteriori informazioni dettagliate.,

L’output sarà simile a questo:

Se si desidera stampare solo le linee con le porte aperte sullo schermo, filtrare i risultati con il comandogrep.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port succeeded!Connection to 10.10.8.8 80 port succeeded!

Per eseguire la scansione per le porte UDP passare il -u opzione nc comando:

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
2>&1 costruire reindirizzare l’errore standard standard output.,

Controlla le porte aperte usando Bash Pseudo Device #

Un altro modo per verificare se una determinata porta è aperta o chiusa è usando la shell Bash/dev/tcp/.. o/dev/udp/.. pseudo-device.

Quando si esegue un comando su uno pseudo-dispositivo/dev/$PROTOCOL/$HOST/$IP, Bash aprirà una connessione TCP o UDP all’host specificato sulla porta specificata.

Il seguente se..,l’istruzione else controllerà se la porta 443 on kernel.org è aperta:

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'then echo "Port is open"else echo "Port is closed"fi
Port is open

Come funziona il codice sopra?

Quando ci si connette a una porta utilizzando uno pseudo-dispositivo, il timeout predefinito è enorme, quindi stiamo usando il comandotimeout per uccidere il comando di test dopo 5 secondi. Se viene stabilita la connessione akernel.org port443 il comando di test restituirà true.,

Per controllare un intervallo di porte usa il ciclo for:

for PORT in {20..80}; do timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" && echo "port $PORT is open"done

L’output sarà simile a questo:

port 22 is openport 80 is open

Conclusione #

Ti abbiamo mostrato diversi strumenti che puoi usare per cercare porte aperte. Esistono anche altre utilità e metodi per verificare la presenza di porte aperte, ad esempio, è possibile utilizzare il modulo Python socket, curl, telnet o wget .