はじめに
AWSが提供しているファイアウォールと聞いたら皆さんは何を思い浮かべますか?
セキュリティグループ、ネットワークACL、Network Firewall、Web Application Firewall、Route 53 Resolver DNS Firewall(以下DNS Firewall)などが一般的だと思います。AWSでは、コンピューティングからVPC全体に至るまで、多様なファイアウォールを利用して自身の環境を保護することが可能です。
Network Firewall、SG、NACL、WAFを比較している記事はよく見かけますが、DNS Firewallにスポットライトが当たっている機会が多くないように思うのは私だけでしょうか?(笑
とりわけ、Network FirewallとDNS Firewallはどちらもドメイン名フィルタリング機能を有しているため、違いはよく分からないという方も多いと思います。
そこで本稿では、Network FirewallとDNS Firewallの違いを解説し、もっと多くの方にDNS Firewallの良さを分かっていただければと思っています。
AWS Network Firewall
まずはAWS Network Firewallから見ていきましょう。
AWS Network Firewallは2020年11月に登場した、比較的新しいサービスです。従来AWSから提供されていた類似のファイアウォールはセキュリティグループとネットワークACLですが、これらには以下のような問題がありました。
- IPアドレスとポート番号のみしか使用できない
- VPC全体を保護することができない(セキュリティグループはネットワークインターフェースのみ、ネットワークACLはサブネットのみ)
- ドメイン名に基づいたフィルタリングができない
これらを解決するためにAWSはNetwork Firewallをローンチし、東京リージョンでも2021年5月から利用可能になりました。
Network Firewallには以下の機能※1があります。
-
ファイアウォール
• ステートレスパケットフィルタ(5-tuple)
• ステートフルパケットフィルタ(5-tuple)
• ステートフルパケットフィルタ(ドメインリスト)
• Suricata互換IPS
-
管理
• CloudWatchルールメトリック
• flow log、イベント、ルール別のログ
• S3やCloudWatch Logs、Kinesis Firehoseへのログ格納
• AWS Firewall Managerによる⼀元管理
※1 AWS Network Firewall 入門編より抜粋
Network Firewallに組み込むルールは、ルールグループで作成が可能です。(以下はステートフルルールの場合の設定イメージです。)
AWS Network Firewallの設定手順
実際の設定は以下の手順で行います。
-
VPCにファイアウォールサブネットを作成する
まずはファイアウォールエンドポイントをデプロイするための専用のサブネットを作成します。このサブネットには他のリソースを置かないことが推奨されています。(ファイアウォールサブネットに置かれたリソースからの通信がNetwork Firewallを通らなくなるため) -
ルールグループを作成する
ファイアウォールに追加できるルールのリストであるルールグループを作成します。次の手順で作成するファイアウォールポリシーに、ルールグループを関連付けて使用します。(ファイアウォールポリシーには複数のルールグループを含めることができます。) -
ファイアウォールポリシーを作成する
ファイアウォールポリシーはファイアウォールの動作を定義するものです。具体的には評価の順序、ステートフル、ステートレスおよびその他の設定(プロトコルなど)で構成されています。
AWS は、マルウェアなどの脅威から保護する侵入検知および防御シグネチャのためにAWS Managed Stateful Domain ListとThreat Signaturesも提供しています。以下の画像は一例です。
-
ファイアウォールポリシーをファイアウォールに関連付ける
前ステップで作成したファイアウォールポリシーをファイアウォール作成時に関連付けます。各ファイアウォールは一つのポリシーのみに関連付けることが可能です。(一方、ポリシーは複数のファイアウォールに関連付け可能です。) - ファイアウォールエンドポイントをファイアウォールサブネットに接続する
ファイアウォール作成時に指定したサブネットにファイアウォールエンドポイントが展開されます。なお、トラフィックがこのエンドポイントを通過するようにするにはサブネットルートテーブルのケアが必要です。詳細はAWS公式の以下のブログを参照ください。
Route 53 Resolver DNS Firewall
次にDNS Firewallについて見ていきましょう。
DNS Firewallは、Route 53と完全に統合されており、VPCとは独立して動作するファイアウォールです。DNSクエリに対してのみ動作します。
DNS FirewallはVPC内のアプリケーションからRoute 53 Resolverを通過するアウトバウンドDNSクエリをフィルタリングします。なお、ブロックベースのブラックリスト方式、許可ベースのホワイトリスト形式の両方を利用可能です。
DNS Firewallの使用例
DNSファイアウォールの主な使用例は、DNSの流出を阻止することです。DNSルックアップはネットワークの起点として通信に不可欠な部分ですが、Network FirewallはRoute 53 ResolverからのDNSクエリには使用できません。
セキュリティ観点でDNSクエリに焦点が当たることは少ないように思いますが、プロトコルとしての自由度の高さもあいまってDNSクエリは攻撃に利用されることが特に多いプロトコルです。
DNSを利用した攻撃として有名なものに以下のようなものがあります。
-
DNSトンネリング
簡単に説明すると、DNSクエリのペイロードの中に少しずつテキストを紛れ込ませ、情報流出を狙う攻撃です。(どんなに大きなファイルでも分割して送ることができるので、理論上はなんでも送ることが可能です!)
詳細は以下のパロアルトの記事を参照ください。
DNS Firewallのセットアップ
DNS Firewallは以下の手順で設定します。
-
ドメインリストを定義する
ドメインのリストを定義します。AWSマネージドのドメインリストもあります。
-
ファイアウォールルールグループを作成し、そこにルールを追加する
ルールを含めて作成するか、グループを作成後にルールを追加するかのどちらかです。以下のような形でルールの作成が可能です。
-
ルールグループをVPCに関連付ける
ルールグループをVPCに関連付けることでルールグループに追加したルールがResolverで有効になります。ルールグループの作成ウィザードでは、VPCに関連付けるオプションが出てこないので、作成後にAssociate VPCから関連付けを行う必要があります。
Network Firewall vs DNS Firewall
ここまで記載してきた2種類のファイアウォールを実際に絵にすると、以下のようになります。
2 つのファイアウォールは根本的に異なります。Network FirewallはHTTP/HTTPS通信をスキャンし、DNS FirewallはアウトバウンドDNSクエリをチェックします。Network Firewallは、インバウンドとアウトバウンドの両方のトラフィックの IPアドレス、プロトコル、およびドメイン名をフィルタリングするなど、さらに多くの機能を有します。ただし、Route 53 Resolverによって作成されたクエリへの可視性はありません。DNS Firewallはこのタイプのトラフィックをフィルタリングしてくれるとても大事なファイアウォールです。どちらかを利用する、というよりは、併用することで網羅的に環境をセキュアにすることができます。
まとめ
本稿ではNetwork FirewallとDNS Firewallの違いを説明するとともに、DNS特有の攻撃についても触れました。この記事で多くの方がDNS Firewallがどのように機能するかを理解し、そして何よりもDNS Firewallを愛してくれるとよいなと思っています。AWSマネージドのドメインリストを利用すれば、ものの数分で環境をよりセキュアにできます。ぜひご自身の環境に取り入れてみてください!