2013-06-07 15:55:48 +0000 2013-06-07 15:55:48 +0000
51
51

Monitorare il traffico TCP su una porta specifica

Ho cercato a lungo questo aspetto, ma non riesco a trovare un esempio funzionante.

Il mio obiettivo è quello di monitorare il traffico TCP su una porta specifica per vedere le connessioni in entrata e scriverle in un file di testo. Il problema è che ho bisogno anche di un timestamp su ogni riga per mostrare esattamente quando il client si è connesso alla seconda.

Ho già esaurito netstat, nmap e tcptrack, ma nessuno supporta il timestamp.

Pensavo che uno script shell linux potrebbe funzionare se monitorassi una specifica porta locale e scrivessi del testo su un file quando viene fatta una connessione e poi concatenassi la data su ogni riga.

Stavo giocando con questo:

netstat -ano|grep 443|grep ESTABLISHED

e anche con questo:

tcptrack -i eth0 port 443
``` &001 


ma non si addice alle mie esigenze in quanto ho bisogno dell'ora in cui la connessione arriva. 


Se avete qualche suggerimento o potreste indicarmi la direzione giusta sarebbe molto apprezzato. 


Grazie. :)

Risposte (7)

73
73
73
2013-06-07 16:03:28 +0000

editare : Mi stanno ancora arrivando gli upvotes per questo, anni dopo. Per favore, non cercate questa risposta, la risposta usando iptables qui è a mio parere di gran lunga superiore.


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

o solo tcp-syn, o solo tcp-ack, o solo &007 (la mia ipotesi sarebbe quella), a seconda di ciò di cui avete bisogno.

33
33
33
2014-12-05 15:08:24 +0000

Per questo è possibile utilizzare il supporto iptables nel kernel Linux. Il lato positivo è che non richiede alcun software aggiuntivo per essere moderatamente utile. Il lato negativo è che richiede privilegi di root per la configurazione (ma dato che si parla della porta 443, che è una porta privilegiata, probabilmente sono necessari privilegi di root con la maggior parte delle soluzioni).

Aggiungere una regola iptables con qualcosa come:

sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

(Regolare la parte -I INPUT secondo i propri gusti.)

Quando la regola viene attivata, una voce syslog sarà emessa dal kernel. Per esempio, con una regola di input, la voce del log può assomigliare a:

Dec 5 09:10:56 hostname kernel: 1023963.185332] HTTPS SYN: IN=ifX OUT= MAC=80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC=A.B.C.D DST=W.X.Y. Z LEN=52 TOS=0x00 PREC=0x20 TTL=119 ID=11901 DF PROTO=TCP SPT=37287 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0

È quindi possibile utilizzare qualsiasi strumento di monitoraggio dei log run-of-the-mill per fare qualcosa di utile con queste informazioni. Se la vostra implementazione syslog lo supporta, potete anche indirizzarle in un file di log separato, soddisfacendo efficacemente la vostra richiesta di scrivere i dati di connessione in un file con timestamp al secondo senza software aggiuntivo.

Si noti che il target LOG è un target non terminante, il che significa che qualsiasi regola che lo segue sarà comunque valutata, e il pacchetto non sarà né rifiutato né accettato dalla regola LOG stessa. Questo rende il target LOG utile anche per il debug delle regole del firewall.

Per evitare di inondare il vostro log, considerate di utilizzare il modulo limit in combinazione con questo. Vedere la pagina man di iptables(8) per i dettagli.

26
26
26
2013-06-07 16:13:36 +0000

Micro-Second Resolution

Per impostazione predefinita, l'utility tcpdump riporta il tempo con risoluzione di microsecondi. Per esempio:

$ sudo tcpdump -i any port 443

mostrerà un'uscita simile alla seguente:

12:08:14.028945 IP localhost.33255 > localhost.https: Bandiere [S], seq 1828376761, win 43690, opzioni [mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], lunghezza 0 12:08:14.028959 IP localhost.https > localhost.33255: Flags [R.], seq 0, ack 1828376762, win 0, lunghezza 0

Vedi tcpdump(8) per una lista completa delle opzioni tcpdump, e pcap-filter(7) per la sintassi completa dei filtri che puoi usare.

5
5
5
2013-06-07 16:09:31 +0000

443 è traffico criptato - così difficile fare testa o croce di traffico su questa porta in ogni caso:

si può fare

yum installare ngrep o apt-get installare ngrep

quindi eseguire

ngrep -W byline -d any port 443 -q
2
2
2
2016-06-02 09:48:03 +0000

Può essere necessario anche per monitorare i pacchetti in entrata e in uscita da altre macchine.

tcpflow -i eth0 -c port 7891
``` &001 


(opzione `-i` per menzionare la rete, opzione `-c` per stampare i pacchetti in console)
1
1
1
2013-06-07 15:59:57 +0000

È possibile utilizzare tcpdump o Wireshark.

0
0
0
2017-05-26 11:08:35 +0000

Se avete bisogno di una soluzione permanente che monitori sempre il traffico sulle porte di interesse, vi suggerisco di usare QoS (il comando tc in linux). tc è un po’ criptico e non documentato, quindi uso FireQoS per impostare QoS e netdata per monitorarlo in tempo reale.

Controlla questo per maggiori informazioni: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers