Skip to main content

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-NetTCPConnection liefert strukturierte PowerShell-Objekte und ist deshalb für gezielte Filterungen besser geeignet als das Verarbeiten formatierter netstat-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>

lsof ist nicht auf jeder minimalen Linux-Installation vorhanden. In diesem Fall kann zunächst ss verwendet 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 lsof für die Zuordnung von Netzwerkendpunkten zu Prozessen meist übersichtlicher als netstat.


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_WAIT oder CLOSE_WAIT sind 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