TCP- und UDP-Ports

ELektronik-KOmpendium.de
Online

Preis auf Anfrage
Vergleichen Sie diesen Kurs mit ähnlichen Kursen
Mehr ansehen

Wichtige informationen

  • Kurs
  • Online
Beschreibung

TCP- und UDP-Ports TCP- und UDP-Ports sind eine Software-Abstraktion, um parallele Kommunikationsverbindungen einer oder unterschiedlicher Anwendungen voneinander unterscheiden zu können. Ähnlich wie IP-Adressen zur Adressierung von Rechnern in Netzwerken dienen, adressieren Ports spezifische Anwendungen und ihre Verbindungen, die auf einem Rechner laufen.
Mit den Ports ist es möglich, dass die Datenpakete mehrerer Verbindungen zu einem Datenstrom zugeordnet werden können. Datenpakete, die über IP ihr Ziel erreichen, werden von TCP zusammengesetzt und an eine Anwendung übergeben. Da mehrere Anwendungen zugleich TCP-Verbindungen aufbauen können, muss eine Zuordnung zwischen Datenpaket und Anwendung erfolgen. Zu diesem Zweck wird eine Kennung zwischen Daten und Anwendung definiert, die als Port bezeichnet wird. Es handelt sich dabei um eine fortlaufende Nummer zwischen 0 bis 65.535. TCP-Pakete sind mit diesen Port-Nummern, jeweils eine für Sender und Empfänger, versehen. So ist auf beiden Seiten einer Anwendung eine Zuordnung möglich.

Wichtige informationen

Was lernen Sie in diesem Kurs?

Server
SSH
Firewall
Internet
Laufen

Themenkreis

Übersicht: Ports

Die Port-Nummern, die für TCP und UDP gleichzeitig gelten, werden von der IANA (Internet Assigned Numbers Authority) bzw. ICANN (Internet Corporation for Assigned Names and Numbers) verwaltet und vergeben.

Well Known Ports 0 - 1.023 Diese Ports sind fest einer Anwendung oder einem Protokoll zugeordnet. Die feste Zuordnung ermöglicht eine einfachere Konfiguration durch den Benutzern. Er kommt so mit dem Protokoll TCP in Kontakt. Registered Ports 1.024 - 49.151 Diese Ports sind für Dienste vorgesehen. Dynamically Allocated Ports 49.152 - 65.535 Diese Ports werden dynamisch zugewiesen. Jeder Client kann diese Ports nutzen

Die Port-Nummern 0 bis 1.023 sind einem Dienst oder einem Anwendungsprotokoll fest zugeordnet. Um Fehler und die damit einhergehende Fehlersuche zu vermeiden sollte diese Zuordnung nicht verändert werden.
Die Port-Nummern von 1.024 bis 49.151 sind zur Registrierung freigegeben. Im Prinzip kann sich jeder einen Port bei der IANA/ICANN für seine Anwendung reservieren, wenn er es begründen kann.
Die darüberliegenden Port-Nummern, ab 49.152, können frei belegt werden, sofern sie gerade von keinem anderen Dienst belegt sind.

Beispiele für TCP-Ports Port-Nummer Protokoll Anwendung 21 FTP Dateitransfer (FTP-Server) 23 Telnet Konsole (Server) 25 SMTP Postausgang (SMTP-Server) 80 HTTP World Wide Web (Webserver) 110 POP Posteingang (POP-Server) 119 NNTP Usenet (News-Server) Beispiele für UDP-Ports Port-Nummer Protokoll Anwendung 53 DNS Domain Name Server 69 TFTP Trivial File Transfer Protocol 137 NetBIOS-ns NetBIOS Nameserver 138 NetBIOS-DGM NetBIOS-Datagramm-Dienst 161 SNMP Simple Network Management Protocol Port-Nummern für die Verbindung Client zu Server (Request und Response)

Wenn Anwendungen zu einem Server Kontakt aufnehmen wollen, dann vergibt TCP den Standard-Port für den Empfänger-Port und vergibt einen freien Port ab 49.152 für den Sender-Port. Wenn der Server die Daten erhalten hat und eine Antwort zurückschickt, dann werden die Port-Nummern vertauscht. Damit wird sichergestellt, dass die Daten nicht an eine falsche Anwendung übergeben werden.

Port-Zustände

Der Zustand eines Ports definiert, ob eine Kommunikation über diesen Port zu der dahinterliegenden Anwendung möglich ist, oder nicht. Vereinfacht gesehen gibt es drei Zustände.

  • Open / Offen
  • Closed / Geschlossen
  • Filtered / Gefiltert (Blocked / Geblockt)

