Questo articolo spiega come verificare la presenza di porte aperte utilizzando i comandi netstat, lsof e nmap per scoprire quali servizi sono in ascolto su quali porte.
Durante la risoluzione dei problemi di connettività di rete o di problemi specifici dell'applicazione, una delle prime cose da controllare dovrebbe essere quali porte sono effettivamente in uso sul tuo sistema e quale applicazione è in ascolto su una porta specifica.
La porta di rete è identificata dal numero, dall'indirizzo IP associato e dal tipo di protocollo di comunicazione, come TCP o UDP. Soprattutto, una porta aperta è una porta di rete su cui un'applicazione o un processo è in ascolto, fungendo da endpoint di comunicazione.
Ciascuna porta di ascolto può essere aperta o chiusa (filtrata) utilizzando un firewall. In termini generali, una porta aperta è una porta di rete che accetta i pacchetti in arrivo da località remote.
Verifica porte aperte con netstat
netstat
(statistiche di rete ) è uno strumento da riga di comando per monitorare le connessioni di rete sia in entrata che in uscita, nonché visualizzare tabelle di routing, statistiche dell'interfaccia, ecc. Questo strumento è molto importante e molto utile per gli amministratori di rete Linux e gli amministratori di sistema per monitorare e risolvere i problemi della propria rete -problemi correlati e determinano le prestazioni del traffico di rete.
Per elencare tutte le porte TCP o UDP su cui sono in ascolto, inclusi i servizi che utilizzano le porte e lo stato del socket, utilizzare il comando seguente:
$ sudo netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 24919/amavisd
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 800/tinyproxy
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 844/pure-ftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 1001/dovecot
tcp6 0 0 :::3306 :::* LISTEN 823/mysqld
tcp6 0 0 ::1:783 :::* LISTEN 24911/spamd.pid -d
tcp6 0 0 :::80 :::* LISTEN 781/httpd
tcp6 0 0 :::21 :::* LISTEN 844/pure-ftpd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
tcp6 0 0 :::25 :::* LISTEN 967/master
tcp6 0 0 :::993 :::* LISTEN 1001/dovecot
tcp6 0 0 :::995 :::* LISTEN 1001/dovecot
udp 0 0 0.0.0.0:47967 0.0.0.0:* 460/avahi-daemon: r
udp 0 0 127.0.0.1:123 0.0.0.0:* 472/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 472/ntpd
udp6 0 0 :::123 :::* 472/ntpd
Le opzioni utilizzate in questo comando hanno il seguente significato:
-t
:mostra le porte TCP.-u
:mostra le porte UDP.-l
:mostra solo le porte di ascolto.-n
:mostra gli indirizzi numerici invece di risolvere gli host.-p
:mostra il PID e il nome del processo dell'ascoltatore. Queste informazioni vengono mostrate solo se esegui il comando come utente root o sudo.
Le colonne importanti nel nostro caso sono:
- Proto – Il protocollo utilizzato dal socket.
- Indirizzo locale:l'indirizzo IP e il numero di porta in ascolto del processo.
- PID/Nome programma:il PID e il nome del processo.
Inoltre, se vuoi filtrare i risultati, usa il grep
comando. Ad esempio, per trovare quale processo è in ascolto sulla porta TCP 22, digitare:
$ sudo netstat -tulnp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
Se l'output è vuoto significa che nulla è in ascolto sulla porta.
Per ulteriori informazioni su netstat
comando in Linux, consulta la sua pagina del manuale.
Verifica porte aperte con lsof
lsof
che significa 'Elenca i file aperti' viene utilizzato per scoprire quali file vengono aperti con quale processo. In Linux, tutto è un file. Puoi pensare a un socket come a un file che scrive sulla rete.
Per ottenere un elenco di tutte le porte TCP in ascolto con tipo lsof:
$ sudo lsof -nP -iTCP -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 768 root 3u IPv4 16112 0t0 TCP *:22 (LISTEN)
sshd 768 root 4u IPv6 16114 0t0 TCP *:22 (LISTEN)
httpd 781 root 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 781 root 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
tinyproxy 800 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
tinyproxy 805 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
pure-ftpd 844 root 4u IPv4 16289 0t0 TCP *:21 (LISTEN)
pure-ftpd 844 root 5u IPv6 16290 0t0 TCP *:21 (LISTEN)
master 967 root 13u IPv4 17225 0t0 TCP *:25 (LISTEN)
master 967 root 103u IPv4 17319 0t0 TCP 127.0.0.1:10025 (LISTEN)
dovecot 1001 root 24u IPv4 18600 0t0 TCP *:995 (LISTEN)
dovecot 1001 root 37u IPv6 18623 0t0 TCP *:993 (LISTEN)
httpd 24344 apache 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 24344 apache 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
/usr/bin/ 24911 root 5u IPv4 25208447 0t0 TCP 127.0.0.1:783 (LISTEN)
/usr/bin/ 24911 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
spamd 24913 root 5u IPv4 25208447 0t0 TCP 127.0.0.1:783 (LISTEN)
spamd 24913 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
/usr/sbin 24919 amavis 5u IPv4 25208583 0t0 TCP 127.0.0.1:10024 (LISTEN)
/usr/sbin 24919 amavis 6u IPv6 25208584 0t0 TCP [::1]:10024 (LISTEN)
smtpd 28403 postfix 6u IPv4 17225 0t0 TCP *:25 (LISTEN)
smtpd 28403 postfix 7u IPv6 17226 0t0 TCP *:25 (LISTEN)
Le opzioni utilizzate sono le seguenti:
-n
:non convertire i numeri di porta in nomi di porta.-P
:non risolve i nomi host, mostra gli indirizzi numerici.-iTCP -sTCP:LISTEN
:mostra solo i file di rete con lo stato TCP LISTEN.
Per scoprire quale processo è in ascolto su una porta particolare, ad esempio la porta 3306, dovresti utilizzare:
$ sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
L'output mostra che il server MySQL utilizza la porta 3306.
Per ulteriori informazioni su lsof
comando in Linux, consulta la sua pagina del manuale.
Verifica porte aperte con nmap
nmap
o Mapper di rete , è uno strumento da riga di comando Linux open source per l'esplorazione della rete e il controllo della sicurezza. Con nmap, gli amministratori dei server possono rivelare rapidamente host e servizi, cercare problemi di sicurezza e cercare porte aperte.
nmap
i comandi possono essere utilizzati per verificare che una singola porta o una serie di porte siano aperte.
Ecco come scansionare la porta 80 sul sistema di destinazione:
$ sudo nmap -p 80 192.168.0.1
Nmap scan report for 192.168.0.1
Host is up (0.000073s latency).
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds
Scansiona le porte da 1 a 200 sul sistema di destinazione:
$ sudo nmap -p 1-200 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:42 EEST
Nmap scan report for 192.168.0.1
Host is up (0.0000080s latency).
Not shown: 196 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds
Scansiona (velocemente) le porte più comuni:
$ sudo nmap -F 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:44 EEST
Nmap scan report for 192.168.0.1
Host is up (0.000014s latency).
Not shown: 89 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds
Linea inferiore
In conclusione, controllare quali porte sono aperte e quali informazioni possono essere ottenute dai servizi che accettano connessioni su quelle porte ti dà le informazioni di cui hai bisogno per bloccare il tuo server.
Ad esempio, qualsiasi informazione estranea trapelata dal tuo computer può essere utilizzata da un utente malintenzionato per tentare di sfruttare vulnerabilità note o svilupparne di nuove. Meno riescono a capire, meglio è.