SS & Netstat: Socket Statistics (Artikel 272)
Analyse von Netzwerkverbindungen und Sockets unter Linux. Erfahren Sie den Unterschied zwischen netstat und dem modernen ss-Tool sowie die Identifizierung von Dienst-Endpunkten.
# Socket Statistics: Wer spricht mit wem?
TL;DR / Management Summary Das klassische
netstatist tot. Der moderne Standard für die Analyse von Netzwerk-Sockets ist ss (Socket Statistics). Es ist massiv schneller, da es Daten direkt aus dem Kernel-Memory via Netlink bezieht, statt Textdateien in/proczu parsen. Ein Senior Admin nutztss, um lauschende Ports zu finden, den Status von TCP-Verbindungen zu prüfen und Applikations-Hänger auf Netzwerkebene zu diagnostizieren.
# 1. Einführung & Architektur
Vom Text zum binären Netlink.
- netstat (Legacy): Liest
/proc/net/tcpund andere Files. Langsam bei tausenden Verbindungen. - ss (Modern): Kommuniziert über das Netlink-Protokoll direkt mit dem Kernel-Stack.
# Die Socket-Sicht (Mermaid)
graph LR
A[App: Nginx] --> B[Socket: TCP 80]
A --> C[Socket: TCP 443]
D[App: SSH] --> E[Socket: TCP 22]
F[Kernel Stack] --- G[ss command]
B/C/E --- F
G --> H[Output: Local Addr, Peer Addr, State, Process]
# 2. Der Klassiker: Lauschende Ports finden
Was ist offen?
Der wichtigste Befehl für jeden Admin:
# -t: TCP, -u: UDP, -l: Listening, -n: Numeric (no DNS), -p: Process Info
sudo ss -tunlp
Tipp: Nur mit sudo sehen Sie den Prozessnamen (-p). Ohne Root-Rechte ist das Feld leer.
# 3. Fortgeschrittene Filterung
Die Nadel im Netz finden.
ss hat eine extrem mächtige Filter-Syntax, die weit über grep hinausgeht.
# Filter nach Status
# Zeige alle aktiven, aufgebauten Verbindungen
ss -t state established
# Filter nach IP/Port
# Wer ist mit Port 80 verbunden?
ss -t '( dport = :80 or sport = :80 )'
# 4. Day-2 Operations: TCP-Metriken
Hinter die Kulissen schauen.
ss kann Informationen über die Qualität der Verbindung liefern (z.B. Round Trip Time).
# -i: Interne TCP Informationen
ss -ti
Achten Sie auf das Feld rtt. Es zeigt Ihnen die Latenz dieser spezifischen TCP-Sitzung.
# 5. Troubleshooting & “War Stories”
Wenn der Socket klemmt.
# Story 1: “Der hängende TIME-WAIT Stau”
Symptom: Der Webserver kann keine neuen Verbindungen annehmen, obwohl die CPU-Last bei 0% liegt.
Ursache: Tausende Verbindungen hängen im TIME-WAIT Status (nach dem Schließen der Verbindung). Der Server hat keine freien Ports mehr.
Lösung: Prüfen mit ss -s (Summary). Falls zu hoch, optimieren Sie die Kernel-Parameter net.ipv4.tcp_tw_reuse.
# Story 2: “Das Port-Phantom”
Symptom: systemctl start apache2 meldet “Address already in use”, aber netstat zeigt keinen Prozess auf Port 80 an.
Ursache: Ein unsauber beendeter Prozess hält den Port noch im Kernel fest, oder es ist ein IPv6 vs IPv4 Problem.
Lösung: Nutzen Sie ss -apn | grep :80. Prüfen Sie explizit auf :::80 (IPv6). Oft blockiert ein IPv6-Socket den Zugriff für IPv4.
# 6. Fazit & Empfehlung
- Wahl: Nutzen Sie
ssstattnetstat. Es ist in jedem modernen Linux-System enthalten. - Performance:
ss -sist der schnellste Weg, um zu sehen, ob ein Server unter einer DoS-Attacke (massiv viele SYN-RECV) steht. - Sicherheit: Prüfen Sie regelmäßig mit
ss -tunlp, ob Dienste auf0.0.0.0(alle IPs) lauschen, die eigentlich nur auf127.0.0.1(localhost) erreichbar sein sollten.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Alle Sockets (TCP/UDP) | ss -tu |
| Lauschende Sockets | ss -l |
| Mit Prozessnamen | ss -p |
| Zusammenfassung | ss -s |
| Nur IPv4 | ss -4 |
| Nur IPv6 | ss -6 |
| Keine DNS Auflösung | ss -n |
| Filter: HTTP Traffic | ss -t dport = :80 |
| Hilfe anzeigen | ss -h |