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

Nützliche tcpdump-Linux-Beispiele für den Netzwerkadministrator

Als Netzwerkadministrator gehört die Behebung von Netzwerkproblemen zu Ihrem Alltag. Ein unverzichtbares Werkzeug bei der Arbeit an netzwerkbezogenen Problemen ist der Linux-Befehl tcpdump.

Dieses Tutorial führt Sie durch einige Beispiele aus der Praxis, wie tcpdump Ihnen bei der Diagnose häufiger Netzwerkprobleme helfen kann. Am Ende dieses Tutorials werden Sie besser verstehen, wie Sie tcpdump nutzen können, um Ihre eigenen Netzwerkprobleme zu beheben.

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie einen Linux-Computer haben. Dieses Tutorial verwendet Ubuntu 20.04, aber jede moderne Linux-Distribution funktioniert.

Installieren des Linux-Tools tcpdump

Die meisten modernen Linux-Distributionen, insbesondere Server, verfügen bereits über tcpdump. Aber wenn nicht, keine Sorge, denn die Installation ist schweißfrei und schnell.

1. Melden Sie sich mit Ihrem bevorzugten SSH-Client bei Ihrem Linux-Computer an.

2. Überprüfen Sie zunächst, ob tcpdump bereits installiert ist, indem Sie den folgenden Befehl ausführen.

sudo apt list --installed tcpdump

Wenn tcpdump auf Ihrem Computer vorhanden ist, sehen Sie eine ähnliche Ausgabe wie im Screenshot unten.

Wenn tcpdump nicht existiert, erhalten Sie stattdessen das folgende Ergebnis.

3. Nachdem Sie bestätigt haben, dass tcpdump nicht installiert ist, führen Sie die folgenden Befehle aus, um es zu installieren.

# Update the package index
sudo apt update -y

# Install tcpdump
sudo apt install tcpdump -y

4. Überprüfen Sie abschließend die installierte tcpdump-Version, indem Sie den folgenden Befehl ausführen.

tcpdump --version

Zum jetzigen Zeitpunkt ist die neueste tcpdump-Version aus dem Ubuntu-Repository 4.9.3.

Paketdatenverkehr auf der Standardschnittstelle erfassen

Die Hauptanwendung von tcpdump ist das Erfassen von Paketen. Dank der pcap-Bibliothek kann das Tool Pakete von verschiedenen Netzwerktypen wie Ethernet, Wi-Fi, PPP usw. erfassen.

Die Syntax für die Grundform des tcpdump-Befehls lautet wie folgt.

tcpdump [options] [expression]

Wo:

  • options :Stellen Sie verschiedene tcpdump-Optionen ein. Optionen steuern, wie tcpdump die Pakete erfasst und anzeigt.
  • expression :Filtern oder spezifizieren Sie, welche Art von Datenverkehr erfasst werden soll. Ausdrücke werden später in diesem Tutorial ausführlicher behandelt.

Der grundlegendste Anwendungsfall für tcpdump besteht darin, den gesamten Datenverkehr auf Ihrer Standard-Netzwerkschnittstelle zu erfassen und die Daten auf der Standardausgabe anzuzeigen.

Führen Sie tcpdump aus Befehl ohne Optionen oder Ausdrücke, um den gesamten Datenverkehr auf Ihrer Standardschnittstelle zu erfassen.

sudo tcpdump

Sie müssen tcpdump als root oder mit dem Präfix sudo ausführen, da der Zugriff auf die Netzwerkschnittstellen eine privilegierte Operation ist.

Die tcpdump Das Tool erfasst Pakete und gibt die Ausgabe an das Terminal aus, wie unten gezeigt. Wenn Sie glauben, genug Pakete erfasst zu haben, drücken Sie CTRL+C um die Aufnahme zu stoppen.

Begrenzung der Paketerfassungsanzahl

Die tcpdump Der Linux-Befehl kann Ihr Terminal schnell mit Ausgaben überfordern, und es ist am besten, nur eine kleine Datenmenge auf einmal zu erfassen.

Sie können den -c einfügen Option zur Angabe der Anzahl der Pakete tcpdump sollte erfassen, bevor es beendet wird. Diese Option ist häufig anwendbar, wenn Sie nur eine kleine Datenmenge zur Analyse erfassen möchten.

Führen Sie dazu den folgenden Befehl aus und ändern Sie die Zahl nach dem -c Möglichkeit. Dieses Beispiel erfasst nur bis zu 10 Pakete und wird automatisch beendet.

sudo tcpdump -c 10

Erhöhung der Ausführlichkeit

Während der Paketerfassung stellen Sie möglicherweise fest, dass die Standardausgabe manchmal keine detaillierten Informationen enthält oder anzeigt. Glücklicherweise bietet Ihnen das Linux-Tool tcpdump drei Ausführlichkeitsstufen, die durch die Flags -v, -vv und -vvv dargestellt werden.

