Sapere quali porte di rete siano aperte sul nostro sistema è fondamentale per la sicurezza del sistema stesso. Vi sono diversi modi per identrificare le porte aperte e le eventuali connessioni ad esse ed il primo e più conosciuto di questi è:
# netstat -an -f inet Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 12.123.45.67.50033 195.22.198.15.80 ESTABLISHED tcp4 0 0 12.123.45.67.50018 195.22.198.15.80 ESTABLISHED tcp4 0 0 192.168.0.1.65232 217.220.29.16.6667 ESTABLISHED tcp4 0 0 192.168.0.1.65231 213.92.8.4.6667 ESTABLISHED tcp4 0 0 192.168.0.1.139 *.* LISTEN tcp4 0 0 127.0.0.1.3493 127.0.0.1.49154 ESTABLISHED tcp4 0 0 127.0.0.1.49154 127.0.0.1.3493 ESTABLISHED tcp4 0 0 127.0.0.1.3493 127.0.0.1.49153 ESTABLISHED tcp4 0 0 127.0.0.1.49153 127.0.0.1.3493 ESTABLISHED tcp4 0 0 *.3493 *.* LISTEN tcp46 0 0 *.80 *.* LISTEN tcp4 0 0 *.25 *.* LISTEN tcp4 0 0 *.22 *.* LISTEN tcp6 0 0 *.22 *.* LISTEN tcp4 0 0 *.515 *.* LISTEN tcp6 0 0 *.515 *.* LISTEN tcp4 0 0 127.0.0.1.53 *.* LISTEN tcp4 0 0 192.168.0.1.53 *.* LISTEN udp4 0 0 192.168.0.1.138 *.* udp4 0 0 192.168.0.1.137 *.* udp4 0 0 *.138 *.* udp4 0 0 *.137 *.* udp4 0 0 *.3493 *.* udp4 0 0 127.0.0.1.123 *.* udp4 0 0 192.168.0.1.123 *.* udp4 0 0 *.123 *.* udp4 0 0 *.49152 *.* udp4 0 0 127.0.0.1.53 *.* udp4 0 0 192.168.0.1.53 *.* udp4 0 0 *.514 *.*L'output di netstat può sembrare un po' oscuro a prima vista: dopo l'identificazione del protocollo si trovano il numero dei pacchetti nelle code di ricezione e di invio, quindi l'indirizzo locale, composto da 4 campi per l'indirizzo IP e un quinto per la porta utlizzata. Un eventuale * (asterisco) in sostituzione dell'indirizzo IP evidenzia che la porta è attiva in ogni indirizzo locale. La quinta colonna indica l'host remoto e la porta dell'host remoto qualora ci sia una connessione, oppure *.* in caso la porta sia in ascolto e in attesa di una connessione. L'ultima colonna mostra lo stato della connessione: ESTABLISHED se è attiva e pronta a trasmettere e/o ricevere, LISTEN se il sistema è in attesa di una connessione su quella porta. Ci sono altri stati possibili e la consultazione della man page di netstat(1) può chiarire tutti i dubbi. L'output di netstat è utile per sapere le connessioni attive, tuttavia se vogliamo chiuderne una e impedire che vengano effettuate altre connessione da/a quella porta occorre sapere almeno quali applicazioni e/o servizi utilizzano quella porta e il modo più veloce per venirne a conoscenza è l'analisi del file /etc/services:
# cat /etc/services | grep 3493 nut 3493/tcp #Network UPS Tools nut 3493/udp #Network UPS ToolsUn altro tool molto utile per conoscere le porte che stiamo utilizzando in questo momento è sockstat, che ci fornisce anche utente, comando e processo di ogni connessione e di ogni porta in ascolto:
# sockstat -46 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS bind named 59998 3 udp4 *:58314 *:* paperino evolution- 59406 26 tcp4 12.123.45.67:51970 216.136.204.117:80 paperino evolution- 59406 27 tcp4 12.123.45.67:51971 63.236.73.26:80 paperino evolution- 59406 28 tcp4 12.123.45.67:51972 204.152.186.46:80 paperino ssh 56858 3 tcp4 12.123.45.67:50565 212.171.15.152:22 paperino irssi 14717 3 tcp4 192.168.0.1:65232 217.220.29.16:6667 paperino irssi 14717 5 tcp4 192.168.0.1:65231 213.92.8.4:6667 www httpd 56922 3 tcp46 *:80 *:* www httpd 56921 3 tcp46 *:80 *:* www httpd 56920 3 tcp46 *:80 *:* www httpd 5115 3 tcp46 *:80 *:* www httpd 791 3 tcp46 *:80 *:* root nmbd 639 8 udp4 *:137 *:* root nmbd 639 9 udp4 *:138 *:* root nmbd 639 10 udp4 192.168.0.1:137 *:* root nmbd 639 11 udp4 192.168.0.1:138 *:* root smbd 637 9 tcp4 192.168.0.1:139 *:* root upslog 631 3 tcp4 127.0.0.1:49154 127.0.0.1:3493 uucp upsmon 630 3 tcp4 127.0.0.1:49153 127.0.0.1:3493 uucp upsd 626 3 udp4 *:3493 *:* uucp upsd 626 4 tcp4 *:3493 *:* uucp upsd 626 8 tcp4 127.0.0.1:3493 127.0.0.1:49153 uucp upsd 626 9 tcp4 127.0.0.1:3493 127.0.0.1:49154I titoli sopra le colonne spiegano chiaramente i dati di ognuna. Tuttavia l'analisi non è ancora completa, in quanto sappiamo che porte sono aperte e quali sono in attesa di una connessione, però alcune potrebbero essere filtrate o chiuse da un firewall e quindi diventa importante sapere quali porte siano effettivamente raggiungibili dall'esterno.Un ottimo tool e probabilmente anche il più diffuso per conoscere eventuali "falle" è security/nmap, uno scanner che interroga tutte le porte dell'IP specificato e informa su quali siano aperte, filtrate o chiuse. Ovviamente è necessario eseguire nmap da una macchina posizionata su una rete esterna rispetto al sistema che vogliamo testare. Ad esempio, per fare una scansione di target da base:
base# nmap -sS -O target Starting nmap 3.27 ( www.insecure.org/nmap/ ) at 2003-06-17 13:03 CEST Insufficient responses for TCP sequencing (3), OS detection may be less accurate Interesting ports on target (12.34.56.78): (The 1619 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http Remote OS guesses: Mac OS X 10.1.4 (Darwin Kernel 5.4) on iMac, Mac OS X 10.1.5, FreeBSD 4.3 - 4.4PRERELEASE, FreeBSD 5.0-CURRENT (Jan 2003), FreeBSD 5.0-RELEASE (x86) Uptime 13.967 days (since Tue Jun 3 13:51:42 2003) Nmap run completed -- 1 IP address (1 host up) scanned in 16.704 secondsnmap fornisce la porta e il protocollo, lo stato della porta stessa e il servizio che è attivo su quella porta. Inoltre cerca di individuare il sistema operativo che gira su target. Ovviamente l'essere a conoscenza delle porte aperte è solo un primo passo verso la sicurezza di un sistema.