web-dev-qa-db-ja.com

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

ウィキペディアによる

Internet Assigned Numbers Authority(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が標準の範囲を採用していないのはなぜですか?

30
Evan Carroll

IANAが1023までのポートしか割り当てなかった時代がありました。 RFC17 を参照してください。かつてこれは標準でした。ほとんどの場合、RFCの流れが変わったときに問題なく見つけることができますが、ポートを1024から49152に登録済みから割り当て済みに変更する問題については、思い付きませんでした。

Linuxの歴史に関しては、2007年のデフォルトのip_local_port_rangeについての質問がありました。当時、言及したLinuxの範囲を使用することが決定されました。ポート番号が大きいと問題が発生する可能性があり、範囲4949で開始すると数が少なすぎる可能性があります。プール内のポート番号。 this とそのスレッドを参照してください。当時表明されていた考えは、32768年以降はIANAの手順の精神の範囲内であったとしても、完全に準拠していなかったということです。これを読んで、私は開発者がほとんどの割り当てが範囲の一番下から発生し、上に移動すると想定したと推測します。この記事の執筆時点では、32768から49152までの間に割り当てられた100を超えるポート番号(別のプロトコルを個別に数えない)を数えています。そのため、この5年間はかなりうまくいきました。

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

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

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

要約すれば。 Linuxdefaultsは現在のIANA仕様と一致しませんが、特定のLinuxシステムは、その所有者が望む場合は一致できます。

21
John S Gruber