cherezoff - stock.adobe.com

Troubleshooting für Netzwerkprobleme mit netstat und ss

Wir zeigen in diesem Beitrag, wie mit netstat und ss in Linux Infos über die aktiven Sockets eines Computers und sonstige Informationen zum Netzwerk abgerufen werden können.

Wenn es darum geht, Informationen auf Linux-Computern auszulesen, sind die beiden Tools netstat (network statistics) und ss (socket statistics) als Basiselemente durchaus interessant. Generell handelt es sich bei ss um das neue netstat.

Es gibt zahlreiche weitere Tools, die ebenfalls viele Funktionen bieten, aber netstat und ss sollten zu den Standardwerkzeugen jedes Admins gehören. Neben nmap bietet netstat wichtige Informationen zu den Routing-Tabellen, den offenen Ports sowie dem TCP- und UDP-Datenverkehr auf dem Computer. Netstat ist Bestandteil der Net-Tools, zu diesen gehören auch arp, ifconfic, iptunnel, nameif und route.

Auf vielen Linux-Systemen, zum Beispiel Kali, sind die Net-Tools bereits installiert. Wo sie fehlen, lassen sich diese leicht über die Paketquellen nachinstallieren, beispielsweise mit sudo apt install net-tools. Die Net-Tools sind mittlerweile teilweise auch etwas veraltet. Neuere Sammlungen wie iproute2 bieten hier erweiterte und modernere Werkzeuge wie ss. Auch dieses Tool gehört zum Standardumfang von Kali, lässt sich auf anderen Systemen aber leicht installieren, oder ist bereits vorhanden.

Sockets sind wichtig für das Troubleshooting: ss und netstat in der Praxis

Netstat und ss sind vor allem im Troubleshooting interessant, da die Tools detaillierte Informationen darüber bieten, wie die Kommunikation im Netzwerk abläuft und mit welchen Geräten ein Linux-Computer kommuniziert. Wichtige Informationen in diesem Zusammenhang sind zum Beispiel auf welchen Ports einzelne Prozesse laufen, wartet ein Serverprozess auf dem richtigen Port auf Anfragen oder ist auch das Loopback-Netzwerk aktiv. Im Vergleich zu ss gilt netstat nicht nur als veraltet, sondern auch als eher langsamer in der Informationsbeschaffung. Allerdings sind beide Tools generell gleichwertig, weil die Unterschiede kaum ins Gewicht fallen.

Mit ss ohne weitere Parameter zeigt das Tool die Liste aller Socket-Verbindungen an. Häufig erfolgt die Ausgabe dieser Daten für eine spätere Analyse in eine Datei, zum Beispiel mit ss >> analyse_pc_1. Der Befehl ss -l zeigt die aktuell lauschenden Sockets auf einem Linux-Computer an.

aktuelle Sockets
Abbildung 1: Zeigen Sie die aktuellen Sockets auf einem Linux-Computer mit ss an.

Soll die Ausgabe nach TCP, UDP oder Unix gefiltert werden, lässt sich das leicht mit -t, -u oder -x erreichen.

Ähnlich wie netstat kann auch ss die Prozess-IDs und Programme anzeigen, welche die Verbindung nutzen. Dazu kommt der Parameter -p zum Einsatz. Für detaillierte Ausgaben, einschließlich Timing-Informationen und Socket-Optionen, ist die Option -e optimal.

Zusätzlich erlaubt ss das Filtern von Verbindungen nach Zuständen wie ESTABLISHED, FIN-WAIT-1, CLOSED und weiteren. Daher ist ss besonders effizient bei der Verarbeitung einer großen Anzahl von Verbindungen und bietet eine große Auswahl an Filteroptionen und Detailinformationen. Im Vergleich zu netstat bietet ss oft eine schnellere und detailliertere Analyse, allerdings auch nicht immer und vor allem nur bei stark ausgelasteten Systemen.

Netstat hat noch immer seine Daseinsberechtigung

Die Unterschiede zwischen ss und netstat sind nicht so gewaltig, dass sich ein Umstieg lohnt. Oft kommen beide Tools parallel zum Einsatz. Der einfachste Weg, eine Liste aller aktiven Verbindungen zu erhalten, ist die Ausführung des Befehls netstat ohne zusätzliche Optionen.

ausgeführter netstat-Befehl
Abbildung 2: Der Befehl netstat zeigt die Protokollstatistik und aktuelle TCP/IP-Netzwerkverbindungen an.

Um nur TCP-Verbindungen anzuzeigen, verwendet netstat ebenfalls den Parameter -t. Das gilt auch für UDP (-u) oder Unix (-x). Mit dem Parameter -p listet netstat die Prozess-IDs und die zugehörigen Programme, welche die jeweilige Verbindung nutzen. Auch das ist identisch mit ss.

