Netzwerkverkehr mit tcpdump aufzeichnen

Was passiert eigentlich den lieben langen Tag im eigenen Netzwerk? Warum behauptet der Mail Client, dass er keine Verbindung zum Mailserver aufbauen kann? Warum fangen Video Streams im Gigabit Netz plötzlich an zu ruckeln? Wie wird eigentlich ein WLAN gefunden? Das sind alles Fragen, auf die sich pauschal nur mit „Kommt drauf an“ antworten lässt. Soll also genau festgestellt werden, was gerade los ist, muss der Netzwerkverkehr aufgezeichnet und anschließend ausgewertet werden. Im ersten Schritt wird gezeigt, wie der Verkehr mit unterschiedlichen Optionen aufgezeichnet werden kann. Dies kann direkt über den Router (OpenWRT, DD-WRT), einen Raspberry Pi oder einen beliebigen Rechner im Netzwerk geschehen. Im nächsten Schritt wird dann der aufgezeichnete Verkehr mit Filtermöglichkeiten ausgewertet um den Fragen eine Antwort zu geben.


Auf Debian basierten Linux Systemen, lässt sich zum Aufzeichnen von Traffic das Tool „tcpdump“ installieren.

sudo apt-get update && sudo apt-get install tcpdump

Zum Auswerten des aufgezeichneten Traffics eignet sich „WireShark“ ganz gut. Dies bietet zusätzlich eine recht ordentliche grafische Oberfläche, was die Arbeit doch deutlich einfacher macht.
Rein theoretisch lässt sich der Traffic auch direkt mit WireShark aufzeichnen. Aufgrund der Komplexität von WireShark ist die Gefahr nicht ganz unerheblich, auf einen sicherheitskritischen Bug zu stoßen. Ein weiterer Vorteil ist, dass zum Auswerten keine root Rechte benötigt werden und somit ein großer Riegel vorgeschoben wird.

Als Erstes wird die Netzwerkkarte benötigt, über welche gesnifft werden soll.

tcpdump –D

In der Regel fangen alle Aktionen mit den gleichen Parametern an.

sudo tcpdump –i eth0 ………….

tcpdump01

Hiermit wird immer der Verkehr der Netzwerkkarte „eth0“ gesnifft. Alternativ kann noch der Parameter „-n“ angehängt werden, damit IP Adressen nicht in Hostnames aufgelöst werden. Gleiches gilt für den Parameter „-q“. Damit werden weniger Informationen aufgezeichnet. Soll der Verkehr der eigenen Netzwerkkarte zu einem bestimmten Host (Rechner im eigenen Netzwerk oder Webserver) aufgezeichnet werden, kann der Parameter „host“ angegeben werden.

sudo tcpdump -i eth0 host www.foo.bar

tcpdump02

Hierbei wird der komplette Traffic innerhalb des Terminals angezeigt, sobald die gewählte Webseite aufgerufen wird. Wenn jedoch nur interessant ist, was über einen ganz bestimmten Port gesprochen wird, dann kommt der Parameter „port“ zum Einsatz.

sudo tcpdump -i eth0 port 80

Hiermit wird jeglicher HTTP Traffic mitgeschnitten. Damit jetzt nicht jede Ausgabe direkt auf dem Terminal erscheint, lässt sich jede Aktion aufzeichnen. Diese kann dann nachträglich mit WireShark analysiert werden. Dazu wird einfach der Parameter „-w /path/file.dump“ angehängt.

sudo tcpdump -i eth0 -w /tmp/sniffer.dump

Dieses Beispiel lauscht dem kompletten Netzwerkverkehr auf der Netzwerkkarte „eth0“ und schreibt alles in die Datei „/tmp/sniffer.dump“ Wie sich die erzeugte Datei mit WireShark verarbeiten lässt, zeige ich im nächsten Blogpost.