当記事では、AWS Network Firewallの設定方法について記載します。
目次
AWS Network Firewallとは
AWS Network Firewallとは、VPC内に配置するファイアウォールであり、インターネットやVPC間との通信を検査及び制御することができます。許可する通信、拒否する通信等をルール別で定義するため、Fortinet社のFortiGateやPaloAlto Networks社のPaloAltoのように柔軟に通信を制御することができます。
ルールは2種類に分かれており、それぞれの特徴は以下の通りです。
ステートフルルール
- 送信元IP、送信元ポート、送信先IP、送信先ポート、プロトコルの5つを指定し、条件に一致するトラフィックに対するアクションを決めることができます。なお、ルールの順序は自由に決めることもできます。
- ドメイン名を指定し、そのドメインへの通信のアクションを決めることができます。
- Suricateルール構文を使用して、侵入防止システム(IPS)ルールを作成することができます。
- AWS側が作成した、ドメイン及びIPルール、脅威署名ルールを使用することができます。
ステートレスルール
- 優先度、プロトコル、送信元IP、送信元ポート、送信先IP、送信先ポート、TCPフラグ(オプション)を指定し、条件に一致するトラフィックに対するアクションを決めることができます。
設定方法
今回は、以下のネットワーク構成でAWS Network Firewallを構築し、EC2端末からインターネットへの通信を制御できます。
ネットワーク構成図
設定手順
※VPC、各サブネット[NAT Gateway, Firewall, Private]、インターネットゲートウェイ、NATゲートウェイ、EC2端末の設定方法については割愛します。
ファイアウォールポリシーの作成
- コンソールより「ネットワークファイアウォール」タブの[ファイアウォールポリシー]を選択し、[ファイアウォールポリシーを作成を押下します。先にファイアウォールポリシーを作成する理由は、後述する[ルールの順序]にて[厳格]を選べるようにするためです。[厳格]を選択することで、Fortinet社のFortiGateやPaloAlto Networks社のPaloAltoのように、暗黙のdeny(遮断)ルールを定義することができます。
- ファイアウォールポリシーの名前、ストリーム例外ポリシーを設定し、[Next]を押下します。
- ステートレスデフォルトアクションを設定します。
- ステートフルルール評価の順序とデフォルトのアクションを設定します。
[ルールの順序]にて[厳格]を選択し、[デフォルトのアクション]にて[すべてをドロップ]を選択します。これで暗黙のdeny(遮断)ルールを作成できます。
なお、デフォルトのアクションを[すべてアラート]とした場合、アラートログが出力されつつ通信は許可されます。
- ステートレス/ステートフルルールグループは後ほど追加するため、ここでは何も追加せず[Next]を押下します。
- 暗号化オプションの選択はせず、[Next]を押下します。
- タグを追加する場合はタグを追加して、[Next]を押下します。
- 確認画面が表示されるため、内容に問題なければ[ファイアウォールポリシーを作成]を押下します。
ファイアウォールの作成
- コンソールの[ネットワークファイアウォール]タブの[ファイアウォール]を選択し、[ファイアウォールを作成]を押下します。
- 名前、VPC、サブネット等を設定します。
- 上記で作成したファイアウォールポリシーを関連付けます。
- デフォルトにします。
- タグをつける場合は、タグを追加します。
- [ファイアウォールを作成]を押下します。
ルールグループの作成
- コンソールの[ネットワークファイアウォール]タブの[Network Firewallのルールグループ]を選択し、[ネットワークファイアウォールのルールグループの作成]を押下します。
- [ルールグループタイプ]を選択します。
今回は、[ステートフルルールグループ]を選択します。
- 名前、キャパシティー、ステートフルルールグループのオプション等を設定します。
今回は、ステートフルルールグループのオプションでは[5-tuple]を選択します。
- ルールの順序を設定します。
今回は、自由にルールの順序を指定するため[厳格]を選択します。
なお、デフォルトを選択した場合は、順序に関係なくパスルール→ドロップルール→アラートルールの順で通信が精査されます。
- ルール変数、IPセット参照は設定しません。
- ルールを追加します。
各項目を設定したら、[ルールの追加]を押下します。
- ルールが追加されると、[ルール]にてルールの一覧が表示されます。
また、この画面からルールの順序設定や削除を行うことができます。
- タグを追加する場合は、タグを追加します。
- [ステートフルルールグループを作成]を押下します。
- コンソールの[ネットワークファイアウォール]タブの[Network Firewallのルールグループ]を選択し、[ファイアウォールポリシーにルールグループを追加]を押下します。
- 作成したルールグループを追加するファイアウォールポリシーを選択し、「Next」を押下します。
- [ルールグループ]にて、追加するルールグループを選択します。
ここでは、先ほど作成したルールグループを選択します。
- 「ドメインおよび IP ルールグループ」、「脅威署名ルールグループ」は設定せずに「Next」を押下します。
- タグを追加する場合は、タグを追加します。
- 確認画面が表示されるため、内容に問題なければ[ファイアウォールポリシーにルールグループを追加]を押下します。
ファイアウォールポリシー及びルールグループが正しく連携されているかの確認
- コンソールの[ネットワークファイアウォール]タブの[ファイアウォール]を選択し、作成したファイアウォールの名前を押下します。
- 「ファイアウォールの詳細」タブを選択します。
- 下にスクロールし、[設定の同期状態]にて作成したファイアウォールポリシーとルールグループがファイアウォールに紐づいていることを確認します。
ルーティングテーブルの設定
- Network Firewallを経由して通信が流れるようにするため、各サブネットにおけるルーティングテーブルの設定をします。
各サブネット別のルーティングテーブルは以下の通りです。
NAT Gateway Subnet
送信先 | ターゲット |
0.0.0.0/0 | インターネットゲートウェイ |
192.168.0.0/24 | local |
192.168.0.64/27 | Network Firewall |
Firewall Subnet
送信先 | ターゲット |
0.0.0.0/0 | NATゲートウェイ |
192.168.0.0/24 | local |
Private Subnet
送信先 | ターゲット |
0.0.0.0/0 | AWS Network Firewall |
192.168.0.0/24 | local |
以上で、AWS Network Firewallの設定は完了となります。
運用における注意点
Fortinet社のFortiGateやPaloAlto Networks社のPaloAltoでは、通信を許可しつつ、アラートログを出す設定を行うことが可能です。そのため、AWS Network Firewallでも同様に行えるよう、ルールグループのルールにて以下のようにアラートルールを定義した場合、想定通りの結果とならず、通信が許可されない場合があります。
以下のルールは、www.secuavail.com(18.180.167.106)宛てへのHTTPS通信を許可しつつ、アラートログとして出力されることを想定していますが、通信は許可されません。
通信が許可されない理由は、ファイアウォールポリシーのデフォルトのアクションが[すべてをドロップ]と設定しているためです。
AWS Network Firewallのルールグループでルール順序を[厳密]と設定している場合、アラートルールとはアラートを出すためだけにあるルールであり、アラートルールがあるからといって、通信が許可されるわけではありません。アラートルールに合致してもルールの精査は終わらず、他に合致するルールが無いか、ルールの精査が続きます。つまり、アラートルールより下に許可のルールが無ければ、ファイアウォールポリシーのデフォルトのアクションが適用されることとなり、上記の例では通信がドロップされてしまいます。
そのため、AWS Network Firewallのアラートルールの仕様は、FortiGateやPaloAltoと異なるため、運用する場合は注意が必要です。
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。