Ich habe ziemlich ausgiebig 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 zu erkennen und in eine Textdatei zu schreiben. Der Haken ist, ich brauche auch einen Zeitstempel in jeder Zeile, um genau zu zeigen, wann der Client eine Verbindung zum zweiten hergestellt hat.
Ich habe bereits netstat, nmap und tcptrack erschöpft, aber keiner unterstützt Timestamp.
Ich dachte, ein Linux-Shell-Skript könnte funktionieren, wenn ich einen bestimmten lokalen Port überwache und beim Herstellen einer Verbindung Text in eine Datei schreibe und dann das Datum in jeder Zeile verkette.
Ich habe damit gespielt:
netstat -ano|grep 443|grep ESTABLISHED
so gut wie das:
tcptrack -i eth0 port 443
Aber beides passt nicht zu meinen Bedürfnissen, da ich die Zeit benötige, in der die Verbindung hergestellt wird.
Wenn Sie Vorschläge haben oder mich in die richtige Richtung lenken könnten, wären wir Ihnen sehr dankbar.
Vielen Dank. :)
Antworten:
edit : Ich bekomme immer noch Stimmen für diese Jahre später. Bitte gehen Sie nicht für diese Antwort, die Antwort
iptables
hier ist meiner Meinung nach weit überlegen.oder nur
tcp-syn
, oder nurtcp-ack
, je nachdem, was Sie brauchen.quelle
-n
nach tcpdump hinzu (man tcpdump: -n Konvertieren Sie keine Adressen (dhHierfür können Sie 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 zum Einrichten Root-Rechte erforderlich sind (da es sich jedoch um Port 443 handelt, bei dem es sich um einen privilegierten Port handelt, benötigen Sie bei den meisten Lösungen wahrscheinlich Root-Rechte).
Fügen Sie eine iptables-Regel mit etwas hinzu, wie:
(Passen Sie das
-I INPUT
Teil an Ihren Geschmack an.)Wenn die Regel ausgelöst wird, wird vom Kernel ein Syslog-Eintrag ausgegeben. Bei einer Eingaberegel sieht der Protokolleintrag beispielsweise folgendermaßen aus:
Sie können dann ein beliebiges Protokollüberwachungstool verwenden, um mit diesen Informationen etwas Nützliches zu tun. Wenn Ihre Syslog-Implementierung dies unterstützt, können Sie diese sogar in eine separate Protokolldatei umleiten, wodurch Ihre Anforderung erfüllt wird, die Verbindungsdaten ohne zusätzliche Software in eine sekundengenaue Datei zu schreiben.
Beachten Sie, dass das
LOG
Ziel ein nicht terminierendes Ziel ist. Dies bedeutet, dass alle darauf folgenden Regeln weiterhin ausgewertet werden und das Paket von der LOG-Regel selbst weder abgelehnt noch akzeptiert wird. Dies macht dasLOG
Ziel auch zum Debuggen von Firewall-Regeln nützlich.Verwenden Sie
limit
in diesem Zusammenhang das Modul, um ein Überfluten des Protokolls zu vermeiden . Weitere Informationen finden Sie auf der Manpage iptables (8).quelle
Mikrosekundenauflösung
Standardmäßig gibt das Dienstprogramm tcpdump die Zeit in Mikrosekundenauflösung an. Zum Beispiel:
zeigt eine Ausgabe ähnlich der folgenden an:
Siehe tcpdump (8) für eine vollständige Liste der tcpdump-Optionen und pcap-filter (7) für die vollständige Syntax der Filter, die Sie verwenden können.
quelle
443 ist verschlüsselter Datenverkehr - so schwierig, den Datenverkehr auf diesem Port ohnehin zu kontrollieren:
du kannst tun
yum install ngrep oder apt-get install ngrep
dann renne
quelle
Dies kann auch erforderlich sein, um eingehende und ausgehende Pakete von anderen Computern zu überwachen.
(Option
-i
zum Erwähnen des Netzwerks, Option-c
zum Drucken der Pakete in der Konsole)quelle
Sie können tcpdump oder Wireshark verwenden.
quelle
Wenn Sie eine permanente Lösung benötigen, die den Datenverkehr in den Ports von Interesse überwacht, empfehle ich die Verwendung von QoS (der Befehl tc unter Linux). tc ist ein bisschen kryptisch und undokumentiert, daher verwende ich FireQoS, um QoS und Netzdaten 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
quelle