😇

Web Application開発に10080番ポートは使ってはいけない

2021/05/28に公開

要約

  • 現在最新のGoogle Chormeで10080番ポートが使用できなくなった
  • Firefoxではすでにブロック済み
  • NAT Slipstreaming v2攻撃への対応のため
  • ブラウザからアクセスするサーバを建てる場合は10080以外のポートにするべき
  • 回避方法は一応ある

Chrome 91以降は10080番ポートがブロックされる

Google Chormeの91 (2021/05/25 リリース)から10080番ポートへのサーバに接続できなくなります。

例えば Google Chrome 90だと以下のように10080番のポートを受け付けるサーバにアクセスできますが、91以降だとアクセスできなくなります

%  python -m http.server 10080
Serving HTTP on 0.0.0.0 port 10080 (http://0.0.0.0:10080/) ...
127.0.0.1 - - [28/May/2021 11:27:07] "GET / HTTP/1.1" 200 -

具体的には以下のコミットが入ったからのようです。
https://chromium.googlesource.com/chromium/src/+/d05d4c35dfa87a9da7cf376474dea7c458e129d3

10080番ポートがブロックされる理由

fetchがbad-port扱いにしたのが直接の理由です。
https://fetch.spec.whatwg.org/#port-blocking

Firefoxはすでにブロックしているため、Chromeもそれに続く形のようです。
https://bugzilla.mozilla.org/show_bug.cgi?id=1677940

これはNAT Slipstreaming v2攻撃への対策のためです。
具体的な内容は NAT Slipstreaming v2 攻撃とブラウザ側の対策とかを参照してください。
https://asnokaze.hatenablog.com/entry/2021/01/29/014759

対応策

Firefox/Chromeともにブロックしており、そのうち他のブラウザも追従する可能性がありますし、ブラウザでアクセスするサーバに10080番ポートを利用しないのが良いと思います。
なお、ブラウザの問題なのでサーバ間通信等は問題ないです。

また、Chrome起動時に--explicitly-allowed-ports=10080を設定することで一応は回避可能です。

Discussion