GNU/Linux >> LINUX-Kenntnisse >  >> Linux

TCPdump filtern:Ordnung aus Chaos schaffen

In meinem letzten Artikel Fehlerbehebung mit tcpdump habe ich mir den tcpdump angesehen Tool, einige grundlegende Anwendungsfälle und ging durch ein Modell eines realen Szenarios. Nun möchte ich etwas weiter ausgraben. Jeder, der dieses Tool in einer realen Situation verwendet, merkt sofort, wie viele Informationen (ich glaube, sie nennen das "verbose" ...) dem Benutzer präsentiert werden. Eines der besten Dinge, die Sie selbst tun können, ist, einen praktischen Weg zu finden, um nach den Informationen zu filtern, die Sie benötigen. Sehen wir uns einige Möglichkeiten an, wie Sie dies tun können.

Allgemeine Filteroptionen

Der tcpdump Das Tool verfügt über verschiedene integrierte Möglichkeiten, um die Aufnahme selbst zu filtern. Das bedeutet, dass Sie die Informationen, die Sie erhalten, eingrenzen können, bevor die Erfassung überhaupt beginnt. Dies ist sehr vorzuziehen und macht das Post-Capture-Filtern zu einem viel weniger langwierigen Prozess. Einige der Pre-Capture-Filter, die Sie verwenden können, lauten wie folgt:

So filtern Sie nach IP-Adresse:

$ sudo tcpdump host x.x.x.x

So filtern Sie nach Schnittstelle:

$ sudo tcpdump -i eth0

So filtern Sie nach Quelle:

$ sudo tcpdump src x.x.x.x

So filtern Sie nach Ziel:

$ sudo tcpdump dst x.x.x.x

So filtern Sie nach Protokoll:

$ sudo tcpdump icmp

Diese Liste deckt nicht alle verfügbaren Optionen ab, gibt Ihnen aber einen guten Ausgangspunkt. Sehen wir uns als Nächstes einige der anderen Möglichkeiten an, mit denen wir die Aufnahme manipulieren können.

Aufnahmen in eine Datei schreiben (pcap)

Aufgrund der Art der Fehlerbehebung finde ich es nützlich zu dokumentieren, was ich sehe, wenn ich mit tcpdump aufzeichne . Zum Glück tcpdump hat ein Ausgabedateiformat, das alle Daten erfasst, die wir sehen. Dieses Format wird als Paketerfassung bezeichnet Datei, auch bekannt als PCAP, und wird von verschiedenen Dienstprogrammen verwendet, darunter Netzwerkanalysatoren und tcpdump . Hier schreiben wir in eine PACAP-Datei namens output_file mit dem -w wechseln.

[root@server ~]# tcpdump -i enp0s8 -c100 -nn -w output_file
tcpdump: listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
102 packets received by filter
0 packets dropped by kernel

Pcap-Dateien lesen

Sie können PCAP-Dateien mit -r lesen schalten. Nur eine Warnung – wenn Sie versuchen, eine PCAP-Datei auf herkömmliche Weise zu lesen (cat , Vim usw.), erhalten Sie nicht lesbaren Kauderwelsch. Wenn Sie diese Programme verwenden möchten, um Ihre Ausgabe anzuzeigen, lesen Sie weiter.

$ tcpdump -r output_file

tcpdump in .txt schreiben

Wenn Sie Ihre Ausgabedatei auf herkömmliche Weise lesen möchten, müssen Sie tcpdump erneut ausführen , mit Ausnahme des -w Flagge. Unten sehen Sie, dass wir das Standardformat für die Ausgabe in eine Datei mit dem Dateinamen output.txt verwenden .

[root@server ~]# tcpdump -i enp0s8 -c100 -nn > output.txt
  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
  100 packets captured
  102 packets received by filter
  0 packets dropped by kernel

Beispiel

Bevor wir weitermachen, möchte ich das Szenario erläutern, das ich für den Rest dieses Artikels aufgestellt habe. Wir haben drei VMs, die im selben Netzwerk ausgeführt werden. Sowohl Client 1 als auch Client 2 pingen den Server ununterbrochen an. Wir erfassen den ICMP-Verkehr auf der Schnittstelle enp0s8 auf der Server-VM und filtern Sie dann nach Paketen von jedem Clientcomputer. Mir ist klar, dass dies eine ziemlich einfache Übung ist, aber die Prinzipien können auf komplexere reale Umgebungen angewendet werden.

  • Server - 172.25.1.5
  • Client 1 - 172.25.1.4
  • Client 2 - 172.25.1.7

Als nächstes sehen wir uns die beiden Befehle an, die zum Generieren unserer Captures verwendet werden:

  1. In PCAP-Datei schreiben - tcpdump -i enp0s8 -c100 -nn -w output_file
  2. In TXT-Datei schreiben - tcpdump -i enp0s8 -c100 -nn > output.txt

Der einzige bemerkenswerte Unterschied ist hier das Ausgabeformat. Sie sehen, dass wir Datenverkehr auf der Schnittstelle enp0s8 erfasst haben und dass wir die Erfassung auf 100 Pakete ohne Namens- oder Portauflösung beschränkt haben. Lassen Sie uns nun unsere Datei nur auf den Datenverkehr von Client 1 filtern.

