QUICやHTTP/3で利用を避けるべき送信元ポートの利用状況
どうも、インフラの後藤です。夏休みの自由研究として、HTTP/3について遊んでみたのでよろしくおねがいします。
はじめに
HTTP/3はRFC目前となっており、すでに多くのブラウザがサポートし、ミドルウェアも実装が進められています。また、GCPではCloud CDN やHTTPS Load Balancingですでに利用することが出来ます。
HTTP/3は、トランスポートプロトコルにUDPで動作するQUICを利用しています。このQUICは様々な効率化の仕組みが盛り込まれていて、結果としてHTTPプロトコルの高速化が実現されています。
一方で、少ない環境ではあるものの、QUICが利用できないネットワークがあることも知られています。実際に使用する場合に問題になることはなく、多くの場合はHTTP/2にフォールバックされアクセスが行われます。ですが、国内での実情は調査の余地があると思われます。
今回は、アクセス出来ないネットワークの調査ではありませんが、関連するテーマとして送信元ポートの議論について紹介し、実際に計測してみます。
背景: QUICやHTTP/3で利用を避けるべき送信元ポートの議論
7月に行われたIETF 111のQUIC WGのミーティングにてQUIC実装が利用する送信元ポートについて議論がありました(資料)。
これは、トラフィックの増幅攻撃に使われるNTP(123番)、memcached(11211番)といったポートを送信元ポートとして使うべきではないという議論です。
反射先となる最終的に攻撃を受けるサーバは、これらの送信元ポートのトラフィックをブロックするという対策を取っている場合があります。ブロックされる送信元ポートを使ってしまうと、通信がタイムアウトしてしまいます。
そのため、QUIC(実際にはQUICだけの問題ではない)は、これらのポートを送信元ポートとして設定すべきでないとしています。なお、クライアント実装ではなく、NATによりこれらのポートが送信元ポートとして設定されるることもあるでしょう。
QUICを利用するアプリケーションプロトコルの開発とデプロイに関するドキュメント「Applicability of the QUIC Transport Protocol」では、下記のポートを送信ポートの利用は推奨していません。
1 2 3 4 5 |
* port 53 - DNS [RFC1034] * port 123 - NTP [RFC5905] * port 1900 - SSDP [SSDP] * port 5353 - mDNS [RFC6762] * port 11211 - memcached |
すでに解説・考察を書かれている、記事がございますので。下記、記事も御覧ください。
実測
HTTP/3を有効にしたサーバを用意しアクセスを受け付けました。接続はIPv4のみです。
該当ポートの利用
結論から言うと、実際に下記を送信元ポートに設定したアクセスがありました。
1 2 3 |
* port 1900 - SSDP [SSDP] * port 5353 - mDNS [RFC6762] * port 11211 - memcached |
これらの送信元ポートをブロックしている環境では、ユーザとしてはタイムアウトまで待たされるか、場合によってはHTTP/2へのフォールバックが発生すると考えられます。
サーバ側での送信元ポートのブロックについては、組織の判断によるところでしょう。また、NATの利用ポート範囲についても、プロトコル個々の事情を踏まえるべきかも議論のあるところでしょう。
どうすべきか、結論のない話かとは思いますが、実際にこれらの送信元ポートは使われているようです。
送信元ポートの分布
送信元ポートの分布は次のとおりです。
- TCP (HTTP/1.1, HTTP/2)
- UDP (QUIC)
なお、それぞれTCPもUDPも総量は異なっていますが、それぞれ毎を100%としての分布図になります。
まとめ
くりかえしますが、サーバ側でのブロックやNATでの利用ポート範囲については個々の事情に由来するため、どうするべきかについては言及しません。今回の調査でわかったところとしては次のとおりです。
- 0~1023までの送信元ポートの利用は観測されませんでした。
- 使用が推奨されない、1900, 5353, 11211番が送信元ポートであるアクセスが観測された。
- Android/iPhoneともOSが選択する送信元ポートが傾向として出ているものと思われます
- それ以外のレンジはCGN/NATが影響していると思われる
- TCPとUDPで差がある
特に、TCPとUDPで差がある点については、下記のような事を考えております。
- [仮説1] TCPとUDPでNATの利用ポートが異なる
- [仮説2] QUICが使えず、TCPにフォールバックしているので、CGN/NATの影響がTCPとして観察されやすい
IPv6も追加で調査できれば結果が変わるかもしれませんが、詳しい方が居たら教えて頂ければと思います。
最後に感想として、個人的にはTCPとUDPのトラフィックに差が出て興味深いなと思いました。QUICには様々な機能や特徴があるのでそれらを深堀りして挙動の差などを観測していきたいなと思いました。