tirachard - stock.adobe.com
Netzwerkaktivität mit netstat, sockstat und lsof analysieren
Mit den Open-Source-Tools netstat und sockstat (ss) und lsof lassen sich Netzwerkverbindungen, offene Ports und Prozesse auf Linux-Systemen detailliert überwachen und auswerten.
Die Überwachung laufender Netzwerkprozesse ist eine der grundlegenden Aufgaben in der System- und IT-Sicherheitsadministration. Werkzeuge wie netstat und je nach Plattform sockstat beziehungsweise ergänzende Prozesswerkzeuge liefern Einblick in die aktuelle Netzwerkaktivität eines Systems und zeigen offene Ports, Verbindungen und Prozesszuordnungen. In der Praxis helfen diese Werkzeuge dabei, Kommunikationspfade transparent zu machen, Angriffsflächen zu minimieren und Engpässe oder Fehlkonfigurationen frühzeitig zu erkennen.
Aus technischer Sicht lesen diese Tools Statusinformationen aus dem Betriebssystem aus (etwa zu Sockets, Verbindungszuständen und Routing) und bereiten sie für die Fehlersuche und Dokumentation auf. Während das eine Tool eher den Gesamtzustand des Netzwerk-Stacks visualisiert, fokussieren andere stärker auf die Zuordnung Port-Prozess-Benutzer. In Kombination entsteht so ein vollständiger Überblick vom offenen Port bis zur verantwortlichen Anwendung. Die Details und konkreten Nutzungsschritte unterscheiden sich je nach Betriebssystem und werden in den folgenden Abschnitten erläutert.
Netstat unter Ubuntu im praktischen Einsatz
Netstat gehört zum Paket net-tools und ist auf vielen Systemen standardmäßig installiert oder lässt sich bei Bedarf über
sudo apt install net-tools
nachrüsten. Das Tool existiert bereits seit den frühen Unix-Versionen und wurde über Jahrzehnte zu einem Standardwerkzeug für Administratoren. Unter Ubuntu liefert netstat Ausgaben über offene Netzwerkverbindungen, lauschende Ports, Schnittstellenstatistiken und Routing-Tabellen.
Ein klassischer Überblick über alle aktiven Verbindungen und offenen Ports erfolgt mit
sudo netstat -tulpen
Jede Option hat eine konkrete Funktion:
-t zeigt TCP-Verbindungen, -u UDP-Verbindungen, -l lauschende Dienste, -p die Prozess-ID samt Programmnamen, -e erweiterte Details wie Benutzerzuordnung, -n die numerische Darstellung von IP-Adressen und Ports. Der Befehl liefert damit eine tabellarische Übersicht über alle Sockets, sortiert nach Protokoll, lokalen und entfernten Adressen sowie Verbindungszustand.
Zum Beispiel auf einem Server im Netzwerk 10.0.0.0/16, dessen Domänencontroller und DNS-Dienst die IP 10.0.1.230 trägt, würde der Befehl etwa zeigen:
tcp 0 0 10.0.1.230:389 10.0.0.15:49830 ESTABLISHED 0 16234 1120/slapd
Die Ausgabe belegt, dass der LDAP-Dienst des Domänencontrollers auf Port 389 aktiv ist und eine bestehende Verbindung zu einem Client unter 10.0.0.15 hält. Administratoren nutzen netstat häufig, um Dienste zu identifizieren, die ungewollt externe Verbindungen annehmen. Dazu eignet sich:
sudo netstat -tulpen | grep -v 127.0.0.1
Die Ausgabe listet alle Ports, die nicht nur an der lokalen Loopback-Adresse gebunden sind. Dienste, die an 0.0.0.0 lauschen, akzeptieren Verbindungen über jede Netzwerkschnittstelle – ein potenzielles Sicherheitsrisiko.
Mit
netstat -r
wird die Routing-Tabelle angezeigt. Diese gibt Aufschluss darüber, über welches Gateway Datenpakete in andere Netze gelangen. Ein weiterer praxisrelevanter Befehl ist
netstat -s
Er zeigt detaillierte Statistiken zu den verwendeten Protokollen. Hier lässt sich etwa erkennen, wie viele TCP-Verbindungen im Zustand TIME_WAIT verbleiben oder ob UDP-Pakete aufgrund von Buffer-Überläufen verworfen wurden. Diese Daten sind für die Kapazitätsplanung und Fehlersuche entscheidend.
Netstat unter Windows im Vergleich
Unter Windows funktioniert netstat nahezu identisch, wenn auch mit teils anderen Parametern. Ein Administrator ruft mit
netstat -a
alle aktiven Verbindungen und lauschenden Ports ab. Der Parameter -b zeigt zusätzlich an, welche ausführbare Datei (also welcher Prozess) den Port verwendet. Das ist besonders hilfreich, wenn verdächtige Verbindungen auftreten oder ein unbekannter Prozess ungewöhnliche Ports belegt.
Mit
netstat -o
wird die Prozess-ID (PID) angezeigt, die jeder Verbindung zugeordnet ist. Die Kombination
netstat -ano
liefert eine numerische Darstellung sämtlicher Adressen und Ports inklusive PID. Unter Linux entspricht dieser Befehl inhaltlich
sudo netstat -tulpen
Mit
netstat -r
kann die Routing-Tabelle geprüft werden, während
netstat -s -p icmp
Protokollstatistiken für ICMP anzeigt – ein nützliches Werkzeug bei der Diagnose von Ping- oder Routing-Problemen.
Windows bietet außerdem in der PowerShell die modernere Variante
Get-NetTCPConnection
die ähnlich wie ss unter Linux direkt aus dem Netzwerkstack liest. Die parallele Nutzung von netstat in Linux und Windows erlaubt eine einheitliche Analyse in gemischten Netzwerken, was insbesondere in Domänen mit Windows-Servern und Linux-Gateways nützlich ist.
sockstat/lsof: präzise Prozessanalyse über offene Sockets
Während netstat den Gesamtzustand des Netzwerks beschreibt, richtet den Blick auf die zugrunde liegenden Prozesse. sockstat (ss) ist eng an FreeBSDs Socket-Subsystem gebunden. Unter Linux gibt es keinen 1:1-Port, da das Kernel-Interface und /proc/net/* anders funktionieren. Deshalb setzen Linux-Distributionen stattdessen auf ss, netstat oder lsof. Das Tool zeigt detailliert an, welcher Benutzer und welcher Prozess welchen Port verwendet, welche Dateideskriptoren geöffnet sind und in welchem Zustand sich eine Verbindung befindet.
Das Linux-Werkzeug lsof (list open files) verfolgt einen allgemeineren Ansatz. Es zeigt alle geöffneten Dateideskriptoren im System. Dazu zählen reguläre Dateien, Pipes, Geräte, und eben auch Netzwerk-Sockets, da diese unter Unix als Dateien behandelt werden. Wenn lsof mit der Option -i oder -i -nP aufgerufen wird, filtert es die Ausgabe auf Internet- oder Unix-Domain-Sockets. Die Informationen stammen aus /proc und aus Kernel-Tabellen, die über Systemcalls ausgelesen werden.
Auf Linux-Systemen lassen sich ss und lsof parallel nutzen, um ein vollständiges Bild der Netzwerkaktivität zu erhalten. ss liefert detaillierte technische Informationen direkt aus dem Kernel, etwa zu Zuständen von TCP-Verbindungen, Puffergrößen oder Warteschlangen. lsof ergänzt diese Daten, indem es zeigt, welcher Prozess einen bestimmten Port geöffnet hat, unter welchem Benutzer er läuft und welche Dateideskriptoren dabei verwendet werden. Beide Werkzeuge zusammen geben also nicht nur Auskunft über aktive Verbindungen, sondern auch darüber, welche Programme diese tatsächlich halten.
lsof in der Praxis
In der Praxis entsteht daraus ein sehr präzises Instrument zur Überwachung von Netzwerkdiensten und zur Erkennung verdächtiger Aktivitäten.
Der einfache Aufruf
sudo lsof -i
liefert eine Übersicht über alle offenen Internet- und Unix Domain Sockets. Jede Zeile enthält Prozessname, Prozess-ID (PID), Benutzer, Protokoll, lokale und entfernte Adresse sowie den Status der Verbindung. kann die Ausgabe enthalten:
In Abbildung 3 sind verschiedene Daten zu sehen. Die Ausgabe zeigt unten die offenen TCP-Sockets des MongoDB-Dienstes. Jede Zeile steht für eine aktive Verbindung oder einen lauschenden Port. Die erste Spalte enthält den Prozessnamen, hier mongod, also den Hauptprozess des MongoDB-Datenbankservers. In der zweiten Spalte steht die Prozess-ID (PID), in diesem Fall 1168. Damit lassen sich die Verbindungen eindeutig dem laufenden Dienst zuordnen. Die dritte Spalte zeigt den Benutzer, unter dem der Prozess läuft, hier mongodb. Dadurch ist erkennbar, dass der Dienst unter einem dedizierten, nicht privilegierten Systemkonto arbeitet – eine empfohlene Sicherheitsmaßnahme.
Die vierte Spalte mit der Endung u beschreibt den Dateideskriptor, also die interne Nummer, über die der Prozess auf den Socket zugreift. Jede Verbindung oder jeder Listener erhält einen eigenen Deskriptor. In der fünften Spalte steht das verwendete Protokoll, hier überall IPv4. Die sechste und siebte Spalte (11493 0t0) enthalten interne Kernelreferenzen und Flags, die für die Analyse meist unerheblich sind. Danach folgt die Protokollart, hier TCP, und die genaue Verbindung.
Die erste Zeile
mongod 1168 mongodb 9u IPv4 11493 0t0 TCP *:27017 (LISTEN)
zeigt, dass der MongoDB-Server auf allen IPv4-Adressen (*) auf Port 27017 lauscht. Das ist der Standardport für MongoDB-Verbindungen. Alle folgenden Zeilen beschreiben aktive ESTABLISHED-Verbindungen zu diesem Port, beispielsweise:
mongod 1168 mongodb 36u IPv4 12955 0t0 TCP localhost:27017->localhost:51670 (ESTABLISHED)
Das bedeutet, dass sich ein lokaler Client-Prozess über Port 51670 mit dem MongoDB-Server auf Port 27017 verbunden hat. Die Verbindung läuft ausschließlich über localhost, also intern auf demselben System.
Jede Zeile mit (ESTABLISHED) steht für eine aktive Session zwischen dem MongoDB-Dienst und einem internen Client. Das können Anwendungen, Verwaltungswerkzeuge oder Monitoring-Agenten sein, die über die lokale Loopback-Adresse auf die Datenbank zugreifen. Die Vielzahl an gleichzeitigen Verbindungen (Ports 51670 bis 49938) weist darauf hin, dass mehrere Prozesse oder Threads parallel mit der Datenbank interagieren. In produktiven Systemen ist das normal, da jede Anfrage einen eigenen Socket nutzt.
Der Befehl
sudo lsof -i -nP
deaktiviert die Namensauflösung. Das ist wichtig, wenn DNS selbst untersucht wird, um Rückabfragen zu vermeiden, die das Ergebnis verfälschen könnten. Sollen nur lauschende Verbindungen angezeigt werden, genügt
sudo lsof -i -sTCP:LISTEN
Damit lassen sich alle Prozesse auflisten, die Ports geöffnet halten. Administratoren erkennen so, ob unerwartete Programme Verbindungen akzeptieren, zum Beispiel wenn ein Webserver oder ein veralteter Dienst unbeabsichtigt aktiv ist. Zur Analyse bestimmter Protokolle kann man filtern:
sudo lsof -i udp
zeigt alle UDP-Sockets, zum Beispiel den DNS-Dienst auf Port 53. Wer gezielt nach diesem Port sucht, nutzt
sudo lsof -i :53
Auch die Zuordnung zu bestimmten Benutzern ist möglich:
sudo lsof -u root
listet alle offenen Dateien und Sockets von Prozessen, die mit Root-Rechten laufen. Damit lässt sich schnell kontrollieren, ob privilegierte Prozesse ungewollte Netzwerkverbindungen halten. Für eine kombinierte Ansicht lokaler und verbundener Sockets empfiehlt sich
sudo lsof -i -U
Dies zeigt nicht nur TCP- und UDP-Verbindungen, sondern auch lokale Unix Domain Sockets, zum Beispiel die Kommunikation zwischen Systemdiensten wie D-Bus, CUPS oder systemd.
lsof und ss im Vergleich
lsof und ss erfüllen ähnliche Aufgaben, unterscheiden sich aber in ihrer Perspektive. ss ist Teil des Pakets iproute2 und arbeitet kernelbasiert. Es analysiert Netzwerkzustände sehr effizient, zeigt Verbindungszustände, Queues und Performanceparameter in Echtzeit. Der Befehl
ss -tulpn
listet alle TCP- und UDP-Verbindungen samt Prozess-IDs und ersetzt viele klassische netstat-Funktionen.
lsof hingegen nutzt Informationen aus dem Verzeichnis */proc*, also aus der Prozesssicht des Systems. Dadurch zeigt es zusätzlich, welche Dateien, Bibliotheken und Devices ein Prozess geöffnet hat, nicht nur die Netzwerkverbindungen. Für Administratoren bietet es also einen ganzheitlichen Blick: Welche Prozesse kommunizieren, welche Ports sie belegen und welche Ressourcen sie dabei verwenden.
Unter Linux ergänzen sich beide Werkzeuge optimal. ss liefert die schnelle technische Analyse auf Protokollebene, lsof zeigt, welcher Benutzer und Prozess dahintersteht. Diese Kombination erlaubt es, Netzwerkprobleme gezielt einem Prozess zuzuordnen oder ungewöhnliche Aktivitäten eindeutig zu identifizieren.
Kombination von netstat und lsof in der Praxis
Effektiv wird die Analyse, wenn netstat und lsof gemeinsam eingesetzt werden. netstat verschafft den Überblick, lsof liefert die Tiefe. Ein Administrator kann zunächst mit
sudo netstat -tulpen | grep 10.0.1.230
alle aktiven Verbindungen und offenen Ports des Servers erfassen. Anschließend zeigt
sudo lsof -i -nP | grep 8080
welcher Prozess den betreffenden Port nutzt. Eine unerwartete Verbindung auf Port 8080 lässt sich so direkt einem Programm zuordnen und überprüfen. Bei Sicherheitsanalysen ist diese Kombination besonders aufschlussreich. netstat zeigt etwa, dass auf Port 22 ein Dienst lauscht, lsof belegt, dass es sich tatsächlich um den Prozess sshd handelt. Weicht der Prozessname ab, liegt möglicherweise ein manipuliertes Programm oder ein nicht autorisierter Dienst vor. Auch bei Performance-Problemen kann lsof helfen. Mit
netstat -s
prüft man Paketstatistiken und Fehlerraten, während
lsof -i -nP
zeigt, welche Prozesse mit welchen Verbindungen hohe Socket-Aktivität verursachen. Das erleichtert die Analyse überlasteter Dienste und hilft, Verbindungsengpässe oder blockierende Prozesse zu identifizieren.
Fazit
In komplexen Umgebungen, ermöglicht die Kombination aus netstat, ss und lsof eine lückenlose Kontrolle über den Netzwerkverkehr. Netstat liefert die Übersicht, ss die technischen Zustände, lsof die Prozesszuordnung.