4.4 Listener, Ports und Bindungsadressen prüfen
4.4 Listener, Ports und Bindungsadressen prüfen
Ein laufender Dienstprozess ist nur dann über das Netzwerk erreichbar, wenn er einen passenden Socket geöffnet und an die erwartete lokale Adresse sowie den vorgesehenen Port gebunden hat.
Grundsatz:
Dienststatus, Prozess, Listener und erfolgreiche Anwendungsantwort sind vier getrennte Nachweise.
Ziele dieser Seite
Nach dieser Seite sollst du:
- TCP-Listener und UDP-Endpunkte anzeigen können,
- einen Port dem verantwortlichen Prozess zuordnen können,
- Bindungsadressen richtig interpretieren können,
- zwischen Loopback-, Einzeladress- und Wildcard-Bindung unterscheiden können,
- IPv4- und IPv6-Listener getrennt prüfen können,
- lokale und entfernte Porttests durchführen können,
- Portkonflikte erkennen können,
- TCP-Verbindungszustände einordnen können,
- zwischen „Port geschlossen“, „gefiltert“ und „Anwendung fehlerhaft“ unterscheiden können,
- Listener prüfen, ohne unnötig die Dienstkonfiguration zu verändern.
1. Socket, Listener, Port und Verbindung unterscheiden
| Begriff | Bedeutung |
|---|---|
| Socket | Betriebssystemobjekt für eine Kommunikationsverbindung oder einen Endpunkt |
| Lokale Adresse | IP-Adresse der lokalen Netzwerkschnittstelle |
| Lokaler Port | Portnummer auf dem untersuchten System |
| Remoteadresse | IP-Adresse der Gegenstelle |
| Remoteport | Portnummer der Gegenstelle |
| TCP-Listener | Passiver TCP-Socket, der neue Verbindungen annehmen kann |
| UDP-Endpunkt | Gebundener UDP-Socket; UDP besitzt keinen TCP-ähnlichen LISTEN-Zustand |
| Bindung | Zuordnung eines Sockets zu lokaler Adresse und Port |
| Wildcard-Bindung | Bindung an alle passenden lokalen Adressen |
| Loopback-Bindung | Zugriff nur über die lokale Loopback-Schnittstelle |
| Established | Vollständig aufgebaute TCP-Verbindung |
Beispiel einer TCP-Verbindung:
Client: 192.0.2.50:53124
Server: 192.0.2.20:443
Dabei ist 53124 normalerweise ein temporärer Clientport und 443 der bekannte Serverport.
2. Erwarteten Netzwerkendpunkt vor der Prüfung festlegen
Vor der Listenerprüfung müssen folgende Sollwerte bekannt sein:
| Eigenschaft | Beispiel |
|---|---|
| Protokoll | TCP |
| Port | 443 |
| IP-Version | IPv4 und IPv6 |
| Erwartete Bindungsadresse | 192.0.2.20 |
| Erwarteter Prozess | Webserverprozess |
| Erwarteter Dienst | Interner Webdienst |
| Erlaubte Quellnetze | Unternehmens-LAN und VPN |
| Verschlüsselung | TLS |
| Anwendungsprotokoll | HTTPS |
| Zugriffspfad | Direkt, über Proxy oder Loadbalancer |
Unzureichende Prüffrage:
„Ist Port 443 offen?“
Bessere Prüffragen:
- Lauscht der erwartete Prozess auf TCP-Port 443?
- Lauscht er auf der richtigen IPv4- oder IPv6-Adresse?
- Ist der Port lokal erreichbar?
- Ist er von einem vorgesehenen Clientnetz erreichbar?
- Antwortet dort tatsächlich das erwartete Anwendungsprotokoll?
- Wird der Zugriff durch einen Proxy oder Loadbalancer vermittelt?
3. Bindungsadressen richtig interpretieren
| Bindungsadresse | Typische Bedeutung |
|---|---|
127.0.0.1 |
Nur lokale IPv4-Verbindungen |
::1 |
Nur lokale IPv6-Verbindungen |
0.0.0.0 |
Alle lokalen IPv4-Adressen |
:: beziehungsweise [::] |
IPv6-Wildcard; mögliche IPv4-Mitbenutzung ist system- und socketabhängig |
| Bestimmte IPv4-Adresse | Nur diese lokale IPv4-Adresse |
| Bestimmte IPv6-Adresse | Nur diese lokale IPv6-Adresse |
Beispiel:
Ein Server besitzt folgende Adressen:
127.0.0.1
192.0.2.20
198.51.100.20
Der Dienst bindet sich an:
127.0.0.1:8080
Dann ist der Dienst normalerweise nicht direkt über 192.0.2.20:8080 oder 198.51.100.20:8080 erreichbar.
Bindet er sich an:
0.0.0.0:8080
nimmt er grundsätzlich auf allen lokalen IPv4-Adressen Verbindungen an. Firewall- und Routingregeln gelten zusätzlich.
Eine Wildcard-Bindung bedeutet nicht, dass der Port aus jedem Netzwerk erreichbar ist. Paketfilter, Routing, NAT, Sicherheitsgruppen und vorgeschaltete Systeme können den Zugriff weiterhin verhindern.
4. TCP-Listener unter Windows anzeigen
Alle TCP-Listener anzeigen:
[RO] Get-NetTCPConnection -State Listen |
Sort-Object LocalPort, LocalAddress
Wichtige Felder auswählen:
[RO] Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort, State, OwningProcess |
Sort-Object LocalPort, LocalAddress
Bestimmten TCP-Port prüfen:
[RO] Get-NetTCPConnection `
-State Listen `
-LocalPort <PORT> `
-ErrorAction SilentlyContinue
Bestimmte lokale Adresse und Port prüfen:
[RO] Get-NetTCPConnection `
-State Listen `
-LocalAddress "<IP-ADRESSE>" `
-LocalPort <PORT> `
-ErrorAction SilentlyContinue
Klassische Alternative:
[RO] netstat -ano -p tcp
Nur TCP-Listener mit netstat:
[RO] netstat -ano -p tcp |
Select-String "LISTENING"
Get-NetTCPConnectionliefert strukturierte PowerShell-Objekte und ist deshalb für gezielte Filterungen besser geeignet als das Verarbeiten formatierternetstat-Ausgaben.
5. UDP-Endpunkte unter Windows anzeigen
UDP besitzt keinen Verbindungszustand Listen. Stattdessen werden gebundene UDP-Endpunkte angezeigt.
Alle UDP-Endpunkte anzeigen:
[RO] Get-NetUDPEndpoint |
Select-Object LocalAddress, LocalPort, OwningProcess |
Sort-Object LocalPort, LocalAddress
Bestimmten UDP-Port prüfen:
[RO] Get-NetUDPEndpoint `
-LocalPort <PORT> `
-ErrorAction SilentlyContinue
Klassische Alternative:
[RO] netstat -ano -p udp
Wichtig:
- Das Vorhandensein eines UDP-Endpunkts zeigt nur eine lokale Bindung.
- UDP verwendet keinen TCP-Handshake.
- Ein UDP-Porttest kann deshalb nicht so eindeutig wie ein TCP-Verbindungstest bewertet werden.
- Eine fehlende UDP-Antwort kann normal sein, wenn die Testanfrage nicht dem erwarteten Anwendungsprotokoll entspricht.
6. Windows-Port dem verantwortlichen Prozess zuordnen
TCP-Port und Prozess-ID ermitteln:
[RO] Get-NetTCPConnection `
-State Listen `
-LocalPort <PORT> `
-ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcess
Zugehörigen Prozess anzeigen:
[RO] $connection = Get-NetTCPConnection `
-State Listen `
-LocalPort <PORT> `
-ErrorAction SilentlyContinue
$connection |
ForEach-Object {
Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
} |
Select-Object Id, ProcessName, StartTime
Prozess und Dienst über eine gefundene PID zuordnen:
[RO] Get-CimInstance Win32_Service -Filter "ProcessId=<PID>" |
Select-Object Name, DisplayName, State, StartName
Alle TCP-Listener zusammen mit Prozessnamen anzeigen:
[RO] Get-NetTCPConnection -State Listen |
ForEach-Object {
$process = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
LocalAddress = $_.LocalAddress
LocalPort = $_.LocalPort
PID = $_.OwningProcess
ProcessName = $process.ProcessName
}
} |
Sort-Object LocalPort, LocalAddress
Mehrere Listener können dieselbe PID verwenden. Ebenso kann ein Prozess auf mehreren Adressen und Ports lauschen.
7. Listener unter Linux mit ss anzeigen
ss ist auf modernen Linux-Systemen das bevorzugte Werkzeug für Socketinformationen.
Alle lauschenden TCP-Sockets numerisch anzeigen:
[RO] ss -lnt
TCP-Listener einschließlich Prozessinformationen anzeigen:
[RO][PRIV] sudo ss -lntp
Gebundene UDP-Sockets anzeigen:
[RO] ss -lnu
UDP-Sockets einschließlich Prozessinformationen anzeigen:
[RO][PRIV] sudo ss -lnup
TCP- und UDP-Sockets gemeinsam anzeigen:
[RO][PRIV] sudo ss -lntup
Bedeutung wichtiger Optionen:
| Option | Bedeutung |
|---|---|
-l |
Nur lauschende beziehungsweise unverbundene Server-Sockets |
-n |
Adressen und Ports numerisch ausgeben |
-t |
TCP-Sockets |
-u |
UDP-Sockets |
-p |
Zugehörige Prozesse anzeigen |
-4 |
Nur IPv4 |
-6 |
Nur IPv6 |
Nur IPv4-TCP-Listener:
[RO] ss -4 -lnt
Nur IPv6-TCP-Listener:
[RO] ss -6 -lnt
Ohne ausreichende Berechtigungen können Prozessname und PID in der Ausgabe fehlen.
8. Bestimmten Port oder Prozess unter Linux prüfen
Bestimmten TCP-Listener prüfen:
[RO][PRIV] sudo ss -lntp "sport = :<PORT>"
Bestimmten UDP-Port prüfen:
[RO][PRIV] sudo ss -lnup "sport = :<PORT>"
Offene Netzwerkressourcen einer PID anzeigen:
[RO][SENS][PRIV] sudo lsof -nP -a -p <PID> -i
TCP-Listener einer PID anzeigen:
[RO][SENS][PRIV] sudo lsof \
-nP \
-a \
-p <PID> \
-iTCP \
-sTCP:LISTEN
Bestimmten TCP-Port mit lsof prüfen:
[RO][PRIV] sudo lsof -nP -iTCP:<PORT> -sTCP:LISTEN
Bestimmten UDP-Port mit lsof prüfen:
[RO][PRIV] sudo lsof -nP -iUDP:<PORT>
lsofist nicht auf jeder minimalen Linux-Installation vorhanden. In diesem Fall kann zunächstssverwendet werden.
9. Listener unter macOS anzeigen
Alle TCP-Listener anzeigen:
[RO][PRIV] sudo lsof -nP -iTCP -sTCP:LISTEN
Bestimmten TCP-Port prüfen:
[RO][PRIV] sudo lsof -nP -iTCP:<PORT> -sTCP:LISTEN
Gebundene UDP-Sockets anzeigen:
[RO][PRIV] sudo lsof -nP -iUDP
Bestimmten UDP-Port prüfen:
[RO][PRIV] sudo lsof -nP -iUDP:<PORT>
Netzwerksockets einer bestimmten PID anzeigen:
[RO][SENS][PRIV] sudo lsof -nP -a -p <PID> -i
TCP-Verbindungen und Listener mit netstat anzeigen:
[RO] netstat -anv -p tcp
UDP-Sockets mit netstat anzeigen:
[RO] netstat -anv -p udp
Unter macOS ist
lsoffür die Zuordnung von Netzwerkendpunkten zu Prozessen meist übersichtlicher alsnetstat.
10. Ausgabe von ss, lsof und netstat lesen
Beispiel eines TCP-Listeners:
LISTEN 0 128 0.0.0.0:443 0.0.0.0:*
Interpretation:
| Feld | Bedeutung |
|---|---|
LISTEN |
Socket nimmt neue TCP-Verbindungen an |
0.0.0.0:443 |
Bindung an TCP-Port 443 auf allen lokalen IPv4-Adressen |
0.0.0.0:* |
Noch keine bestimmte entfernte Gegenstelle |
0 |
Je nach Werkzeug aktueller Warteschlangenwert |
128 |
Je nach Werkzeug Warteschlangen- oder Grenzwert |
Beispiel einer aufgebauten Verbindung:
192.0.2.20:443 192.0.2.50:53124 ESTABLISHED
Interpretation:
Lokaler Serverendpunkt: 192.0.2.20:443
Entfernter Client: 192.0.2.50:53124
Zustand: Verbindung aufgebaut
Bei der Auswertung muss zuerst bestimmt werden, welches System Client und welches System Server ist. Ein hoher temporärer Port gehört häufig zum Client.
11. IPv4 und IPv6 getrennt prüfen
Ein Dienst kann:
- nur auf IPv4 lauschen,
- nur auf IPv6 lauschen,
- getrennte IPv4- und IPv6-Sockets verwenden,
- einen IPv6-Wildcard-Socket verwenden,
- abhängig vom Betriebssystem IPv4-Verbindungen über einen IPv6-Socket annehmen.
Windows – IPv4-Listener eines Ports:
[RO] Get-NetTCPConnection -State Listen -LocalPort <PORT> |
Where-Object LocalAddress -NotLike "*:*"
Windows – IPv6-Listener eines Ports:
[RO] Get-NetTCPConnection -State Listen -LocalPort <PORT> |
Where-Object LocalAddress -Like "*:*"
Linux – IPv4 prüfen:
[RO][PRIV] sudo ss -4 -lntp "sport = :<PORT>"
Linux – IPv6 prüfen:
[RO][PRIV] sudo ss -6 -lntp "sport = :<PORT>"
macOS – IPv4 prüfen:
[RO][PRIV] sudo lsof -nP -i4TCP:<PORT> -sTCP:LISTEN
macOS – IPv6 prüfen:
[RO][PRIV] sudo lsof -nP -i6TCP:<PORT> -sTCP:LISTEN
Aus einer Bindung an
[::]:<PORT>darf nicht ungeprüft geschlossen werden, dass IPv4 ebenfalls funktioniert. IPv4 und IPv6 müssen praktisch getrennt getestet werden.
12. Lokalen TCP-Porttest durchführen
Ein lokaler Test hilft zu unterscheiden, ob der Dienst grundsätzlich Verbindungen annimmt oder ob nur der externe Zugriff fehlschlägt.
Windows – IPv4-Loopback testen:
[TEST] Test-NetConnection 127.0.0.1 -Port <PORT>
Windows – konkrete Serveradresse testen:
[TEST] Test-NetConnection <SERVER-IP> -Port <PORT>
Linux – IPv4-Loopback testen:
[TEST] nc -vz -w 3 127.0.0.1 <PORT>
Linux – konkrete Serveradresse testen:
[TEST] nc -vz -w 3 <SERVER-IP> <PORT>
macOS – IPv4-Loopback testen:
[TEST] nc -vz -w 3 127.0.0.1 <PORT>
macOS – konkrete Serveradresse testen:
[TEST] nc -vz -w 3 <SERVER-IP> <PORT>
IPv6-Loopback unter Linux oder macOS testen:
[TEST] nc -6 -vz -w 3 ::1 <PORT>
Interpretation:
| Loopback | Server-IP | Mögliche Bewertung |
|---|---|---|
| Erfolgreich | Erfolgreich | Lokaler Listener grundsätzlich erreichbar |
| Erfolgreich | Fehlgeschlagen | Falsche Bindung oder lokaler Paketfilter möglich |
| Fehlgeschlagen | Erfolgreich | Dienst lauscht möglicherweise nur auf einer konkreten Adresse |
| Fehlgeschlagen | Fehlgeschlagen | Kein Listener, falscher Port oder Paketfilter |
| Erfolgreich | Extern fehlgeschlagen | Externe Firewall, Routing oder Netzpfad untersuchen |
Ein erfolgreicher TCP-Porttest beweist nur, dass ein TCP-Verbindungsaufbau möglich war. Er beweist nicht, dass die Anwendung fachlich korrekt antwortet.
13. TCP-Port von einem entfernten Client testen
Der Test sollte aus dem tatsächlich betroffenen Netzwerk oder von einem vergleichbaren Client erfolgen.
| Betriebssystem | Befehl |
|---|---|
| Windows | [TEST] Test-NetConnection <SERVER> -Port <PORT> |
| Linux | [TEST] nc -vz -w 3 <SERVER> <PORT> |
| macOS | [TEST] nc -vz -w 3 <SERVER> <PORT> |
Windows mit ausführlicher Ausgabe:
[TEST] Test-NetConnection <SERVER> -Port <PORT> -InformationLevel Detailed
Wichtige Ausgabe:
ComputerName
RemoteAddress
RemotePort
InterfaceAlias
SourceAddress
TcpTestSucceeded
Prüffragen:
- Wurde der erwartete Servername verwendet?
- Wurde der Name zur erwarteten IP-Adresse aufgelöst?
- Verwendet der Test die erwartete Quelladresse?
- Erfolgt der Test über das vorgesehene Netzwerkinterface?
- Ist der Port nur aus bestimmten Netzen erreichbar?
- Wird IPv4 oder IPv6 verwendet?
- Besteht zwischen Client und Server ein Proxy, VPN oder Loadbalancer?
14. UDP-Porttests vorsichtig bewerten
Linux oder macOS:
[TEST] nc -vzu -w 3 <SERVER> <PORT>
Ein solcher Test kann jedoch häufig nicht zuverlässig bestätigen, dass:
- ein UDP-Dienst tatsächlich antwortet,
- die Anwendung die Testdaten verstanden hat,
- eine Firewall die Pakete verworfen hat,
- die Rückantwort den Client erreicht,
- der Dienst fachlich funktioniert.
Bessere UDP-Prüfung:
| Dienst | Geeigneter protokollspezifischer Test |
|---|---|
| DNS | dig oder nslookup |
| NTP | ntpq, chronyc oder geeigneter NTP-Client |
| DHCP | Kontrollierter DHCP-Test im vorgesehenen Netz |
| SNMP | snmpget mit autorisierten Zugangsdaten |
| TFTP | Kontrollierter TFTP-Clienttest |
| Syslog | Testnachricht und serverseitige Protokollkontrolle |
Bei UDP ist ein protokollspezifischer Funktionstest wesentlich aussagekräftiger als ein allgemeiner Portscan.
15. Lokal erreichbar, von außen nicht erreichbar
Wenn ein lokaler Porttest erfolgreich ist, ein entfernter Test aber fehlschlägt, kommen unter anderem folgende Ursachen infrage:
- Dienst bindet nur an Loopback,
- Dienst bindet an die falsche Netzwerkschnittstelle,
- lokale Hostfirewall blockiert externe Quellen,
- Netzwerkfirewall blockiert den Zielport,
- Routing zum Server oder zurück zum Client fehlt,
- falsches VLAN wird verwendet,
- Zugriff erfolgt über falsche IP-Adresse,
- IPv4 und IPv6 werden verwechselt,
- NAT- oder Portweiterleitung ist fehlerhaft,
- Sicherheitsgruppe oder Cloud-Firewall blockiert,
- Reverse Proxy oder Loadbalancer leitet nicht weiter,
- VPN-Richtlinie erlaubt das Zielnetz nicht,
- Dienst akzeptiert nur bestimmte Quelladressen.
Diagnosereihenfolge:
1. Listener und Bindungsadresse prüfen
2. Lokalen Test über Loopback durchführen
3. Lokalen Test über die Server-IP durchführen
4. Test aus demselben Subnetz durchführen
5. Test aus dem betroffenen Clientnetz durchführen
6. Hostfirewall prüfen
7. Netzwerkpfad und Zwischenfirewalls prüfen
8. Paketmitschnitt auf Client und Server erwägen
16. Portkonflikte erkennen
Ein Portkonflikt entsteht, wenn ein Prozess eine Adresse-Port-Kombination verwenden möchte, die bereits unvereinbar belegt ist.
Typische Fehlermeldungen:
Address already in use
Only one usage of each socket address is normally permitted
Failed to bind
Bind failed
EADDRINUSE
Port is already allocated
Windows:
[RO] Get-NetTCPConnection -State Listen -LocalPort <PORT> |
Select-Object LocalAddress, LocalPort, OwningProcess
[RO] Get-NetUDPEndpoint -LocalPort <PORT> |
Select-Object LocalAddress, LocalPort, OwningProcess
Linux:
[RO][PRIV] sudo ss -lntup "sport = :<PORT>"
macOS – TCP:
[RO][PRIV] sudo lsof -nP -iTCP:<PORT> -sTCP:LISTEN
macOS – UDP:
[RO][PRIV] sudo lsof -nP -iUDP:<PORT>
Prüffragen bei einem Konflikt:
- Welcher Prozess besitzt den Port?
- Gehört der Prozess zum erwarteten Dienst?
- Verwendet er eine Wildcard- oder Einzeladressbindung?
- Wurde eine zweite Dienstinstanz gestartet?
- Wurde der Port nach einer Aktualisierung verändert?
- Läuft ein alter Prozess weiter?
- Wird der Port durch einen Container oder Proxy veröffentlicht?
- Unterstützt die Anwendung mehrere Prozesse mit gemeinsamem Listener?
- Ist die Mehrfachbindung durch Socketoptionen ausdrücklich vorgesehen?
Einen unbekannten Prozess nicht allein deshalb beenden, weil er den gewünschten Port verwendet. Zuerst müssen Prozess, Dienst und betriebliche Funktion eindeutig zugeordnet werden.
17. Wichtige TCP-Zustände einordnen
| Zustand | Bedeutung | Mögliche Diagnose |
|---|---|---|
LISTEN |
Server wartet auf neue Verbindungen | Listener vorhanden |
SYN_SENT |
Lokales System versucht eine Verbindung aufzubauen | Rückantwort fehlt oder Ziel nicht erreichbar |
SYN_RECEIVED |
Verbindungsanfrage empfangen, Handshake noch nicht abgeschlossen | Clientantwort fehlt oder Warteschlange belastet |
ESTABLISHED |
TCP-Verbindung vollständig aufgebaut | Transportverbindung vorhanden |
FIN_WAIT_1 |
Lokales System hat Beendigung eingeleitet | Normal während Verbindungsabbau |
FIN_WAIT_2 |
Bestätigung erhalten, Abschluss der Gegenseite fehlt | Bei großer dauerhafter Anzahl untersuchen |
CLOSE_WAIT |
Gegenseite hat beendet, lokale Anwendung noch nicht | Große dauerhafte Anzahl kann auf Anwendungsfehler hinweisen |
LAST_ACK |
Lokale Anwendung beendet, letzte Bestätigung steht aus | Normal kurzzeitig |
TIME_WAIT |
Verbindung wird nach Beendigung vorübergehend vorgehalten | Häufig normal |
CLOSED |
Socket ist nicht aktiv | Keine Verbindung |
CLOSING |
Beide Seiten beenden nahezu gleichzeitig | Normal kurzzeitig |
Einzelne Verbindungen in
TIME_WAIToderCLOSE_WAITsind noch kein Fehler. Auffällig sind große oder kontinuierlich wachsende Bestände über einen längeren Zeitraum.
18. Aufgebaute Verbindungen eines Dienstes prüfen
Windows – Verbindungen einer PID:
[RO] Get-NetTCPConnection -OwningProcess <PID> |
Select-Object LocalAddress,
LocalPort,
RemoteAddress,
RemotePort,
State
Linux – alle TCP-Verbindungen einer PID über lsof:
[RO][SENS][PRIV] sudo lsof -nP -a -p <PID> -iTCP
macOS – alle TCP-Verbindungen einer PID:
[RO][SENS][PRIV] sudo lsof -nP -a -p <PID> -iTCP
Damit können unter anderem folgende Fragen beantwortet werden:
- Nimmt der Dienst Clientverbindungen an?
- Baut der Dienst Verbindungen zu einer Datenbank auf?
- Verbindet er sich mit einem Verzeichnisdienst?
- Greift er auf einen Proxy oder eine externe API zu?
- Bleiben ungewöhnlich viele Verbindungen in
CLOSE_WAIT? - Verwendet der Prozess den erwarteten Zielport?
- Baut er Verbindungen zu einer unerwarteten Adresse auf?
Remoteadressen, interne Servernamen und Verbindungsziele können sensible Infrastrukturinformationen darstellen.
19. Container und vorgeschaltete Dienste berücksichtigen
Bei containerisierten oder weitergeleiteten Anwendungen können mehrere Portebenen vorhanden sein.
Client
→ Hostadresse: veröffentlichter Port
→ Firewall oder Proxy
→ Containeradresse: interner Port
→ Anwendungsprozess
Beispiel:
Host: 192.0.2.20:8443
Container: 172.18.0.5:443
Anwendung: 0.0.0.0:443 im Container
Prüfungen müssen deshalb unterscheiden zwischen:
- Listener auf dem Host,
- veröffentlichtem Containerport,
- internem Containerport,
- Listener innerhalb des Containers,
- Reverse-Proxy-Listener,
- Backend-Verbindung des Proxys,
- Host- und Containerfirewall,
- Container-Netzwerk und DNS.
Typische Fehler:
- Port wurde nicht veröffentlicht,
- Hostport und Containerport wurden vertauscht,
- Anwendung lauscht im Container nur auf
127.0.0.1, - Reverse Proxy verwendet falschen Backendport,
- zwei Container beanspruchen denselben Hostport,
- Container wurde neu erstellt und erhielt eine andere interne Adresse,
- Anwendung startet später als der vorgeschaltete Proxy,
- Dienst lauscht nur auf IPv6 oder nur auf IPv4.
Die allgemeine Socketprüfung bleibt gleich, muss aber in jedem relevanten Netzwerk-Namespace beziehungsweise auf jeder Weiterleitungsstufe wiederholt werden.
20. Typische Fehlerbilder systematisch bewerten
| Beobachtung | Mögliche Ursache | Nächster Schritt |
|---|---|---|
| Dienst läuft, aber kein Listener vorhanden | Start unvollständig, falsche Konfiguration oder interner Fehler | Dienstprotokoll und Startparameter prüfen |
| Falscher Prozess besitzt den Port | Portkonflikt oder falsche Dienstinstanz | Prozess und Änderungshistorie untersuchen |
Listener nur auf 127.0.0.1 |
Dienst nur für lokale Nutzung konfiguriert | Sollkonfiguration und Proxy-Aufbau prüfen |
| Listener nur auf einer Server-IP | Bindung an falsche oder alte Adresse | Netzwerkkonfiguration und Dienstkonfiguration prüfen |
| Listener nur auf IPv4 | IPv6-Clients erreichen den Dienst nicht | Sollzustand und IPv6-Konfiguration prüfen |
| Listener nur auf IPv6 | IPv4-Zugriff möglicherweise nicht verfügbar | IPv4 getrennt testen |
| Lokaler Test erfolgreich, entfernter Test fehlerhaft | Firewall, Routing oder falsche Bindung | Netzwerkpfad schrittweise prüfen |
| TCP-Verbindung erfolgreich, Anwendung fehlerhaft | Protokoll-, TLS-, Backend- oder Berechtigungsproblem | Anwendungsspezifischen Test durchführen |
Viele CLOSE_WAIT-Verbindungen |
Anwendung schließt Sockets möglicherweise nicht | Prozess- und Anwendungscode beziehungsweise Herstellerhinweise prüfen |
Viele SYN_RECEIVED-Verbindungen |
Handshakes bleiben unvollständig | Last, Netzwerk, Filter und mögliche Angriffe prüfen |
| UDP-Endpunkt vorhanden, Test ohne Antwort | Test möglicherweise nicht protokollgerecht | Protokollspezifischen Test verwenden |
| Port wechselt nach jedem Start | Dynamische Portkonfiguration oder fehlerhafte Vorgabe | Effektive Konfiguration prüfen |
21. Typische Fehlinterpretationen
| Fehlinterpretation | Richtige Bewertung |
|---|---|
| „Der Dienst läuft, also ist der Port offen.“ | Der Prozess muss tatsächlich einen Socket gebunden haben |
| „Port offen bedeutet Anwendung funktioniert.“ | Nur der Transportverbindungsaufbau wurde bestätigt |
„0.0.0.0 bedeutet Zugriff aus dem gesamten Internet.“ |
Es bedeutet alle lokalen IPv4-Adressen; Netzwerkfilter gelten weiterhin |
„127.0.0.1 ist die Server-IP für Clients.“ |
Loopback ist nur auf dem jeweiligen System erreichbar |
„UDP hat ebenfalls einen LISTEN-Zustand.“ |
UDP verwendet keinen TCP-ähnlichen Listenerzustand |
| „Ein fehlgeschlagener UDP-Test beweist einen geschlossenen Port.“ | Ohne Protokollantwort ist das Ergebnis oft nicht eindeutig |
„[::] beweist gleichzeitig IPv4-Erreichbarkeit.“ |
IPv4 muss separat getestet werden |
| „Jeder hohe Clientport ist ein unbekannter Serverdienst.“ | Temporäre Clientports sind normal |
„Viele TIME_WAIT-Einträge bedeuten automatisch einen Fehler.“ |
Der Zustand ist Bestandteil des normalen TCP-Abbaus |
| „Ein Portkonflikt darf durch sofortiges Beenden gelöst werden.“ | Der besitzende Prozess muss zuerst eindeutig identifiziert werden |
22. Checkliste zur Listener- und Portprüfung
[ ] Erwartetes Protokoll bestimmt
[ ] Erwarteten Port bestimmt
[ ] Erwartete Bindungsadresse bestimmt
[ ] IPv4 und IPv6 berücksichtigt
[ ] Dienststatus geprüft
[ ] Prozess und aktuelle PID geprüft
[ ] TCP-Listener beziehungsweise UDP-Endpunkt gesucht
[ ] Port dem richtigen Prozess zugeordnet
[ ] Loopback-Bindung ausgeschlossen oder als vorgesehen bestätigt
[ ] Wildcard- oder Einzeladressbindung bewertet
[ ] Lokalen Test über Loopback durchgeführt
[ ] Lokalen Test über die Serveradresse durchgeführt
[ ] Test aus dem betroffenen Clientnetz durchgeführt
[ ] Aufgelöste Zieladresse kontrolliert
[ ] TCP-Verbindungszustände geprüft
[ ] Portkonflikt ausgeschlossen
[ ] Proxy-, Loadbalancer- oder Containerstufe berücksichtigt
[ ] UDP nur mit geeignetem Protokolltest bewertet
[ ] Noch keine ungeprüfte Prozessbeendigung durchgeführt
[ ] Nächsten Diagnoseschritt dokumentiert
Bewertung des Ergebnisses
| Ergebnis | Nächster Schritt |
|---|---|
| Kein Listener vorhanden | Dienststart, Konfiguration und Protokolle untersuchen |
| Falscher Prozess besitzt den Port | Portkonflikt und Prozessursprung untersuchen |
| Listener verwendet falschen Port | Effektive Dienstkonfiguration prüfen |
| Listener bindet an falsche Adresse | Netzwerkschnittstellen und Bindungskonfiguration prüfen |
| Nur Loopback ist gebunden | Vorgesehenen Proxy oder externe Bindung prüfen |
| Lokaler Test funktioniert | Externen Netzwerkpfad prüfen |
| Entfernter TCP-Test scheitert | Firewall, Routing, NAT und Zwischenkomponenten prüfen |
| TCP-Test funktioniert | TLS und Anwendungsprotokoll prüfen |
| Viele problematische TCP-Zustände | Anwendung, Last und Gegenstellen untersuchen |
| UDP-Ergebnis ist unklar | Protokollspezifischen Funktionstest durchführen |
Merksatz
Ein laufender Prozess ohne Listener ist nicht erreichbar. Ein Listener ohne erfolgreichen Porttest ist nicht nachgewiesen erreichbar. Ein erfolgreicher Porttest ohne Anwendungstest beweist noch keine funktionierende Anwendung.
Weiterführende Quellen
- Microsoft Learn – Get-NetTCPConnection
- Microsoft Learn – Get-NetUDPEndpoint
- Microsoft Learn – Test-NetConnection
- Microsoft Learn – netstat
- Linux-Handbuch – ss
- Linux-Handbuch – socket
- Linux-Handbuch – tcp
- Linux-Handbuch – udp
- Apple – lsof-Handbuchseite
- Apple – netstat-Handbuchseite
- Apple – TCP-Handbuchseite
- Apple – listen-Handbuchseite