Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati

Versione 7 del 20/04/2009 20.22.53

Nascondi questo messaggio

BR

Introduzione

In questa guida verrà mostrato l'utilizzo del comando netstat per poter controllare lo stato delle connessioni presenti sul PC locale. Grazie a queste informazioni sarà possibile configurare al meglio il proprio firewall o tenere d'occhio i servizi attivi.

Prima di cominciare è bene ricordare che una connessione tra due servizi è univocamente identificata dalla coppia di tipo indirizzoIP:porta, una per ogni entità comunicante.

L'output

Prima di tutto aprire una shell e digitare il seguente comando:

sudo netstat -natup

Vediamo ora brevemente il significato di ogni parametro:

  • -n: Mostra gli indirizzi IP e il numero della porta al posto dei relativi, velocizzando l'output.

  • -a: Mostra anche le porte in ascolto e non solo quelle connesse.

  • -t: Mostra le porte TCP.

  • -u: Mostra le porte UDP.

  • -p: Mostra il PID e il nome del processo in ascolto.

Un esempio ci aiuterà a capire meglio:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.1.1:80          0.0.0.0:*               LISTEN      29308/apache2
tcp        0      0 192.168.1.2:22          0.0.0.0:*               LISTEN      9513/sshd
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      32512/postmaster
tcp        0      0 127.0.0.1:5432          127.0.0.1:45877         ESTABLISHED 9330/postgres: myap
tcp        0      0 127.0.0.1:5432          127.0.0.1:45876         ESTABLISHED 9332/postgres: myap
tcp        0   4736 192.168.1.2:22          66.77.88.99:42596       ESTABLISHED 9231/sshd: giambo [
tcp6       0      0 ::ffff:127.0.0.1:45877  ::ffff:127.0.0.1:5432   ESTABLISHED 17772/java 
tcp6       0      0 ::ffff:127.0.0.1:45876  ::ffff:127.0.0.1:5432   ESTABLISHED 17772/java 

Vediamo ora brevemente il significato delle colonne interessanti al fine di questa guida.

«Proto»

La prima colonna riporta il tipo di protocollo, TCP o UDP. Solitamente compare tcp o tcpv6 ma in certi casi (DNS) si può avere anche UDP

«Local Address»

Questa colonna ci mostra su quale indirizzo IP locale e su quale porta (Numero dopo il ":") c'è un servizio in ascolto. Una lista delle porte più comunemente usate la possiamo trovare nel file di configurazione /etc/netstat.

«Foreign Address»

Similmente alla colonna Local Address, ma identifica il sistema remoto al quale il servizio è connesso.

«State»

Indica lo stato della connessione. Lo stato LISTEN significa che il servizio è in ascolto per nuove connessioni, lo stato ESTABILISHED indica una connessione attiva con un'altro sistema.

Altri valori solitamente indicano stati temporanei: Per esempio SYN_SENT indica il tentativo di stabilire una connessione, mentre CLOSE_WAIT indica una connessione chiusa in attesa di liberare le risorse allocate.

«PID/Program name»

Queste due colonne separate da "/" mostrano il PID del processo e il nome dell'applicazione che prende parte alla connessione.

Analisi dell'esempio

Analizzeremo ora l'esempio riga per riga per meglio comprendere lo stato attuale delle connessioni sulla macchina locale.

tcp        0      0 192.168.1.1:80          0.0.0.0:*               LISTEN      29308/apache2

La prima riga ci dice che sull'indirizzo 192.168.1.1 c'è un servizio in ascolto sulla porta 80 e cioè il WEB server apache2. Questo servizio è pronto a ricevere connessioni provenienti da qualsiasi indirizzo e da qualsiasi porta.

tcp        0      0 192.168.1.2:22          0.0.0.0:*               LISTEN      9513/sshd

Lo stesso si può dire della seconda riga, il servizio è il demone sshd, l'indirizzo IP è differente.

tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      32512/postmaster

La terza riga informa che il servizio "postmaster" (PostgreSQL) è disponibile solo sull'indirizzo locale (Interfaccia di loopback), quindi di fatto le connessioni sono possibili solo dalla macchina locale.

Le prossime 3 righe indicano delle connessioni effettivamente in corso, con scambio di dati.

tcp        0      0 127.0.0.1:5432          127.0.0.1:45877         ESTABLISHED 9330/postgres: myap
tcp        0      0 127.0.0.1:5432          127.0.0.1:45876         ESTABLISHED 9332/postgres: myap

Dalla quarta e quinta riga vediamo che c'è uno scambio di dati in corso tra la macchina locale e ... la macchina locale ! Infatti come detto precedentemente il database PostgreSQL è accessibile solo localmente, per esempio da un'applicazione WEB ("myap") che accede al database per aggiornare i suoi dati.

tcp        0   4736 192.168.1.2:22          66.77.88.99:42596       ESTABLISHED 9231/sshd: giambo [

L'ultima riga, per concludere, mostra un collegamento in corso tra la nostra macchina locale e una macchina con indirizzo IP 66.77.88.99. Questa macchina è connessa al servizio sshd, se l'utente guardasse ora l'output del suo comando , vedrebbe una riga molto simile, ma con le colonne Local Address e Foreign Address scambiate tra di loro.

tcp6       0      0 ::ffff:127.0.0.1:45877  ::ffff:127.0.0.1:5432   ESTABLISHED 17772/java 
tcp6       0      0 ::ffff:127.0.0.1:45876  ::ffff:127.0.0.1:5432   ESTABLISHED 17772/java 

Le ultime 3 righe mostrano semplicemente l'inverso delle righe 4 e 5: La connessione avviene localmente, è normale che vengano mostrate entrambe le entità comunicanti: Il processo java che si collega a PostgreSQL e quest'ultimo che dialoga con l'applicazione myap/java. Può generare confusione l'indirizzo IP mostrato: Questa è semplicemente la notazione IPV6, levando ::ffff: abbiamo un indirizzo IPV4 al quale siamo abituati (127.0.0.1)

Conclusioni

Questa breve panoramica su netsat ci ha mostrato come controllare lo stato dei servizi sulla nostra macchina. Grazie alle informazioni raccolte possiamo capire se qualcosa non funziona nelle nostre applicazioni (Per esempio troppe connessioni al database), se qualche intruso è penetrato nel nostro sistema (Una connessione sospetta a sshd) o se le porte di [:InternetRete/Condivisione/Amule:aMule] sono correttamente configurate ;-) Dopo aver attentamente studiato l'output di netstat potremmo decidere che un servizio non deve per forza ascoltare su tutti gli IP (Il database, per esempio) e quindi configurarlo affinché sia disponibile solo localmente oppure possiamo migliorare le regole del nostro firewall e permettere le connessioni al servizio sshd solo da certi IP ben conosciuti.

Ulteriori risorse


CategoryDaCancellare