In der Regel reicht es aus, wenn man alle Ports pauschal in diese zwei oder auch drei Zustände einteilen (offen, geschlossen, gefiltert). Es gibt allerdings eine Betrachtungsweise auf Ports, die mehr Zustände zulässt. So kennt der Port-Scanner NMAP insgesamt sechs Port-Zustände, die wir hier aber nicht weiter betrachten.

Open / Offen

Der Zustand "Open" oder "Offen" ist dann gegeben, wenn auf einem spezifischen Port eine Anwendung lauscht. Damit ist gemeint, dass man zu dieser Anwendung über diesen Port eine Verbindung aufbauen kann.

Closed / Geschlossen

Der Zustand "Closed" oder "Geschlossen" ist der Standardzustand. Er ist dann gegeben, wenn auf einem spezifischen Port keine Anwendung lauscht und der Host eine Verbindung zu diesem Port aktiv ablehnt. Damit ist gemeint, dass es keine Anwendung gibt zu der man eine Verbindung aufbauen kann. Zumindest gibt es auf Anwendungsebene keine Verbindungsmöglichkeit.
Der Zustand "Geschlossen" kann auch dann gelten, wenn das kontaktierte System durch eine Firewall geschützt ist und die Verbindungsversuche auf einem bestimmten Port aktiv ablehnt.

Filtered / Gefiltert (Blocked / Geblockt)

Der Zustand "Filtered" oder "Gefiltert" ist dann gegeben, wenn der kontaktierte Port durch eine Firewall geschützt ist und auf Verbindungsversuche nicht antwortet. Das heißt, die Verbindung wird weder bestätigt (Offen) oder abgelehnt (Geschlossen).
Der Zustand "Gefiltert" drückt aus, dass der Port nicht erreicht werden kann, weil er durch eine Firewall-Regel blockiert wird. Dieser Zustand kann aber auch dadurch entstehen, dass der kontaktierte Host gar nicht erreichbar ist.

Was ist ein offener oder geschlossener Port?

Was bedeutet es, wenn von einem "offenen Port" die Rede ist? Ein Port gilt dann als offen, wenn eine Anwendung an einem Port Datenpakete entgegennimmt, die an diesen Port geschickt werden, ohne dass die Anwendung dieses Datenpaket angefordert hat.
Ein Port wird dann "geöffnet", wenn eine Anwendung gestartet wird, die an diesem Port "lauscht".
Ein Port gilt als "geschlossen", wenn keine Anwendung an diesem Port "lauscht". Man kann einen Port also nur dadurch schließen, in dem man das betreffende Programm beendet. Werden Datenpakete trotzdem an diesen Port geschickt, werden sie zurückgewiesen.

Wie kann man sich vor "offenen Ports" schützen?

"Offene Ports" sind dann ein Problem, wenn der Anwender von dem offenen Port, also vom Starten einer Anwendung, die auf den Port hört, nichts mitbekommt. Zum Beispiel, wenn die Anwendung im Hintergrund läuft. Das können Systemdienste, aber auch Schadsoftware sein. Ein unerwünschter offener Port wäre dann eine Sicherheitslücke.
Um zu verhindern, dass ein Port unberechtigterweise geöffnet wird, wird oft eine Firewall oder ein Portfilter vorgeschaltet, der Verbindungen von außen verhindert.

Als Anwender kann man sich vor dem Öffnen eines Ports durch eine unberechtigte Anwendung dadurch schützen, dass man eine Desktop-Firewall installiert, die vor Verbindungsversuche von innen nach außen warnt und explizit um Erlaubnis fragt. Auf diese Weise kann man verhindern, dass Anwendungsprogramme nicht zum Einfallstor werden.

Portknocking

Portknocking ist die Idee, auf der einen Seite Dienste vor potenziellen Angreifern zu verstecken und auf der anderen Seite trotzdem Verbindungen herstellen zu können.
Dazu hat ein bestimmter Port keinen offenen Zustand. Um trotzdem eine Verbindung auf diesen Port herstellen zu können, muss der entfernte Host eine Klopfsequenz generieren, die aus einer Reihe von Verbindungsversuchen auf gefilterte Ports besteht. Diese Verbindungsversuche werden von einer Firewall verworfen und zusätzlich aufgezeichnet. Ein Portknocking-Daemon überwacht die Firewall-Protokollierung. Erkennt er eine Klopfsequenz, ändert er die Firewall-Regeln, um einen oder mehrere Ports zu öffnen. Nachdem die gewünschten Ports offen sind, kann der entfernte Host eine reguläre Verbindung aufbauen. Mit einer weiteren Klopfsequenz kann der Port wieder geschlossen werden.