Anzeige der Netzwerkverbindungen
Abbildung 3: Zeigen Sie die Netzwerkverbindungen in Linux mit netstat an.

Der Listenmodus zeigt alle Sockets an, die im Listening-Zustand sind. Der Befehl dazu lautet netstat-l und entspricht ebenfalls dem von ss. Die Optionen lassen sich kombinieren, um die Ausgabe weiter zu filtern. Zum Beispiel zeigt der Befehl netstat -lt alle im Zustand Listening befindlichen TCP-Verbindungen an. Genauso funktioniert das auch mit ss.

Netstat kann Netzwerkstatistiken wie gesendete und empfangene Pakete anzeigen. Das erledigt der Parameter -s. Der Parameter -c bietet eine kontinuierliche Ausgabe. Diese Option ist nützlich für die Echtzeitüberwachung von Netzwerkverbindungen, welche vor allem beim Troubleshooting interessant sind.

Die wichtigsten Unterschiede zwischen netstat und ss

Generell sind ss und netstat beides Werkzeuge zur Netzwerkanalyse, jedoch mit einigen Unterschieden. Zum Beispiel bietet ss in der Regel eine schnellere Ausführung als netstat, insbesondere bei einer großen Anzahl von Netzwerkverbindungen. Das liegt daran, dass ss direkten Zugriff auf die Kernel-Netzwerkstrukturen hat, während netstat über die /proc-Dateisystem-API geht. Ein weiterer Unterschied liegt in der Flexibilität der Filterung und Anzeige der Netzwerkdaten. Hier hat ss erweiterte Filtermöglichkeiten und kann Zustandsinformationen von Sockets besser darstellen, beispielsweise PACKET, TCP, UDP, DCCP und RAW. Darüber hinaus gibt es Informationen zu Unix-Domain-Sockets sowie sämtliche über Netzwerkverbindungen, Netzwerkprotokollstatistiken und Linux-Socket-Verbindungen.

Grundsätzlich ist netstat einfacher zu bedienen und zu erlernen, was es für weniger erfahrene Administratoren benutzerfreundlicher macht. Allerdings hängt das vom Einsatzgebiet ab und viele Parameter sind identisch. Es gibt im Internet zahlreiche Quellen, welche die Fehlerbehebung mit netstat umfassend dokumentieren. Allerdings bietet netstat weniger erweiterte Filter- und Anzeigeoptionen und ist bei vielen Netzwerkverbindungen etwas langsamer.

Praxisbeispiele für Troubleshooting mit ss und netstat

Um die Bandbreitennutzung einer bestimmten Verbindung zu überwachen, ist der folgende Befehl sinnvoll:

ss -i „src :80“

Der Befehl zeigt detaillierte Informationen über alle Verbindungen, die vom Port 80 stammen, einschließlich der verwendeten Bandbreite und des Zustands der Verbindung. Das funktioniert auch für alle anderen Ports.

Zur Ermittlung von IPs, die möglicherweise den Webserver übermäßig nutzen, lässt sich netstat mit grep und awk kombinieren:

netstat -n | grep „:80“ | awk „{print $5}“ | cut -d: -f1 | sort | uniq -c | sort -n

Der Befehl listet die Anzahl der Verbindungen pro IP-Adresse auf, die auf Port 80 zugegriffen haben, sortiert nach der Anzahl der Verbindungen.

Ein plötzlicher Anstieg der CPU-Auslastung könnte durch eine fehlerhafte Netzwerkanwendung verursacht werden. Der folgende ss-Befehl kann dabei helfen, den schuldigen Prozess zu identifizieren:

ss -pl | grep „ESTAB“

Durch die Angabe von -p werden die Prozess-IDs und Namen der Anwendungen angezeigt, die eine etablierte Netzwerkverbindung haben. Mit grep „ESTAB“ filtert man dann nach den etablierten Verbindungen.

Wenn überprüft werden soll, ob eine Verbindung zu einem bestimmten Ziel-Host auf einem spezifischen Port möglich ist, kann der folgende netstat-Befehl genutzt werden:

netstat -an | grep „192.168.1.1:22“

Der Befehl prüft, ob eine Verbindung zum Host 192.168.1.1 auf Port 22 (SSH) existiert. Zum Auffinden von ungewöhnlichen Verbindungen, die potenziell Daten aus dem Netzwerk leaken könnten, eignet sich der folgende Befehl:

ss -tpn „not dst net 192.168.1.0/24 and not dst net 10.0.0.0/8“

Der Befehl filtert Verbindungen heraus, die nicht an die angegebenen internen Netzwerke adressiert sind.

Erfahren Sie mehr über Serverbetriebssysteme