Dazu verwenden wir eine von zwei Befehlszeichenfolgen (abhängig vom Dateiformat unserer Aufnahme):

PCAP-Ausgabe filtern - tcpdump -r output_file | grep -i 172.25.1.4

[root@server ~]# tcpdump -r output_file | grep -i 172.25.1.4
reading from file output_file, link-type EN10MB (Ethernet)
22:01:14.947643 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 109, length 64
22:01:14.947704 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 109, length 64
22:01:16.023097 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 110, length 64
22:01:16.023153 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 110, length 64
22:01:17.081338 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 111, length 64
22:01:17.081386 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 111, length 64
22:01:18.103740 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 112, length 64
22:01:18.103784 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 112, length 64
22:01:19.128568 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 113, length 64
22:01:19.128646 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 113, length 64
22:01:20.129531 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 114, length 64
22:01:20.129577 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 114, length 64
22:01:21.175573 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 115, length 64
22:01:21.175631 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 115, length 64
22:01:22.199852 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 116, length 64
22:01:22.199899 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 116, length 64
22:01:23.231032 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 117, length 64
22:01:23.231083 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 117, length 64
22:01:24.247585 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 118, length 64
22:01:24.247660 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 118, length 64
22:01:25.248875 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 119, length 64
22:01:25.248937 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 119, length 64
22:01:26.295889 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 120, length 64
22:01:26.295946 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 120, length 64
22:01:27.255274 ARP, Request who-has server.example.com tell 172.25.1.4, length 46

*Edited for length*

oder

TXT-Ausgabe filtern - cat output.txt | grep -i 172.25.1.4

[root@server ~]# cat output.txt | grep -i 172.25.1.4
12:03:56.653494 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 342, length 64
12:03:56.653534 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 342, length 64
12:03:57.674036 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 343, length 64
12:03:57.674089 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 343, length 64
12:03:58.701049 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 344, length 64
12:03:58.701107 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 344, length 64
12:03:59.721996 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 345, length 64
12:03:59.722134 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 345, length 64
12:04:00.746748 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 346, length 64
12:04:00.746805 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 346, length 64
12:04:01.774055 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 347, length 64
12:04:01.774130 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 347, length 64
12:04:02.793968 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 348, length 64
12:04:02.794012 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 348, length 64
12:04:03.846026 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 349, length 64
12:04:03.846082 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 349, length 64
12:04:04.918800 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 350, length 64
12:04:04.918850 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 350, length 64
12:04:05.930499 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 351, length 64
12:04:05.930543 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 351, length 64
12:04:06.954222 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 352, length 64
12:04:06.954269 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 352, length 64
12:04:07.990890 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 353, length 64
12:04:07.990937 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 353, length 64
12:04:09.002781 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 354, length 64
12:04:09.002842 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 354, length 64
12:04:10.032385 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 355, length 64
12:04:10.032451 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 355, length 64
12:04:11.055533 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 356, length 64
12:04:11.055583 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 356, length 64
12:04:12.074288 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 357, length 64

*Edited for length*

Um den Datenverkehr zu/von Client 2 zu überprüfen, müssen wir nur die IP-Adresse im grep ändern Anfrage. Diese Methode funktioniert für Hostnamen, Portnummern und alle anderen Schlüsselwörter, die Sie in der Erfassungsdatei finden. Dieses spezielle Beispiel zeigt die Leistungsfähigkeit der Vor- und Nachfilterung. Die Vorfilterung erfolgt, wenn wir nur über eine bestimmte Schnittstelle erfassen, und die Nachfilterung erfolgt, wenn wir ein grep anwenden Abfrage an die Capture-Datei.

Der Imbiss

Was ich zu kommunizieren hoffe, ist das tcpdump ist ein unglaublich mächtiges Werkzeug. Dennoch sind leistungsstarke Technologien oft mit Informationen durchsetzt, die möglicherweise nicht auf Ihre spezifischen Anforderungen zutreffen. Mit etwas Überlegung und Planung können Sie Ihre Erfassung vorfiltern, um die Menge des erfassten Datenverkehrs einzugrenzen, und dann ein intelligentes grep verwenden oder awk Abfrage in der Ausgabedatei, um schnell die Verkehrsinteraktionen zu finden, nach denen Sie suchen. Diese Strategien können bei korrekter Anwendung die Fehlerbehebungsbemühungen exponentiell beschleunigen. Nun hoffen wir, dass Sie dies nicht so bald in die Praxis umsetzen müssen.

[ Erfahren Sie mit diesem kostenlosen E-Book, wie Sie Ihr Netzwerk-Toolkit automatisieren können. ]


Linux
  1. Eine Anleitung für Anfänger zum Erstellen von Weiterleitungen in einer .htaccess-Datei

  2. Erstellen einer Webzertifikat-CSR-Datei.

  3. Ersetzen Sie Linien, die einem Muster entsprechen, durch Linien aus einer anderen Datei in der richtigen Reihenfolge?

  4. Wie kann ich eine Datei von Awk kategorisieren?

  5. Awk aus verschiedenen Linien?

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Reihenfolge der Umleitungen?

Lesen von Grep-Mustern aus einer Datei?

Erstellen eines Cloud-Servers aus einer ISO

CMakeLists-Datei aus vorhandenem Makefile erstellen

Erstellen Sie eine PEM aus einer PPK-Datei