Standard-Ports aus Sicherheitsgründen ändern?

Standard-Ports, zwischen 0 und 1.023 haben den Nachteil, dass die Zuordnung zwischen Port-Nummer und Anwendung bekannt ist. Was Absicht und auch gut ist. Ein Webbrowser weiß, dass ein Webserver auf Port 80 zu erreichen ist.
Es gibt aber auch Anwendungen, die den Nutzer Authentifizieren müssen. Zum Beispiel SSH zur Remote-Steuerung oder Fernwartung. Ein Angreifer macht sich mit dem Wissen, dass der SSH-Server auf Port 22 hört, zu Nutze, um seine Angriffe auf diesen Port laufen zu lassen, um die Authentifizierung zu umgehen. Sein Ziel wäre, die Kontrolle über den Server per SSH zu übernehmen.
Wenn ein Angreifer einen Server unter seine Kontrolle bringen will, dann wird er also versuchen, den SSH-Server anzugreifen. Um das zu verhindern, gehen manche Systemadministratoren dazu über, Dienste, wie zum Beispiel SSH, auf andere, als den Standard-Port hören zu lassen. Damit erschweren Sie es Angreifern eventuelle Schwachstellen allzu leicht zu finden. Denn wenn ein Angreifer einen SSH-Server nur auf Port 22 vermutet, der richtige Port aber woanders liegt, dann lässt sich auf diese Weise ein Angriff vielleicht verhindern.
Das ist allerdings nur bedingt richtig. Korrekt ist, dass man mit dem Verschleiern von Ports nur automatisierte Port-Scans und unerfahrende Script-Kiddies davon abhalten kann, angreifbare Dienste zu finden. Den erfahrenen Angreifer, der wirklich in ein System eindringen will, wird man so nicht davon abhalten, sondern seine Bemühungen höchstens verzögern.
Dazu muss der Angreifer alle 65.536 Ports eines Systems scannen und die tatsächlich dahinter lauschenden Anwendungen prüfen. Das ist natürlich aufwendig, aber nicht unvorstellbar. Mit den richtigen Tools und genug Zeit bekommt man es heraus, wenn ein SSH-Server auf einem anderen Port hört.

Standard-Ports zu ändern ist für normale Nutzer ein großer Nachteil. Die müssen wissen, auf welchem Port welcher Dienst läuft. Da typische Clients von Standard-Ports ausgehen, muss bei der Adressierung immer der geänderte Port bekannt gegeben werden. Das ist einerseits unbequem. Andererseits wird es schnell kompliziert, wenn verschiedene Systeme für den gleichen Dienst unterschiedliche Port-Nummern aufweisen. Aus diesem Grund definiert man dann die Port-Vergabe wieder zentral, was dann allerdings den Nachteil hat, dass man es einem Angreifer dann wieder leichter macht.

Eine grundsätzliche Empfehlung kann man nicht so einfach geben. Das Anwendungen auf Standard-Ports leichter anzugreifen sind, ist klar. Allerdings muss man die Port-Änderung gut überlegen. Wo es sinnvoll ist, ist bei Systemen, die über das Internet erreichbar sind. Um die Last auf die Systeme zu begrenzen, macht es Sinn Standard-Ports für SSH und andere Remote-Zugängen zu ändern. Das verhindert, dass systematische Port-Scans auf einen offenen SSH-Port treffen.

Andererseits muss man die aufgestellte Sicherheits-Policy anzweifeln, wenn Standard-Ports geändert werden müssen, weil ein Sicherheitsrisiko vorliegt. Wenn das so sein sollte, dann ist der eigentlich richtige Weg, Verbindungen von entfernten Rechnern auf diesen Port gar nicht zu erlauben. Zum Beispiel sollte der SSH-Server nur lokal, aber nicht aus dem öffentlichen Netz erreichbar sein.
Wenn es sich nicht vermeiden lässt, dann muss man sich darüber im Klaren sein, dass auf so einem Server keine kritischen Daten liegen und Anwendungen laufen dürfen. Weil so ein System ist dann grundsätzlich angreifbar. In so einem Fall sind dann zusätzliche Sicherheitsmaßnahmen notwendig. Das Ändern des Standard-Ports ist dann nur eines davon.

Weitere verwandte Themen:
  • TCP - Transmission Control Protocol
  • UDP - User Datagram Protocol
  • TCP/IP
  • Firewall
  • ICMP - Internet Control Message Protocol

Vergleichen Sie diesen Kurs mit ähnlichen Kursen
Mehr ansehen