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 porte80
e443
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
,80
e8069
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
.
Lascia un commento