BSD-FAQ-it
Indietro | Capitolo 3. Amministrazione del Sistema | Avanti

# 3.28. Come posso sapere quali porte sono aperte nel mio sistema?

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 Tools

Un 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:49154

I 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 seconds

nmap 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.

Indietro | Partenza | Avanti
Come partiziono un disco per FreeBSD? | Risali | Che differenza c'è tra APM e ACPI ?