ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

DNS Firewallを活用してVPCのDNSアクセス制御を強化する

この記事を共有する

目次

はじめに

こんにちは!パーソル&サーバーワークスの野間です。

普段利用しているEC2インスタンスでは、セキュリティ対策としてセキュリティグループで必要なポートのみを開放するようにしています。 しかし、それだけでは意図しない外部ドメインへのアクセスを防ぐことができないため、ドメインベースでの制御を目的に、Route 53 Resolver DNS Firewall (以下、DNS Firewall) の導入を検討しました。

この記事では、DNS Firewallを使って特定のドメインのみ名前解決できるように構成する方法を、実際に手を動かして試した手順とともに紹介します。

DNS Firewallについて

DNS Firewallは、Amazon Route 53 Resolverと連携してVPCからのDNSクエリを検査・制御できるサービスです。 ドメインベースで通信の許可・拒否を定義するルールグループを作成し、それをVPCに関連付けることで、VPCレベルのセキュリティを強化できます。

参考:Route 53 Resolver DNS Firewall の仕組み

DNS Firewallを作成する

それでは早速VPCコンソールからDNS Firewallを作成します。 今回は「persol-serverworks.co.jp」への通信のみ許可するルールを作成したいと思います。

DNS Firewall ルールグループの作成

  1. VPCコンソールの画面左ペインから [DNS ファイアウォール] > [ルールグループ] を選択します。
  2. [ルールグループを作成] を押下します。 画像1.png
  3. ルールグループ名を入力して、[ルールグループを追加] を押下します。 画像2.png

許可ルールの作成

次に作成したルールグループに許可ルールを設定していきます。

  1. 先程作成したルールグループの画面から、[ルールを追加] を押下します。 画像9.png
  2. [カスタムドメインリスト] > [新しいドメインリスト] を押下します。
  3. 「persol-serverworks.co.jp」を追加します。 画像4.png
  4. アクションは [ALLOW] を選択します。
  5. [ルールを追加] を押下します。 画像5.png

※注意:ここで指定した「persol-serverworks.co.jp」はあくまでこのドメイン単体に対する許可です。サブドメインも許可したい場合は、「*.persol-serverworks.co.jp」などワイルドカードを使って指定する必要があります。

拒否ルールの作成

このままでは「persol-serverworks.co.jp」以外のドメインへの通信も許可されています。 次に拒否ルールを作成していきます。

  1. 先程作成したルールグループの画面から、[ルールを追加] を押下します。
  2. [カスタムドメインリスト] > [新しいドメインリスト] を押下します。
  3. 「*」を追加します。 画像6.png
  4. アクションは [BLOCK] を選択します。
  5. [ルールを追加] を押下します。 画像7.png

VPCとの関連付け

最後にDNS FirewallとVPCを関連付けます。

  1. ルールグループの画面から [関連付けられたVPC] タブを選択します。
  2. [VPCを関連付け] から関連付けしたいVPCを選択します。 画像10.png

EC2から動作確認

設定が完了したので、EC2から動作確認を行います。 今回はnslookupコマンドを使い、名前解決が行えるかテストしました。

persol-serverworks.co.jpへの名前解決結果

$ nslookup persol-serverworks.co.jp

Server: xx.xx.xx.xx Address: xx.xx.xx.xx#53
Non-authoritative answer: Name: persol-serverworks.co.jp Address: 48.210.41.187

google.comへの名前解決結果

$ nslookup google.com

Server: xx.xx.xx.xx Address: xx.xx.xx.xx#53
Non-authoritative answer: *** Can't find google.com: No answer

無事にpersol-serverworks.co.jp以外のドメインへの通信をブロックできました! CloudFormationを使って構築する場合は、以下テンプレートファイルを使うことで作成が行えます。

DNS Firewall用 CloudFormationテンプレート


AWSTemplateFormatVersion: '2010-09-09'
Description: DNS Firewall rule group with whitelist and default deny rule
Parameters:
  VpcId:
    Type: String
Resources:
  DomainListAllow:
    Type: AWS::Route53Resolver::FirewallDomainList
    Properties:
      Domains:
        - "persol-serverworks.co.jp"
      Name: "AllowList"
  DomainListBlock:
    Type: AWS::Route53Resolver::FirewallDomainList
    Properties:
      Domains:
        - "*"
      Name: "BlockAll"
  RuleGroup:
    Type: AWS::Route53Resolver::FirewallRuleGroup
    Properties:
      Name: "AllowOnlySpecificDomain"
      FirewallRules:
        - Action: ALLOW
          FirewallDomainListId: !Ref DomainListAllow
          Priority: 1
        - Action: BLOCK
          FirewallDomainListId: !Ref DomainListBlock
          Priority: 2
          BlockResponse: NODATA
  RuleGroupAssociation:
    Type: AWS::Route53Resolver::FirewallRuleGroupAssociation
    Properties:
      FirewallRuleGroupId: !Ref RuleGroup
      Priority: 200
      VpcId: !Ref VpcId
      Name: "associatewithvpc"

まとめ

DNS Firewallを使うことでドメインベースで柔軟なアクセス制御が可能になります。 特定のドメインのみを許可し、その他のドメインはすべてブロックするといったホワイトリスト方式の実装も容易です。

ドメインベースでの通信制御が必要なユースケースでは、DNS Firewallの活用をぜひご検討ください。

最後までお読みいただきありがとうございました!

この記事は私が書きました

野間 太一

記事一覧

猫とCloudFormationが好きです。

野間 太一

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。