Überwachung des TCP-Datenverkehrs an einem bestimmten Port

Ich habe ziemlich ausführlich danach gesucht, kann aber anscheinend kein funktionierendes Beispiel finden.

Mein Ziel ist es, den TCP-Verkehr an einem bestimmten Port zu überwachen, um eingehende Verbindungen anzuzeigen und in eine Textdatei zu schreiben. Der Haken ist, ich brauche auch einen Zeitstempel in jeder Zeile, um genau anzuzeigen, wann der Client mit dem zweiten verbunden ist.

Ich habe netstat, nmap und tcptrack bereits erschöpft, aber keiner unterstützt den Zeitstempel.

Ich dachte an ein Linux-Shell-Skript könnte funktionieren, wenn ich einen bestimmten lokalen Port überwachte und Text in eine Datei schrieb, wenn eine Verbindung hergestellt wird, und dann einfach das Datum in jeder Zeile verkette.

Ich habe damit gespielt:

netstat -ano|grep 443|grep ESTABLISHED

Sowie dies:

tcptrack -i eth0 port 443

Aber keiner passt zu meinen Bedürfnissen, da ich die Zeit brauche, zu der die Verbindung hereinkommt.

, Wenn Sie irgendwelche Vorschläge haben, oder könnte mich in die richtige Richtung würde sehr geschätzt werden.

Dank. :)

 66
Author: Wrikken, 2013-06-07

7 answers

Edit: Ich bekomme immer noch Upvotes für diese Jahre später. Bitte gehen Sie nicht für diese Antwort, die Antwort mit iptables hier ist meiner Meinung nach weit überlegen.


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

Oder nur tcp-syn oder nur tcp-ack (meine Vermutung wäre, dass man), je nachdem, was man braucht.

 89
Author: Wrikken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-05-23 19:53:03

Sie können dafür die iptables-Unterstützung im Linux-Kernel verwenden. Der Vorteil ist, dass keine zusätzliche Software erforderlich ist, um mäßig nützlich zu sein. Der Nachteil ist, dass für die Einrichtung Root-Berechtigungen erforderlich sind (da Sie jedoch von Port 443 sprechen, einem privilegierten Port, benötigen Sie bei den meisten Lösungen wahrscheinlich Root-Berechtigungen).

Fügen Sie eine iptables Regel mit etwas wie:

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

(Passen Sie den Teil -I INPUT an Ihren Geschmack an.)

Wenn die Regel ausgelöst wird ein Syslog-Eintrag vom Kernel ausgegeben. Bei einer Eingaberegel kann der Protokolleintrag beispielsweise folgendermaßen aussehen:

5. Dez 09:10:56 hostname kernel: [1023963.185332] HTTPS SYN: IM=ifX OUT= MAC=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

Sie können dann jedes laufende Protokollüberwachungstool verwenden, um etwas Nützliches zu tun mit diesen Informationen. Wenn Ihre Syslog-Implementierung dies unterstützt, können Sie diese sogar in eine separate Protokolldatei weiterleiten, wodurch Ihre Anforderung, die Verbindungsdaten ohne zusätzliche Software in eine Datei zu schreiben, effektiv erfüllt wird.

Beachten Sie, dass das Ziel LOG ein nicht abschließendes Ziel ist, was bedeutet, dass alle darauf folgenden Regeln weiterhin ausgewertet werden und das Paket weder von der Protokollregel selbst abgelehnt noch akzeptiert wird. Dies macht das Ziel LOG nützlich auch zum Debuggen von Firewall-Regeln.

Um zu vermeiden, dass Ihr Protokoll überflutet wird, sollten Sie das Modul limit in Verbindung damit verwenden. Siehe die iptables (8) Manpage für Details.

 41
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-12-05 15:08:24

Mikrosekundenauflösung

Standardmäßig meldet das Dienstprogramm tcpdump die Zeit mit einer Auflösung von Mikrosekunden. Beispiel:

$ sudo tcpdump -i any port 443

Zeigt eine Ausgabe ähnlich der folgenden:

12:08:14.028945 IP localhost.33255 > localhost.https: Flags [S], seq 1828376761, gewinnen, 43690, options [mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], length 0
12:08:14.028959 IP localhost.https - > localhost.33255: Flags [R.], seq 0, ack 1828376762, win 0, Länge 0

Eine vollständige Liste der tcpdump-Optionen finden Sie unter tcpdump(8) und pcap-filter(7) für die vollständige Syntax der Filter, die Sie verwenden können.

 29
Author: CodeGnome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-07 16:13:36

443 ist verschlüsselter Verkehr - so schwierig, Kopf oder Zahl des Verkehrs auf diesem Port sowieso zu machen:

Sie können

Yum install ngrep oder apt-get install ngrep

Dann führe

ngrep -W byline -d any port 443 -q
 5
Author: Vindicated Halcyon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-07 16:09:31

Sie können dies auch benötigen, um die eingehenden und ausgehenden Pakete von anderen Maschinen zu überwachen.

tcpflow -i eth0 -c port 7891

(Option -i um das Netzwerk zu erwähnen, Option -c um die Pakete in der Konsole zu drucken)

 2
Author: reegan vijay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-06-05 09:37:51

Sie können tcpdump oder Wireshark verwenden.

 1
Author: sigjuice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-07 15:59:57

Wenn Sie eine permanente Lösung benötigen, die den Datenverkehr auf interessierenden Ports immer überwacht, empfehle ich die Verwendung von QoS (dem tc-Befehl unter Linux). tc ist etwas kryptisch und undokumentiert, daher verwende ich FireQoS, um QoS und netdata für die Echtzeitüberwachung einzurichten.

Überprüfen Sie dies für weitere Informationen: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers

 0
Author: Costa Tsaousis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-05-26 11:08:35