Wenn Sie diese Optionen verwenden, tcpdump parst und druckt viele weitere Informationen für jedes Paket, wie Lebensdauer (TTL), Identifikation usw.

# Verbose
sudo tcpdump -v

# Even more verbose
sudo tcpdump -vv

# Most verbose
sudo tcpdump -vvv

Für eine bessere Perspektive sehen Sie sich die folgenden Bilder an, in denen die Unterschiede zwischen -v im Detail verglichen werden und -vvv .

Erfassen von Paketen auf einer bestimmten oder allen Schnittstellen

Im vorherigen Beispiel hat tcpdump Pakete auf der Standard-Netzwerkschnittstelle erfasst, was bedeutet, dass Sie nur eine Schnittstelle im Auge haben. Aber was ist, wenn Sie mehrere Schnittstellen haben und den Datenverkehr auf einer bestimmten Schnittstelle oder auf allen Schnittstellen erfassen möchten?

Mit dem Linux-Befehl tcpdump können Sie mit dem Flag -i angeben, welche Netzwerkschnittstelle erfasst werden soll. Dieses Flag akzeptiert den Schnittstellennamen als Wert, was bedeutet, dass Sie zuerst den Schnittstellennamen kennen müssen.

1. Führen Sie den Befehl tcpdump mit der Option -D aus, um eine Liste aller verfügbaren Schnittstellen auf dem Computer zu drucken.

sudo tcpdump -D

Wie Sie unten sehen können, gibt es sieben Schnittstellen auf dieser Maschine. Ihr Computer verfügt möglicherweise über einen anderen Satz von Netzwerkschnittstellen. Dieses Beispiel konzentriert sich nur auf die Ethernet-Netzwerkschnittstellen, insbesondere eth0 und eth1.

2. Führen Sie als Nächstes den folgenden Befehl aus, um mit der Erfassung von Paketen auf der gewünschten Schnittstelle zu beginnen. Dieses Beispiel erfasst die eth1-Schnittstelle. Um die Anzahl der erfassten Pakete zu begrenzen, verwendet der folgende Befehl außerdem das Flag -c, gefolgt von der Anzahl.

sudo tcpdump -i eth1 -c 5

3. Anstatt eine Schnittstelle anzugeben, können Sie auch Pakete auf allen Schnittstellen gleichzeitig erfassen. Setzen Sie dazu any als Parameterwert für -i.

sudo tcpdump -i any -c 5

Warum sollten Sie Pakete auf allen Schnittstellen erfassen? Hier sind einige häufige Gründe.

Zum einen können Sie durch die Erfassung des Datenverkehrs auf allen Schnittstellen den gesamten Datenverkehr sehen, der durch Ihr System fließt, auch wenn er nicht für Ihr System bestimmt ist.

Außerdem können Sie sehen, welche Dienste und Protokolle Ihr Netzwerk passieren. Diese Informationen können beim Konfigurieren von Firewall-Regeln oder anderen Sicherheitsmaßnahmen hilfreich sein, insbesondere beim Aufbau neuer Server.

Hinzufügen von Filtern zum Linux-Befehl tcpdump

Das wilde Abfangen von Paketen ist nicht immer der beste Ansatz. Die Datenmenge kann unübersichtlich werden und Ihre Fehlersuche behindern. Wieso den? Weil Sie möglicherweise Datenverkehr erfassen, der für die Situation nicht relevant ist.

Filter sind in solchen Situationen hilfreich. Das tcpdump-Tool verfügt über viele integrierte Filter zum Erfassen bestimmter Arten von Datenverkehr. Sie können diese Filter kombinieren, um nur den relevanten Verkehr zu erfassen. Nachfolgend finden Sie einige Beispiele.

Filtern nach Portnummer

Wenn Sie beispielsweise ein SSH-Serverproblem beheben, interessieren Sie sich wahrscheinlich nicht für andere Arten von Datenverkehr, der durch Ihr Netzwerk fließt.

Führen Sie den folgenden Befehl aus, um den gesamten Datenverkehr für Port 22 zu erfassen , dem standardmäßigen SSH-Port.

sudo tcpdump -c 5 port 22

Wie Sie sehen können, hat das Tool nur Port 22-Verkehr als Quelle oder Ziel erfasst.

Wie wäre es, wenn Sie nur an HTTP-Verkehr interessiert sind? Sie müssen nur die Portnummer durch Ihren HTTP-Port ersetzen, der standardmäßig Port 80 ist.

sudo tcpdump -c 1 port 80

Hinweis:Das Tool tcpdump ist intelligent genug, um Dienstprotokollnamen anstelle von Portnummern zu erkennen. Anstatt beispielsweise Port 22 zum Filtern des SSH-Datenverkehrs anzugeben, können Sie stattdessen Port ssh angeben. Dasselbe gilt für Port 80 für HTTP-Datenverkehr, Port http.

Filtern nach Protokoll

Lassen Sie den Namen nicht tcpdump Sie glauben zu machen, dass es nur mit TCP-Verkehr funktioniert. Dieses Tool kann auch Nicht-TCP-Verkehr wie ICMP oder UDP erfassen.

