DNSFWを使ってドメインをブロックしてみた

はじめに

お世話になっております、yasuokaです。
今回は、AWS Route 53 Resolver DNS Firewall(以下、DNSファイアウォール)を使用して、
特定のドメインに対するアクセスをブロックする仕組みを、CloudFormationテンプレートを用いて構築した内容を紹介します。

目次

  1. AWS Route 53とRoute 53 Resolverの関係、DNSファイアウォールの概要
  2. 構成図
  3. CloudFormationソースコード
  4. 実際にドメインをブロックできるか検証
  5. まとめ

1. AWS Route 53とRoute 53 Resolverの関係、DNSファイアウォールの概要

AWS Route 53とは?

AWS Route 53は、ドメインネームシステム(DNS)サービスを提供するマネージドサービスで、ドメインの登録、DNSの名前解決、およびヘルスチェックの機能を備えています。

Route 53 Resolverとは?

Route 53 Resolverは、VPC内のリソースがDNSクエリをインターネットや他のAWSサービスに解決するための機能を提供します。これにより、VPC内のインスタンスがパブリックドメインやプライベートホスト名の名前解決を行うことができます。

DNSファイアウォールとは?

AWS Route 53 Resolver DNS Firewallは、特定のDNSクエリに対してブロックや許可のルールを設定できるサービスです。たとえば、特定のドメイン(今回はGoogleドメイン)へのアクセスをブロックするルールを設定できます。これにより、セキュリティやコンプライアンスの向上が期待できます。


2. 構成図

以下の構成図は、今回構築したシステムのDNSFWの動きを簡単に示しています。


3. CloudFormationソースコード

YAML形式にて記述しております。
下記ソースコードにてDNSファイアウォールの作成とブロックするドメインリスト、VPCに関連付けを行うことができます。

DNSファイアウォール

  DNSFirewallDomainList:
    Type: "AWS::Route53Resolver::FirewallDomainList"
    Properties:
      Domains:
        - "*.google.com"
      Name: "BlockGoogleDomainsList"

  DNSFirewallRuleGroup:
    Type: "AWS::Route53Resolver::FirewallRuleGroup"
    Properties:
      Name: "BlockGoogleRuleGroup"
      FirewallRules:
        - Action: "BLOCK"
          BlockResponse: "NXDOMAIN"
          FirewallDomainListId: !Ref DNSFirewallDomainList
          Priority: 100

  FirewallRuleGroupAssociation:
    Type: "AWS::Route53Resolver::FirewallRuleGroupAssociation"
    Properties:
      FirewallRuleGroupId: !Ref DNSFirewallRuleGroup
      VpcId: !Ref MyVPC
      Priority: 101
      Name: "AssociateGoogleBlockToVPC"

Outputs:
  VPCId:
    Description: "The ID of the VPC"
    Value: !Ref MyVPC
  EC2InstanceId:
    Description: "The ID of the EC2 instance"
    Value: !Ref EC2Instance
  FirewallRuleGroupId:
    Description: "The ID of the DNS Firewall Rule Group"
    Value: !Ref DNSFirewallRuleGroup

このセクションでは、「google.com」やそのサブドメインをブロックするDNSファイアウォールルールを作成しています。

4. 実際にドメインをブロックできるかどうか検証

検証

  1. CloudFormationスタックが正常に作成されたら、EC2インスタンスに接続します。
  2. dig google.com などのコマンドを使用して、Googleドメインがブロックされていることを確認します。期待される結果は NXDOMAIN です。


statusがNXDOMEINになっているので成功です。

3.ほかのドメインで検証してみました。

ブロックリストに載っていないドメインは名前解決できてしまいます。

5. まとめ

AWS Route 53 Resolver DNS Firewallを使用すると、特定のドメインに対するアクセス制御が簡単に行えます。
今回はGoogleドメインをブロックするシナリオを紹介しましたが、他のドメインやカスタムルールにも応用できます。
DNSレベルでのセキュリティを強化したい場合、非常に有効な手段と感じました。

Last modified: 2024-10-01

Author