自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

network firewall

AWS Network Firewallを使ってみた

「Network Firewall専用のサブネットを用意する必要があるか?」というテーマについて、実際に使いながら理解していきたいと思います。

AWS Network Firewallとは

VPC向けのファイアウォールであり、IDS(侵入検知システム)/IPS(侵入防止システム)によって不正な通信を見つけ出し、それをブロックするマネージドサービスです。

自宅の玄関先に防犯カメラを設置しておき(IDS)、不審な動きをしている人が侵入してきたら警報を鳴らすイメージです。

 

AWS Network Firewall特徴

Internet GatewayからのトラフィックをFirewall Endpointを経由するようにRoute Tableを設定する必要があり、Internet Gatewayに対して「Edgeの関連付け」をを使用して、Route Tableをアタッチする必要がある。

インバウンドのトラフィックを特定の場所にルーティングする必要がある場合にはこの方法での設定が必要となる。

Internet GatewayにRoute Tableをアタッチできることを今回初めて知ったので、非常に勉強になりました。

AWS Network Firewallを理解する上で重要なコンポーネントについて

  • ファイアウォール
  • ファイアウォールポリシー
  • ルールグループ

上記3を理解する必要があります。

 

ファイアウォールとは

AWS Network Firewallではファイアウォール専用サブネットを設定し、そのサブネットに配置されるFirewall Endpointを通過することでトラフィックを検査します。

インターネットからVPCに入ってくる通信をチェックするため、パブリックサブネットに配置します。

VPC内部にあるリソース (例えばEC2)からのトラフィック

VPC内部へのトラフィックへのトラフィックがファイアウォールサブネットに配置されたFirewall Endpointを経由することでトラフィックが検査され、設定ルールに基づいて許可または拒否を行うことができます。

ファイアウォールポリシーとは

ファイアウォールポリシーに対してルールのアクションを定義したものを設定してやることで効果を発揮します。

「ポリシー」なのでイメージはIAM ポリシーと同じようなものをイメージしていただくとわかりやすいかと思います。

ルールグループで定義したルールをファイアウォールポリシーにアタッチするイメージと私は思っています。

network firewall

 

ルールグループとは

5つの項目(※5-tuple)

  • 送信元IP,
  • 送信元ポート番号,
  • 宛先IP,
  • 宛先ポート番号,
  • プロトコル番号

などを定義することで、それらの通信をパス(宛先への送信を許可)するのか、ドロップ(宛先への送信をブロック)するのか、を精査します。

※5-tuple: 通信に必要な5つの情報をまとめたもの指す

ルールグループには2種類存在し、「ステートレスルールグループ」「ステートフルルールグループ」があります。

ステートレスルールグループとは

AWS BlackBeltの資料が分かりやすかったため引用します。

network firewall

「ステートレス」のためネットワークACLと同じようなものと想像してもらえるとわかりやすいかと思いますが、

送信先への通信と、その戻りの送信元から通信を、どのIPやPortからの通信だったらパス/ドロップ/ステートフルルールへ転送の3つのアクションから設定します。

要するに通信を通すための「ルール」とそのルールに基づいた「検査」をステートレスルールグループでは設定します。

ステートフルルールグループとは

こちらもAWS BlackBeltの資料を引用します。

network firewall

ステートレスルールグループの違いは「ステートフル」のため、戻りの通信を気にする必要がありません。セキュリティグループをと同じようなものと思ってもらえるとわかりやすいかと思います。

また、ステートレスルールグループの場合は優先度を数字で設定してどのルールを優先させるかを明示的に設定しますが、ステートフルルールグループの場合はトラフィックをパスするルールが常に優先される仕様であり、ルールに一致しなかったものは「パス」されるようです。

 

実際にやってみる

以下の構成図をもとに作ってみます。

今回はデモのため、最小限の構成で検証してみます。

network firewall

 

事前準備

事前準備としてFirewall Subnet、Protected Subnetはすでに作成している前提で進めます。

またProtected SubnetにApacheをインストールしたEC2(Amazon Linux2)を起動している前提で話を進めます。

/var/www/html/index.htmlHello AWSと表示されるように設定しています。

ファイアウォールの作成

VPCの画面の左ペインからネットワークファイアウォール -> ファイアウォールを選択しファイアウォールを作成します。

ファイアウォール名は任意です。

network firewall

サブネットはFirewall Subnet専用で作成したサブネットを選択します。

network firewall

空のポリシーを作成して関連付けます。

[ルールの評価順序]については[厳密な順序 – 推奨]を選択します。

この[厳密な順序], [アクションの順序]はアクションの評価順序を設定できるか、できないかの違いがあります。

[アクションの順序]のルール評価順はパス -> ドロップ -> アラートの順番でルール評価を行いますが、この順番は固定となります。

対して[厳密な順序]は上記の順番を入れ替えることが可能です。

network firewall

ドロップアクションは[確立された接続のパケットをドロップ]を選択します。

※確立された接続のパケットをドロップとは: どのステートフルルールにも一致しない場合の新たな接続を確立しようとするパケットは、ルールに一致しないためドロップするということです。
例えば、

  • IPアドレス 192.168.0.1/24の範囲からのトラフィックを許可する
  • ポート80, 443のトラフィックは許可する

というルールを設定していた場合、上記ルールに一致しない場合はパケットはドロップされます。

network firewall

上記の内容でファイアウォールを作成します。

ファイアウォールの作成が完了すると、設定したFirewall SubnetにFirewall Endpointが作成されます。

network firewall

ファイアウォールルールグループの作成

今回はステートレスルールで設定していきます。

左ペインのファイアウォールポリシーから空で作成されたポリシーを選択します。

network firewall

ステートレスルールグループの[アクション]からステートレスルールグループを作成します。

network firewall

以下左の画像が送信先(EC2インスタンスのプライベートIPアドレス/Port:80)へのインバウンド通信

右の画像が送信元、戻りの通信の設定です。

network firewall network firewall

ルールアクションはパスを設定して、EC2インスタンスへの80番ポートへの通信を許可します。

network firewall

これでルールグループを作成します。

 

ルートテーブルの設定

Firewall-IGW-rtbの設定

Internet Gatewayにアタッチするルートテーブルを作成し、Edge関連付けでInternet Gatewayにアタッチします。

network firewall

ProtectedSubnetに通信を向けます。

network firewall

ProtectedSbunet-rtbの設定

Firewall Endpointを経由するように通信を向けます。

送信先は0.0.0.0/0ですが、ターゲットをFirewall EndpointにすることでFirewall Endpointを経由してInternet Gatewayへ向かうようになります。

network firewall

Protected Subnetへの関連付けを設定する。

network firewall

Firewall Subnetに関してはルートをInternet Gatewayへ向けます。

network firewall

これでEC2にアクセスしてみます。

network firewall

アクセスできることが確認できます。

それでは実際にFirewallの設定でアクセスを拒否できるかを確認してみます。

インバウンドの通信を「ドロップ」に変更して再度EC2にアクセスしてみます。

network firewall

アクセスできなくなることが確認できました。

network firewall

理解するまでにかなりの時間を要しましたが、今回ハンズオンを通して一通り設定してみて、理解が深まりました。

Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

アバター画像
Yuki_Izumi

32歳から医療業界からエンジニアに転職しました。

野球、バスケ、将棋、絵を描くこと、などなど
色々多趣味ですが、結婚してエンジニアになってからは
すべて疎遠になりました。

生活に余裕ができたらすこーしずつ趣味も実践していきたいと
思っている未熟エンジニアです。

記事一覧