In Netzwerken ist ein Port eine interessante Funktion. Es ist eine Möglichkeit für den Netzwerkverkehr, die Zielanwendung oder den Dienst zu identifizieren. Jeder Prozess/Dienst erhält seinen eigenen Port. Ein Port wird immer mit der IP-Adresse des Hosts zusammen mit dem Protokoll assoziiert.
Das ist eine Lieblingsmetapher von mir, um zu beschreiben, was ein Port ist. Stellen Sie sich ein Schiff vor, das mit Fracht beladen ist und in ein fernes Land reisen wird. Welche Informationen werden benötigt, um das Ziel richtig zu erreichen? Der Einfachheit halber sagen wir, es braucht das Land (die IP-Adresse) und den Port, an dem das Schiff andocken wird.
In dieser Anleitung erfahren Sie, wie Sie offene Ports unter Linux auflisten können.
Ports unter Linux
Ports dienen als Endpunkt der Kommunikation. Es handelt sich um eine 16-Bit-Zahl (0 bis 65535 in dezimal). Obwohl der Bereich groß ist, werden die Ports der Einfachheit halber in drei Kategorien eingeteilt. Jede Kategorie ist mit dem Wertebereich des Ports beschriftet:
- 0 bis 1023: Dies sind die „Well-known“-Ports, auch als „System“-Ports bekannt, die für Systemprozesse reserviert sind, die eine Vielzahl von Netzwerkdiensten anbieten. Um sich mit einem „Well-known“-Port zu verbinden, muss ein Prozess über Superuser-Rechte verfügen.
- 1024 bis 49151: Dies sind die „Registered“-Ports, auch „User“-Ports genannt, die von der IANA für bestimmte Dienste vorgesehen sind. Auf Anfrage kann ein Prozess auf sie zugreifen. Bei den meisten Systemen sind für die Nutzung dieser Ports keine Superuser-Rechte erforderlich.
- 49152 bis 65535: Dies sind die „dynamischen“ Ports, auch „Private“ Ports genannt. Diese Ports können nicht bei der IANA registriert werden. Diese Ports können für private oder benutzerdefinierte Dienste verwendet werden und können auch automatisch als ephemere Ports (kurzlebige Ports, die von IP verwendet werden) zugewiesen werden.
In Linux gibt es mehrere Möglichkeiten, die offenen Ports zu überprüfen. Standardmäßig bleibt jeder Port geschlossen, es sei denn, er wird von einer App verwendet. Wenn ein Port offen ist, dann muss er einem Dienst/Prozess zugewiesen werden.
Liste offener Ports
Es ist einfacher zu erkennen, welche Ports in Benutzung sind, als welche Ports offen sind. Deshalb werden im folgenden Abschnitt Methoden vorgestellt, mit denen Sie alle Ports auflisten können, die gerade in Gebrauch sind. Unter Linux gibt es mehrere Werkzeuge für diese Aufgabe. Die meisten davon sind in jeder Linux-Distribution integriert.
Die Feststellung, welche Ports aktuell geöffnet sind, kann in verschiedenen Szenarien nützlich sein. Es ist möglich, einen dedizierten Port für eine bestimmte Anwendung zu konfigurieren. Ein offener Port kann auch ein starkes Indiz für ein Eindringen in das Netzwerk sein.
Die folgenden Methoden werden auf Ubuntu 20.04.1 LTS demonstriert.
Liste der Protokolle und offenen Ports aus /etc/services
Die Datei /etc/services enthält Informationen über die aktuell laufenden Dienste. Es ist eine große Datei, also machen Sie sich bereit, überwältigt zu werden.
Offene Ports mit netstat auflisten
Das Tool netstat ist ein Dienstprogramm zur Anzeige von Netzwerkverbindungen für TCP, Routing-Tabellen und verschiedene Netzwerkschnittstellen. Außerdem bietet es Netzwerkprotokollstatistiken. Mit Hilfe von netstat können wir alle offenen Ports des Systems auflisten.
Führen Sie den folgenden netstat-Befehl aus:
Lassen Sie uns kurz die Flags auflisten, die wir in diesem Befehl verwenden.
- a: Weist netstat an, alle Sockets anzuzeigen
- t: Weist netstat an, TCP-Ports aufzulisten
- u: Weist netstat an, UDP-Ports aufzulisten
Hier ist eine weitere Variante des netstat-Befehls:
Es gibt zwei neue Flags in dem Befehl. Was bedeuten sie?
- l: Weist netstat an, nur die lauschenden Sockets auszugeben
- n: Weist netstat an, die Portnummer anzuzeigen
Um die PID des Prozesses anzuzeigen, der einen Port verwendet, verwenden Sie das Flag „-p“:
Offene Ports mit ss auflisten
Das Tool ss ist ein Dienstprogramm zur Untersuchung von Sockets. Seine Verwendung ist ähnlich wie bei netstat.
Um die offenen Ports aufzulisten, führen Sie den folgenden ss-Befehl aus:
Die Flags sind ähnlich zu netstat. Auch die Funktionen, die sie beschreiben, sind recht ähnlich.
- l: Weist ss an, lauschende Sockets anzuzeigen
- n: Weist ss an, nicht zu versuchen, Dienstnamen aufzulösen
- t: Sagt ss, dass es TCP-Sockets anzeigen soll
- u: Weist ss an, UDP-Sockets anzuzeigen
Offene Ports mit lsof auflisten
Der Befehl lsof dient dazu, offene Dateien aufzulisten. Er kann aber auch zum Anzeigen der offenen Ports verwendet werden.
Führen Sie den folgenden lsof-Befehl aus:
Um die offenen Ports eines bestimmten Protokolls (TCP, UDP, etc.) zu erhalten, dann definieren Sie diese nach dem „-i“-Flag:
Offene Ports mit nmap auflisten
Das Tool nmap ist ein leistungsfähiges Tool zur Netzwerkuntersuchung und zum Sicherheits-/Port-Scanning. Es kann alle offenen Ports im System melden.
Um die offenen TCP-Ports aufzulisten, führen Sie den folgenden nmap-Befehl aus. Die IP-Adresse ist dabei die des Host-Rechners:
Hier gibt es zwei Teile des Befehlsarguments.
- -sT: Dieser Teil weist nmap an, nach TCP-Ports zu scannen.
- -p- : Dies weist nmap an, nach allen 65535 Ports zu scannen. Wenn nicht verwendet, dann scannt nmap standardmäßig nur 1000 Ports.
Wenn Sie die offenen UDP-Ports auflisten möchten, dann führen Sie den folgenden nmap-Befehl aus:
Um sowohl die offenen TCP- als auch die offenen UDP-Ports zu erhalten, verwenden Sie den folgenden Befehl:
Offene Ports mit netcat auflisten
Das Tool netcat ist ein Kommandozeilenprogramm zum Lesen und Schreiben von Daten über Netzwerkverbindungen mit den Protokollen TCP und UDP. Dieses Tool kann auch zum Auflisten offener Ports verwendet werden. Es kann Tests für einen bestimmten Port oder einen Bereich von Ports durchführen.
Der folgende netcat-Befehl scannt den Port von 1 bis 1000. Der netcat-Befehl führt den Scan standardmäßig auf dem TCP-Protokoll durch:
Es kann auch auf die gesamte Liste der möglichen Ports erweitert werden:
Lassen Sie uns einen kurzen Überblick über die Flags geben.
- z: Weist netcat an, nur nach offenen Ports zu suchen, ohne Daten zu senden
- v: Weist netcat an, im ausführlichen Modus zu arbeiten
Um nur die offenen Ports aus dieser Liste zu erhalten, filtern Sie die Ausgabe mit grep nach dem Begriff „succeeded“.
Wenn Sie den Scan für das UDP-Protokoll durchführen wollen, dann fügen Sie das Flag „-u“ hinzu.
Final Thoughts
Wie gezeigt, gibt es eine Menge Möglichkeiten, nach offenen Ports unter Linux zu suchen. Ich schlage vor, alle Methoden auszuprobieren, bevor Sie sich entscheiden, welche Sie beherrschen. Wenn Sie ein bestimmtes Tool wie netcat oder nmap regelmäßig verwenden, dann ist es am vorteilhaftesten, die zugehörigen Methoden zu beherrschen.
Viel Spaß beim Rechnen!