Offene Ports - was ist das eigentlich?
Schauen wir uns zuerst einmal an, was ein Port im TCP/IP-Protokollstack überhaupt ist.
Ein Port oder eine Portnummer ist eine Ziffer, die einen Endpunkt einer Kommunikation beschreibt.
Die Kombination aus IP-Adresse, Transportprotokoll (TCP, UPD) und Portnummer ermöglicht die eindeutige
Identifikation.
Jeder Serverdienst oder Prozess benötigt eine eindeutige Portnummer um seinen Service anbieten zu können.
Dafür kommen in der Regel die sogenannten Well-known-Ports zu Anwendung. So wird ein Webserver per Default
immer auf Port tcp/80 (http) und tcp/443 (https) starten. Diese Ports sind genormt (well known) und ein Webbrowser
wird den Server auf genau diesen Ports ansprechen.
Server mit 2 offenen TCP-Ports
Wenn ein Service startet fordert er beim Netzwerkstack des Betriebssystems die in seiner Konfiguration
vorgesehenen Ports an. Der Netzwerkstack stellt dann quasi eine Verbindung zwischen der Portnummer und
dem Serverprozess her. Alle eingehenden Pakete mit dem entsprechenden Ziel-Port wird der Netzwerkstack
ab diesem Zeitpunkt an den Prozess weiterleiten. Der Port befindet sich jetzt im Status LISTEN, LISTENING oder
auf Deutsch ABHÖREN. Der Port lauscht sozusagen auf eingehende Daten, der Port ist jetzt offen.
Pro Transportprotokoll (TCP und UDP) kann jede Portnummer nur an eine Applikation vergeben werden.
Der Versuch eine weitere Serveranwendung auf einem bereits genutzten Port zu starten führt zu einem Fehler
in der Art "Port is already in use".
Port-Nummer für UDP und TCP sind jeweils 2 Byte lang (16 Bit). Das gilt sowohl für IP Version 4 als auch
für IPv6.
Sind die Ports immer offen?
Solange auf einem System keine Serverdienste laufen, ist auch kein Port offen.
Der Netzwerkstack des Betriebssystems wird eingehende Pakete also nicht an irgendwelche Prozesse
weiterleiten.
Per Default werden einkommende Verbindungen auf geschlossenen TCP-Ports mit einem
TCP-Reset beantwortet. Dieses Verhalten kann durch den Einsatz von Firewalls unterdrückt werden.
Eingehender UDP-Traffic auf geschlossenen Ports wird einfach
stillschweigend verworfen.
Wenn ich also von meinem PC aus keine Dienste im Netzwerk anbieten möchte, sollte kein Port offen sein.
Offene Ports anzeigen
Welche Ports auf einem System offen sind, sich also im Status LISTEN befinden, zeigt uns das Kommando netstat an.
Netstat ist auf allen Plattformen wie Windows, macOS und allen Linux-Varianten (Debian, Ubuntu, etc.) verfügbar.
Die Optionen für den Aufruf von netstat sind teilweise unterschiedlich, aber netstat kann mir überall die offenen Ports
anzeigen.
Offene Ports anzeigen mit netstat unter Windows
Unter Windows startet man zunächst eine Eingabeaufforderung (Kommandozeile) und kann dort das Kommando
netstat ausführen. Der Aufruf "netstat -h" zeigt einen Hilfetext mit den möglichen Parametern von netstat an.
C:\Users\mku>netstat -h
Zeigt die Protokollstatistik und aktuelle TCP/IP-Netzwerkverbindungen an.
NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p Protokoll] [-r] [-s] [-t] [-x] [-y] [Intervall]
-a Zeigt alle Verbindungen und lauschenden Ports an.
-b Zeigt die ausführbare Datei an, die beim Erstellen jeder
Verbindung bzw. jedes lauschenden Ports involviert ist. In
einigen Fällen enthalten bekannte ausführbare Dateien mehrere
unabhängige Komponenten. Dann wird die Reihenfolge der
Komponenten angezeigt, die beim Erstellen der Verbindung oder
des lauschenden Ports involviert sind. In diesem Fall befindet
sich der Name der ausführbaren Datei unten in []. Oben
befinden sich die aufgerufene Komponente usw., bis TCP/IP
erreicht wurde. Bedenken Sie, dass diese Option sehr
zeitaufwändig sein kann und nur erfolgreich ist, wenn Sie über
ausreichende Berechtigungen verfügen.
-e Zeigt die Ethernet-Statistik an. Kann mit der Option "-s"
kombiniert werden.
-f Zeigt vollqualifizierte Domänennamen (FQDN) für Remoteadressen an.
-n Zeigt Adressen und Portnummern numerisch an.
-o Zeigt die mit jeder Verbindung verknüpfte, übergeordnete
Prozesskennung an.
-p Protokoll Zeigt Verbindungen für das angegebene Protokoll an.
Mögliche Protokolle: TCP, UDP, TCPv6 oder UDPv6.
Mögliche Protokolle bei Verwendung mit der Option "-s":
IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP oder UDPv6.
-q Zeigt alle Verbindungen, lauschenden Ports und gebundene
nicht lauschende TCP-Ports an. Gebundene nicht lauschende Ports können
einer aktiven Verbindung zugeordnet sein oder nicht.
-r Zeigt den Inhalt der Routingtabelle an.
-s Zeigt die Statistik für die einzelnen Protokolle an.
Standardmäßig wird die Statistik für IP, IPv6, ICMP, ICMPv6,
TCP, TCPv6, UDP und UDPv6 angezeigt.
Mit der Option "-p" können Sie dies weiter einschränken.
-t Zeigt den aktuellen Abladungsstatus der Verbindung an.
-x Zeigt Verbindungen, Listener und freigegebene Endpunkte für
NetworkDirect an.
-y Zeigt die TCP-Verbindungsvorlage für alle Verbindungen an.
Nicht kombinierbar mit anderen Optionen.
Intervall Zeigt die gewählte Statistik nach der mit Intervall angegebenen
Anzahl von Sekunden erneut an. Drücken Sie STRG+C zum
Beenden der Intervallanzeige. Ohne Intervallangabe werden
die aktuellen Konfigurationsinformationen einmalig
angezeigt.
Um die offenen TCP-Ports in numerischer Darstellungen zu erhalten nutzen wir das Kommando "netstat -anp TCP".
Alle Portnummern die uns hier im Status ABHÖREN angezeigt werden sind offene Ports.
C:\Users\mku>netstat -anp TCP
Aktive Verbindungen
Proto Lokale Adresse Remoteadresse Status
TCP 0.0.0.0:135 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:445 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:3306 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:3389 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:5040 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:7680 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:33060 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:49664 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:49665 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:49666 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:49667 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:49668 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:49669 0.0.0.0:0 ABHÖREN
TCP 0.0.0.0:49674 0.0.0.0:0 ABHÖREN
TCP 127.0.0.1:49670 127.0.0.1:49671 HERGESTELLT
TCP 127.0.0.1:49671 127.0.0.1:49670 HERGESTELLT
TCP 127.0.0.1:49672 127.0.0.1:49673 HERGESTELLT
TCP 127.0.0.1:49673 127.0.0.1:49672 HERGESTELLT
TCP 127.0.0.1:59608 127.0.0.1:59609 HERGESTELLT
TCP 127.0.0.1:59609 127.0.0.1:59608 HERGESTELLT
TCP 127.0.0.1:59612 127.0.0.1:59613 HERGESTELLT
TCP 127.0.0.1:59613 127.0.0.1:59612 HERGESTELLT
TCP 192.168.178.26:139 0.0.0.0:0 ABHÖREN
TCP 192.168.178.26:3389 192.168.178.60:60704 HERGESTELLT
Mit der Option -o zeigt netstat zusätzlich auch noch die Prozess-ID (kurz PID) des Programmes an
welches hinter einer Portnummer steht. Über das Kommando tasklist kann man sich eine Liste aller
Prozesse mit ihrer PID anzeigen lassen und so herausfinden welches Programm welchen Port geöffnet hat.
Offene Ports anzeigen mit netstat unter Linux
Unter Linux wird netstat ebenfalls von der Kommandozeile (Terminal, Shell, Bash) aus gestartet.
Die Optionen unterscheiden sich ein klein wenig vom Windows netstat.
~# netstat -h
usage: netstat [-vWeenNcCF] [] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [ ...]
netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }
-r, --route display routing table
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections
-v, --verbose be verbose
-W, --wide don't truncate IP addresses
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing
-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets
={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
=Use '-6|-4' or '-A ' or '-- '; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
Unter Linux zeigt uns "netstat -ln" die offenen Ports numerisch an. Mit dem Kommando
"netstat -lnp" zeigt uns Linux zusätzlich auch noch die PID und den Namen des Programmes hinter
den Ports an.
~# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN 18735/prometheus
tcp 0 0 127.0.0.1:9100 0.0.0.0:* LISTEN 56209/node_exporter
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN 725/mysqld
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 572/systemd-resolve
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 725/mysqld
tcp6 0 0 :::8086 :::* LISTEN 143123/influxd
tcp6 0 0 :::3000 :::* LISTEN 11057/grafana-serve
tcp6 0 0 :::4711 :::* LISTEN 134909/iperf3
tcp6 0 0 :::443 :::* LISTEN 706/apache2
tcp6 0 0 :::80 :::* LISTEN 706/apache2
udp 0 0 127.0.0.53:53 0.0.0.0:* 572/systemd-resolve
Etwas verwirrend kann hier die Anzeige einer Reihe von Diensten als tcp6 only sein.
Man könnte denken, dass der Apache nur auf IPv6 im LISTEN ist. Allerdings wird hier die IPv4-Adresse
auf eine IPv6-Adresse gemappt und Apache lauscht dadurch nur auf dem tcp6-Socket. Und dieser Socket akzeptiert
sowohl IPv4 als auch IPv6.
TCP Ports
Innerhalb der TCP/IP-Suite wird das Transmission Control Protocol (kurz TCP) für
verbindungsorientierte Kommunikation genutzt. Bekannte Protokolle die TCP-Ports
nutzen sind FTP, HTTP/HTTPS, SSH und SMTP. Weniger bekannt ist das DNS ebenfalls TCP nutzen kann.
Portnummer | Protokoll |
22 | Secure Shell ssh |
23 | Telnet |
25 | SMTP |
139 | NetBIOS Session Service |
179 | BGP |
445 | Microsoft File Sharing/SMB |
UDP Ports
Das User Datagram Protocol (UDP) ist das verbindungslose Transportprotokoll der TCP/IP-Protokollfamilie.
Verbreitete Anwendungen von UDP sind SNMP, NTP, DNS und RTP.
Portnummer | Protokoll |
53 | DNS |
67 und 68 | BOOTP und DHCP |
69 | TFTP |
123 | NTP |
319 und 320 | Precision Time Protocol PTP |
Portscanner NMAP
Um über das Netzwerk herauszufinden ob an einem Zielsystem offene Ports existieren nutz man sogenannte Portscanner.
Der bekannteste Vertreter ist sicher NMAP. Mit NMAP lassen sich offene Ports mit einer Vielzahl unterschiedlicher
Scan-Verfahren prüfen.
Firewalls und offene Ports
Firewalls können unerwünschte Zugriffe auf offene Ports verhindern. Sie können Zugriffe basierend auf Portnummern filtern, daher spricht
man auch von Portfiltern.
ICMP Port - Welchen Port nutzt Ping?
Die Antwort ist einfach: Ping hat gar keine Portnummer. ICMP ist ein eigenes Protokoll in der TCP/IP-Suite und wird
direkt in IP enkapsuliert. ICMP hat dort die Protokollnummer 1.
Windows, Apple, Linux, Android - gibt es Unterschiede?
Die Netzwerkstacks aller Geräte die heute TCP/IP für die Kommunikation nutzen basieren auf den gleichen Standards (RFCs).
Nur dadurch kann ein Iphone mit iOS problemlos auf einen Linux Webserver zugreifen und eine PS5
über Cisco-Router ins Internet gelangen. Die Portnummern und deren Verwendung ist über alle Plattformen identisch.
Offene Ports - Links
Hier noch ein paar weiterführende Links zu offenen Ports, netstat und nmap:
|