Beispielsweise erfasst der folgende Befehl Pakete von jeder Schnittstelle, filtert aber nur UDP-Verkehr.

sudo tcpdump -i any -c 5 udp

Infolgedessen zeigen die folgenden Ergebnisse nur UDP-Verkehr, bei dem es sich scheinbar um Pakete über NTP- und DNS-Vorgänge handelt.

Was ist, wenn Sie nur den DNS-bezogenen Datenverkehr erfassen müssen? In diesem Fall können Sie die Filter udp kombinieren und port 53 . Auf diese Weise sollte die beabsichtigte Ausgabe nur DNS-bezogene Pakete anzeigen.

sudo tcpdump -i any -c 5 udp port 53

Dieses Mal haben Sie nur DNS-bezogenen Datenverkehr (A, PTR, AAA-Suche und Antwort) erfasst, der auf das UDP-Transportprotokoll beschränkt ist.

Vermuten Sie, dass in Ihrem Netzwerk ein Ping-Flood-Angriff stattfindet? Warum versuchen Sie nicht, die Quelle und das Ziel mit tcpdump zu finden ? Führen Sie dazu den folgenden Befehl aus, um auf jeder Schnittstelle auf ICMP-Verkehr zu lauschen.

Die -n -Flag verhindert, dass tcpdump versucht, die Hostnamen aufzulösen, und zeigt stattdessen die IP-Adressen an. In solchen Situationen kann die Umgehung der Namensauflösung die Leistung verbessern.

sudo tcpdump -n -i any icmp

Sie haben vielleicht schon bemerkt, dass die tcpdump Filter sind leistungsstark und flexibel. Durch die Kombination verschiedener Filter können Sie den für Ihr gewünschtes Ergebnis relevanten Traffic erfassen.

Weitere Informationen zu tcpdump-Filtern finden Sie auf der tcpdump-Manpage.

Erfasste Pakete in einer Datei auf der Festplatte speichern

Das spontane Anzeigen von Paketerfassungen auf dem Bildschirm ist für kurze Erfassungen in Ordnung. Wenn Sie jedoch riesige Paketerfassungen generieren, ist die Bildschirmausgabe nicht mehr praktikabel. Sie benötigen eine Möglichkeit, die erfassten Daten zur späteren Analyse oder Weitergabe in eine Datei zu exportieren.

Glücklicherweise unterstützt tcpdump die Möglichkeit, erfasste Pakete in einer Datei auf der Festplatte zu speichern. Sie müssen die Option -w gefolgt vom Dateipfad angeben.

Führen Sie den folgenden Befehl aus, um den gesamten Datenverkehr, der durch Ihr System fließt, in einer Datei namens /tmp/capture.pcap zu speichern. Dieser Befehl lauscht auf jeder Schnittstelle und erfasst maximal 20 Pakete, bevor er automatisch beendet wird.

sudo tcpdump -i any -w /tmp/capture.pcap -vv -c 20

Jetzt haben Sie die Paketerfassungsdatei und können die Datei bei Bedarf wieder in das Terminal einlesen. Um eine Paketerfassung aus einer Datei zu lesen, fügen Sie den -r hinzu Option gefolgt vom Dateinamen der Paketerfassung.

sudo tcpdump -r /tmp/capture.pcap

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, den Netzwerkverkehr mit dem Linux-Befehl tcpdump zu erfassen und zu analysieren. Sie haben allgemeine Optionen und kombinierte Filter verwendet, um genaue Paketerfassungen zu generieren. Sie haben das Tool auch verwendet, um Pakete zur späteren Analyse in einer Datei zu erfassen und die Datei wieder in das Terminal einzulesen.

Das tcpdump-Linux-Tool ist in der Toolbox jedes Netzwerkadministrators unverzichtbar. Das Wissen, das Sie in diesem Lernprogramm erworben haben, hilft Ihnen, Netzwerkprobleme effektiv und effizient zu beheben.


Linux
  1. 16 nützliche „cp“-Befehlsbeispiele für Linux-Anfänger

  2. 9 Nützliche Beispiele für den Split-Befehl in Linux

  3. So verwenden Sie den id-Befehl unter Linux:5 nützliche Beispiele

  4. Nützliche Linux-Dig-Beispiele für den Netzwerkadministrator

  5. Beispiele für die Verwendung des Befehls tcpdump für die Netzwerkfehlerbehebung

40 Nützliche Beispiele für Linux-PS-Befehle für angehende SysAdmins

Die 50 nützlichen Linux-IP-Befehle für Netzwerkadministratoren

10 Nützliche Beispiele für den Sort-Befehl in Linux

15 super nützliche Beispiele für den Find-Befehl in Linux

Effektive Linux-Port-Scans für den Netzwerkadministrator

10 Beispiele für Linux-brctl-Befehle für die Ethernet-Netzwerkbrücke