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

Monitor TCP Traffic op specifieke poort

Ik heb hier vrij uitgebreid naar gezocht, maar kan niet met een werkend voorbeeld komen.

Mijn doel is om TCP verkeer op een specifieke poort te monitoren om binnenkomende verbindingen te zien en deze naar een tekstbestand te schrijven. Het addertje onder het gras is dat ik ook een tijdstempel nodig heb op elke rij om precies aan te geven wanneer de client verbonden is met de tweede.

Ik heb netstat, nmap en tcptrack al uitgeput, maar geen enkele ondersteunt de tijdstempel.

Ik dacht dat een linux shell script zou kunnen werken als ik een specifieke lokale poort zou monitoren en tekst zou schrijven naar een bestand wanneer er een verbinding wordt gemaakt, en dan gewoon de datum op elke regel zou samenvoegen.

Ik speelde met deze:

netstat -ano|grep 443|grep ESTABLISHED

en deze:

tcptrack -i eth0 port 443

maar geen van beide past bij mijn behoeften omdat ik de tijd nodig heb dat de verbinding binnenkomt.

Als je suggesties hebt of me in de juiste richting kan wijzen, zou dat zeer op prijs worden gesteld.

Bedankt. :)

Antwoorden (7)

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

edit : Ik krijg nog steeds stemmen voor deze jaren later. Ga alsjeblieft niet voor dit antwoord, het antwoord met iptables hier is naar mijn mening veel beter.

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

of alleen tcp-syn, of alleen tcp-ack (mijn gok zou dat zijn), afhankelijk van wat je nodig hebt.

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

Je kunt hiervoor de iptables ondersteuning in de Linux kernel gebruiken. Het voordeel is dat er geen extra software nodig is om matig bruikbaar te zijn. Het nadeel is dat het root-privileges vereist om in te stellen (maar gezien het feit dat je het hebt over poort 443, wat een geprivilegieerde poort is, heb je waarschijnlijk root-privileges nodig bij de meeste oplossingen).

Voeg een iptables regel toe met iets als:

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

(Pas het -I INPUT gedeelte aan naar je eigen smaak.)

Wanneer de regel wordt getriggerd, zal er een syslog-item worden uitgezonden door de kernel. Bijvoorbeeld, met een invoerregel kan de log-invoer er zoiets uitzien als:

Dec 5 09:10:56 hostnaam kernel: 1023963.185332] HTTPS SYN: IN=ifX OUT= MAC=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

U kunt dan elk run-of-the-mill logbewakingsgereedschap gebruiken om iets nuttigs te doen met deze informatie. Als uw syslog-implementatie dit ondersteunt, kunt u deze zelfs in een apart logbestand sturen, waarmee u effectief voldoet aan uw eis om de verbindingsgegevens te schrijven naar een bestand met een tijdstempel naar de tweede zonder extra software.

Merk op dat het LOG-doel een niet-beëindigend doelwit is, wat betekent dat alle regels die erop volgen nog steeds worden geëvalueerd, en dat het pakket niet wordt afgewezen of geaccepteerd door de LOGregel zelf. Dit maakt de LOG target ook nuttig voor het debuggen van firewall regels.

Om te voorkomen dat uw logboek overstroomt, kunt u overwegen om de limit module in combinatie hiermee te gebruiken. Zie de iptables(8) man pagina voor details.

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

Micro-Second Resolution

Standaard rapporteert het hulpprogramma tcpdump de tijd met een microsecondenresolutie. Bijvoorbeeld:

$ sudo tcpdump -i any port 443

tonen uitvoer vergelijkbaar met de volgende:

12:08:14.028945 IP localhost.33255 > Mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], lengte 0 12:08:14.028959 IP localhost.https > localhost.33255: Vlaggen [R.], seq 0, ack 1828376762, win 0, lengte 0

Zie tcpdump(8) voor een volledige lijst van tcpdump opties, en pcap-filter(7) voor de volledige syntax van de filters die u kunt gebruiken.

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

443 is gecodeerd verkeer - dus moeilijk om het verkeer op deze poort te volgen:

yum installeren ngrep of apt-get installeren ngrep

draaien dan ngrep -W byline -d any port 443 -q

2
2
2
2016-06-02 09:48:03 +0000

U kunt dit ook nodig hebben om de inkomende en uitgaande pakketten van andere machines te controleren.

tcpflow -i eth0 -c port 7891

(optie -i om het netwerk te vermelden, optie -c om de pakketten in de console af te drukken)

1
1
1
2013-06-07 15:59:57 +0000

U kunt gebruik maken van tcpdump of Wireshark.

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

Als je een permanente oplossing nodig hebt die altijd het verkeer op interessante poorten zal monitoren, stel ik voor om QoS te gebruiken (het tc commando in linux). tc is een beetje cryptisch en ongedocumenteerd, dus ik gebruik FireQoS om QoS en netdata in te stellen om het real-time te monitoren.

Controleer dit voor meer informatie: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers ](https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers)