LinuxがIANA Ephemeralポート範囲を使用しないのはなぜですか?


30

ウィキペディアによると

インターネット割り当て番号局(IANA)は、動的ポートまたはプライベートポートの49152〜65535の範囲を提案しています。多くのLinuxカーネルは、ポート範囲32768〜61000を使用します。

IANAの推奨範囲から歴史的な逸脱があるように見えますが、Windows Vista、Windows 7、Windows Server 2008、FreeBSD 4.6+および他の多くがこの範囲に同意しているにもかかわらず、Linuxはまだ際立っています。

しかし、見てみると、見よ:

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

Linuxが標準範囲を採用していないのはなぜですか?

回答:


21

IANAがポートを1023までしか割り当てなかった時代がありました。RFC1700を参照してください。かつてこれは標準でした。ほとんどの場合、RFCのストリームで状況が変わったときに見つけるのに問題はありませんが、ポートを1024から49152に登録済みから割り当て済みに変更するという質問のために、私は不足しました。

Linuxの歴史に関しては、2007年にデフォルトのip_local_port_rangeに関して提起された質問がありました。そのとき、高いポート番号が問題を引き起こし、49152で範囲を始めると少なすぎるかもしれないという恐れから、言及したLinux範囲を使用することが決定されましたプール内のポート番号。これとそのスレッドをご覧ください。当時の表明された考えは、32768から始まることは、IANAの手順の精神の範囲内にあるということでした。これを読んで、開発者は、ほとんどの割り当てが範囲の下部から発生し、上に移動すると想定したと推測します。この記事の執筆時点では、32768〜49152の間に割り当てられた100個を少し超えるポート番号をカウントします(異なるプロトコルは個別にカウントしません)。

範囲が小さすぎると考えられた理由はわかりませんが、2つの理由が考えられます。

  1. ポート番号は、特定の攻撃を阻止するためにランダム化されます。プール内のアドレスが多いほど、この防御はうまく機能します。
  2. アクティビティの多いサーバーでは、ポート番号の枯渇で問題が発生する場合があります。ポートは一時的なものかもしれませんが、その使用は瞬時ではありません。特に、ソケットはTCP終了後数分続くことがあります。

このブログ投稿では2番に触れており、Linuxシステムで異なる範囲のローカルポートを使用したい場合の答えを提案しています。(/etc/sysctl.dを使用して好みの範囲を定義します。特定の競合が発生した場合に使用できるip_local_reserved_portsエントリもあります。これらは、引用した/ proc / sysエントリと一致します。)

要約すれば。Linuxのデフォルトは現在のIANA仕様と一致しませんが、所有者が望むなら、特定のLinuxシステムは一致します。


1
RFC 6056によると、「セクション2.1で述べたように、動的ポートは49152〜65535の範囲で構成されています。ただし、一時ポート選択アルゴリズムは1024〜65535の範囲全体を使用する必要があります。」- ip_local_port_rangeとにかくの値を使用すべきではないようです。
エヴァンキャロル


@evan RFC 6056は、「ローカルホストで特定のサービスを提供するために必要なポート番号は、一時ポートのランダム化に使用できるポート番号のプールに含めるべきではありません」と述べ、「管理者は、ローカルホストによって提供され、対応する登録済みポートのみを除外する必要があります」が、これはOSが通常提供するものではありません。唯一の実用的な除外メカニズムは、下限を上げることです。
jmb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.