[小ネタ]NACLでHTTP通信を制限する際の注意点

2020.03.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!! 筧( @TakaakiKakei )です。

今回は、あまり設定する機会が少ない気がしますが、ネットワーク ACL (NACL)で HTTP 通信を制限する際のちょっとした注意点を紹介します。 NACL は以下のように設定する場合が多いと思います。

Amazon EC2 アクセス制御レシピ

インバウンドはデフォルト許可、必要であればブロックを追加

(中略)

アウトバウンドは許可が基本

しかし、NACL で HTTP 通信を制限したいという前提で、ハマりそうなポイントを紹介します。

問題

突然ですが、問題です。 送信元や送信先で利用するポート番号の設定変更等はしていないのですが、以下の設定でマイ IP から HTTP 通信ができません。 なぜ HTTP 通信ができないのでしょうか。

NACL のインバウンドルール:

ルール番号 タイプ プロトコル ポート範囲 送信元 許可/拒否
10 HTTP TCP 80 マイ IP 許可
* すべてのトラフィック すべて すべて 0.0.0.0/0 拒否

NACL のアウトバウンドルール:

ルール番号 タイプ プロトコル ポート範囲 送信先 許可/拒否
10 HTTP TCP 80 マイ IP 許可
* すべてのトラフィック すべて すべて 0.0.0.0/0 拒否

回答

NACL のアウトバウンドルールの送信先ポート範囲の設定が不適切だから。

接続元クライアントによって、HTTP レスポンス時に利用される送信元ポート範囲が異なるため、 想定する接続元クライアントの仕様に沿ったアウトバウンドルールの設定が必要です。

上図の例だと、以下のように NACL のアウトバウンドルールのポートを指定する必要があります。

  • Web ブラウザ1:NACL のアウトバウンドルールの送信先ポートに50000を指定
  • Web ブラウザ2:NACL のアウトバウンドルールの送信先ポートに50001を指定

一般的には、HTTP レスポンス時に利用される送信元ポートには、エフェラメルポートが利用されるかと思います。 そして利用されるエフェラメルポートの範囲は、クライアントのオペレーティングシステムによって変わります。

ネットワーク ACL -> 一時ポート

たとえば、インターネット上の Windows XP クライアントから、お使いの VPC のウェブサーバーにリクエストが送信される場合、ネットワーク ACL には、ポート 1025 ~ 5000 あてのトラフィックを可能にするアウトバウンドルールを用意する必要があります。

Windows XP クライアントからの HTTP 通信を想定するのであれば、NACL のアウトバウンドルールは以下のような設定にすると通信ができるはずです。

NACL のアウトバウンドルール:

ルール番号 タイプ プロトコル ポート範囲 送信先 許可/拒否
10 カスタム TCP TCP 1025-5000 マイ IP 許可
* すべてのトラフィック すべて すべて 0.0.0.0/0 拒否

まとめ

同僚と「マスタリングTCP/IP 入門編第6版」を読んでおり、ネットワーク関連のアウトプットをしたかったので、小ネタを書いてみました。 もう少し日常的に困りそうな問題についてもこれから発信していければと思います!

以上!筧( @TakaakiKakei )でした!

更新履歴

  • 2020/03/18 新規作成