Warum verwendet Linux nicht die IANA Ephemeral-Port-Reihe?


30

Laut Wikipedia

Die Internet Assigned Numbers Authority (IANA) schlägt den Bereich 49152 bis 65535 für dynamische oder private Ports vor. Viele Linux-Kernel verwenden den Portbereich 32768 bis 61000.

Obwohl es in der Vergangenheit einige Abweichungen von der von IANA vorgeschlagenen Produktreihe zu geben scheint, scheint es unangenehm, dass sich Windows Vista, Windows 7, Windows Server 2008, FreeBSD 4.6+ und viele andere auf diese Produktreihe geeinigt haben und Linux dennoch auffällt.

Schauen Sie sich das an, siehe da:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768   61000

Warum hat Linux den Standardbereich nicht übernommen?

Antworten:


21

Es gab eine Zeit, in der IANA nur Ports bis zu 1023 zugewiesen hat . Siehe RFC1700 . Zu einer Zeit war dies ein Standard. Die meiste Zeit habe ich keine Probleme zu finden, wann sich die Dinge im Stream von RFCs ändern, aber für die Frage des Wechsels der Ports von 1024 auf 49152 von registriert auf zugewiesen kam ich zu kurz.

In Bezug auf die Linux-Geschichte wurde 2007 eine Frage zum Standard ip_local_port_range gestellt. Zu diesem Zeitpunkt wurde entschieden, den von Ihnen genannten Linux-Bereich zu verwenden, da befürchtet wurde, dass hohe Portnummern Probleme verursachen und der Bereich bei 49152 möglicherweise zu wenige zurücklässt Portnummern im Pool. Sehen Sie dies und seinen Thread. Damals wurde der Gedanke geäußert, dass der Beginn bei 32768 im Sinne der IANA-Verfahren lag, wenn auch nicht vollständig konform. Beim Lesen dieser Informationen schließe ich, dass die Entwickler davon ausgegangen sind, dass die meisten Zuweisungen am unteren Ende des Bereichs erfolgen und nach oben gehen würden. Bei diesem Schreiben zähle ich etwas mehr als 100 zugewiesene Portnummern (ohne unterschiedliche Protokolle als getrennt zu betrachten) zwischen 32768 und 49152, so dass dies in den letzten fünf Jahren ziemlich gut gelungen ist.

Ich weiß nicht, warum der Bereich als zu klein eingestuft wurde, aber ich kann mir zwei Gründe vorstellen:

  1. Portnummern werden zufällig ausgewählt, um bestimmte Angriffe zu verhindern. Je mehr Adressen sich im Pool befinden, desto besser kann diese Verteidigung funktionieren.
  2. Server mit hoher Aktivität können Probleme mit der Erschöpfung der Portnummer haben. Während Ports kurzlebig sein können, erfolgt ihre Verwendung nicht sofort. Insbesondere Sockets können nach dem Schließen von TCP mehrere Minuten dauern.

In diesem Blog-Beitrag wird Nummer 2 angesprochen und eine Antwort vorgeschlagen, falls Sie möchten, dass Ihre Linux-Systeme einen anderen Bereich lokaler Ports verwenden. (Verwenden Sie /etc/sysctl.d, um einen von Ihnen gewünschten Bereich zu definieren. Es gibt auch einen ip_local_reserved_ports-Eintrag, der bei Auftreten eines bestimmten Konflikts hilfreich sein kann. Dieser stimmt mit dem von Ihnen angegebenen / proc / sys-Eintrag überein.)

Zusammenfassend. Die Linux- Standardeinstellungen stimmen nicht mit den aktuellen IANA-Spezifikationen überein, aber jedes bestimmte Linux-System kann dies, wenn der Eigentümer dies wünscht.


1
Laut RFC 6056 "bestehen die dynamischen Ports , wie in Abschnitt 2.1 erwähnt, aus dem Bereich 49152-65535. Bei Auswahlalgorithmen für kurzlebige Ports sollte jedoch der gesamte Bereich 1024-65535 verwendet werden." - Es hört sich so an, als sollte der Wert von ip_local_port_rangeohnehin nicht verwendet werden.
Evan Carroll


@evan RFC 6056 fügt hinzu , dass "Portnummern, die möglicherweise für die Bereitstellung eines bestimmten Dienstes auf dem lokalen Host benötigt werden, NICHT in den Pool der für die vorübergehende Port-Randomisierung verfügbaren Portnummern aufgenommen werden DÜRFEN" und dass "Administratoren Dienste identifizieren sollten, die möglicherweise erforderlich sind" werden vom lokalen Host angeboten und SOLLTEN nur die entsprechenden registrierten Ports ausschließen ", aber das ist nicht etwas, was das Betriebssystem normalerweise für Sie vorsieht. Der einzige praktische Ausschlussmechanismus besteht darin, die Untergrenze anzuheben.
jmb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.