俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

エフェメラルポート出現に見るGoogle検索ってすげぇなって思うこと - 日報 - #151

ネットワークACLの設定をしていたエンジニアから、
「ふえぇぇ…wgetできないよう…TCP80も開けているのにぃ…」
との報告を受けて、なんだとう!となったわけです。

とにかくAWS公式を読みましょう。
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_ACLs.html#VPC_ACLs_Ephemeral_Ports
HTTPだけなら80だけっども、やれcurlだ、やれwgetだと使うのであれば、
ダイナミックにいろんなポート使うんだよと。
80番だけあけて調子に乗ってっとTCPだからって簡単にゃ通さんぞゴラと。

ホントかいな、ってことで、
watch netstat -tanp
これでもってポートを毎秒監視してみます。
えいって叩くと、見事に30000番台くらいのポートががっつり開きます。
ほっほーなるほどなるほど。

ということで、調べてみましょう。
TCP先生は有名な80番以外をどう使い、
一時ポートとはどの番数のことをいうのか。

でてきたのはIANAという団体です。
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
要はポートやらIPやらの使い方の標準化を目指す団体様ですね。
彼らによるとTCPは3つの領域を使え、とのことだそうです。
http://www.infraexpert.com/study/tea5.htm
こちらがわかりやすいですが、
well knownとregisteredとdynamicの3つの領域があるそうです。
ほうほうなるほど。

ん?
30000番台はregisteredなんだけど、、、
とくに予約登録されているポートではない番号が使われているようです。
はて、そういうダイナミックな使い方は49152番〜なのではないか?
と、おもって「ubuntu 一時ポート」で検索してみたら、
一番上に「エフェメラルポート」のwikipediaが登場。
俺の検索したワードが一文字も含まれていないのに驚愕しつつ開くとビンゴでした。
https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%95%E3%82%A7%E3%83%A1%E3%83%A9%E3%83%AB%E3%83%9D%E3%83%BC%E3%83%88
一時ポートはエフェメラルポートと言って、
OSごとに異なるようです。
超バラバラみたいです。困りますよねこれって。。。
そりゃIANAなる団体が標準化をしたがるのも分かりますね。
んで、Ubuntuはというと、
sudo cat /proc/sys/net/ipv4/ip_local_port_range
というファイルに、
10240 65535
とかいう心の底から雑な形式で規定されていました。
IANAが推奨する49152から65535や、多くのLinuxが採用している32768から61000のどちらでもないという大オチでした。
これって、、、もしUbuntuのバージョンアップなどで変更されたらどうすんだよって話ですよね。ACL書き換えろってことなんすかね。まぁいいんですけど、OSバージョンアップがまた1つ辛くなりました。

日々勉強になりますね。