tcpdump unter Linux ein Klassiker, wenn es um die erste Analyse von Problemen mit Paketen geht. Den Traffic von Paketen mitschneiden, um deren Verlauf zu verfolgen und Netzwerkanomalien aufzuspüren.

Mit dem Paket tcpdump kann dies unter Linux durchgeführt werden. Mächtig und umfangreich können nicht nur tcp, sondern auch udp Pakete mitgeschnitten werden. Um eine spätere Analyse, wie z.B. über Wireshark zu ermöglichen, kann aus dem Mitschnitt direkt ein dump erzeugt werden.

Info: tcpdump muss als Administrator ausgeführt werden!

 

Im folgenden wird ein dump erstellt, welcher ein bestimmtes Interface (Schnittstelle) mitschneidet. Das gewählte Interface ist jenes, über welches der gesamte Traffic des Servers fließt. Das bedeutet, dass der dump unter Umständen und je nach Laufzeit 1-2 GB umfassen kann.

 

Los gehts!
In manchen Distributionen ist das Paket bereits enthalten. Falls nicht, kann das Paket kann mit dem Befehl apt install tcpdump installiert werden.

Aus gründen der Übersicht lege ich im root Verzeichnis ein neues Verzeichnis namens „tcpdump“ an. Sobald die Durchführung des Mitschnitts erfolgt ist, kann das Verzeichnis wieder gelöscht werden.

Tipp: Beim Versuch, den dump im Verzeichnis /tmp anzulegen, kam es öfters zu Problemen.

 

Anschließend in das Verzeichnis /tcpdump navigieren und folgenden Befehl ausführen: tcpdump -i vmbr0 -s 0 -w capture.cap. Mit diesem Befehl wird der Sniff gestartet und unformatiert gespeichert.
Dabei ist -i vmbr0 das Interface, -s 0 die Anzahl der Bytes je Paket und -w capture.cap der Name des dumps.

 

Die Tabelle zeigt die wichtigsten Parameter für die Ausführung des Sniffs.

FlagBedeutung
-DTipp: Beim Versuch, den Dump im Verzeichnis /tmp anzulegen, kam es öfters zu Problemen.
-i INTERFACEwelche Netzwerkschnittstelle gesnifft werden soll. Wenn dies nicht angegeben wird, sucht sich tcpdump eine aus. Dies ist meist die erste LAN-Karte, die es findet.
-nkeine Hostnamen auflösen, genauso wenig sollen Portnummern durch ihre Dienste ersetzt werden.
-c ANZAHL Wenn diese Flag benutzt wird, beendet sich tcpdump automatisch, nachdem es die angegebene Anzahl Pakete mitgeschnitten hat, wie angegeben.
-qloggt weniger Protokoll-Informationen. Die Ausgabe wird also kleiner.
-v,-vv oder -vvvJe mehr v's angegeben sind, desto mehr Informationen über Pakete wird tcpdump speichern.
-s ANZAHLWieviele Bytes je Paket mitgeschnitten werden sollen. Standardmäßig sind dies 65535. Dabei gilt es jedoch zu bedenken, dass dadurch die Warteschlange voll werden kann und dies in bestimmten Situationen eventuell zum Verlust von Paketen führen kann. Man sollte am besten also nur soviel von Paketen mitschneiden, wie man benötigt. Die Angabe -s 0 setzt die Paketmitschnitt-Länge aus Gründen der Abwärtskompatibilität zu älteren Versionen von tcpdump auf den Standardwert von 65535 Bytes.
-w DATEINAMESchreibt die Pakete in die angegebene Datei, anstatt sie zu parsen und den Inhalt formatiert auf dem Bildschirm auszugeben. Die Pakete, die in die Datei geschrieben wurden, sind wie bereits gesagt unformatiert, also raw-packets. Man kann sie deswegen nicht mit cat oder less lesen. Jedoch kann man sie mit dem -r Flag parsen.
-r DATEINAMEParst, formatiert und gibt die Pakete, die mit der -w Flag in eine Datei geschrieben wurden, in der Konsole aus.

 

Durch geschicktes Filtern können z.B. bestimmte Ports mit bestimmten Quell-IPs bzw. Ziel-IPs mitgeschnitten werden. Die Tabelle zeigt die wichtigsten Filter.

OptionBedeutung
host IP-ADRESSEEs werden nur Pakete mitgeschnitten, die entweder als Quelle oder als Ziel die angegebene IP-Adresse besitzen. Anstelle einer IP-Adresse kann auch ein Hostname angegeben werden (aber nur, wenn nicht das -n Flag (s.o.) benutzt wird).
port 0-65535Schneidet Pakete mit, die entweder auf Quell- oder auf Ziel-Seite den angegebenen Port besitzen
portrange 0-65535Schneidet Pakete mit, die entweder auf Quell- oder auf Ziel-Seite einen Port in dem angegebenen Portbereich besitzen
src HOST, PORT oder PORTRANGEEs werden nur Pakete mitgeschnitten, die als Quelle den angegebenen Wert besitzen
src HOST, PORT oder PORTRANGEEs werden nur Pakete mitgeschnitten, die als Ziel den angegebenen Wert besitzen
proto ETHER, FFDI, TR, WLAN, IP, IP6, ARP, RARP, DECNET, TCP und UDPNetzwerkprotokoll, in dem Pakete mitgeschnitten werden sollen

 

Nach der Eingabe des Befehls und dem Start des Sniffs, sind 10 – 15 Minuten Mitschnitt zu empfehlen. Je nach Problemfall und Umgebung etwas mehr.
Ist zum Beispiel ein Mitschnitt erforderlich, um den Paketfluss von UDP Paketen zu analysieren und an der DDoS-Protection zu optimieren, ist ein Mitschnitt von circa 20 – 30 Minuten passend.

Tipp: Der Mitschnitt sollte möglichst zu einem Zeitpunkt erfolgen, zu welcher die Problematik am stärksten auftritt. Nur so kann am besten ermittelt werden, ob tatsächlich eine Netzwerkanomalie vorliegt und woran es genau liegt.

 

In der Konsole sieht der Vorgang wie folgt aus (Mit STRG+X wird der Mitschnitt beendet):

kraus@node3:/# mkdir /tcpdump
kraus@node3:~$ cd /tcpdump/
kraus@node3:/tcpdump$ sudo tcpdump -i vmbr0 -s 0 -w capture.cap
[sudo] Passwort für kraus:
tcpdump: listening on vmbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C872407 packets captured
872762 packets received by filter
0 packets dropped by kernel
kraus@node3:/tcpdump$

 

Der Mitschnitt lief circa 10 Minuten und ist 432MB groß.

kraus@node3:/tcpdump$ ls -lh
insgesamt 432M
-rw-r--r-- 1 root root 432M Sep 26 10:41 capture.cap

Anschließend kann der Mitschnitt heruntergeladen werden und z.B. mit Wireshark analysiert werden.

Kategorien: Anleitungen