🐕

Route 53 Resolver DNS Firewall を利用してみる

2024/03/03に公開

はじめに

忙しい事にかまけて、記事を全然書いていないことを反省したので、また記事を書き始めたいと思います。
今回は、タイトルにも記載した「Route 53 Resolver DNS Firewall」の機能紹介をしたいと思います。
公式ホームページは、以下を参照してください。
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resolver-dns-firewall.html

本記事の目標

Route 53 Resolver DNS Firewall の機能を理解する。

課題感

EC2 や WorkSpaces を構築する際、セキュリティグループでアウトバウンド通信をフルオープンされている方が多いのではないでしょうか。あるいは、ポート制限くらいはしているかもしれません。ただ、フルオープンにしていると例えば以下のような課題も出てきます。

  1. サーバや端末が不正アクセスで乗っ取られた場合、C&Cサーバなど不正なサーバとの通信を遮断できない
  2. WorkSpacesを利用している場合、ユーザーが内部不正を働いて外部ストレージを利用できてしまう

上記の解決策としては、以下が考えられるかもしれません。

No. 解決策 問題点
1 社内とVPNを接続して、社内のFirewall経由でインターネットに出るようにルーティング設定をし、Firewallで接続先制限を行う VPNの費用が発生する
2 プロキシサーバをEC2で構築する EC2の管理が面倒くさい
3 いっそのことアウトバウンド通信を全拒否する 必要な通信まで制限してしまう(例えばWindowsUpdateとか)

今回は、極力お金と手間をかけずに課題を解決する方法を考えた結果、Route 53 Resolver DNS Firewall が使えるのではと思い、紹介します。

Route 53 Resolver DNS Firewall とは何ぞや

以下は、公式サイトから抜粋。

DNS Firewall では、VPC からのアウトバウンド DNS リクエストを保護できます。これらのリクエストは、ドメイン名の解決用に Resolver を介してルーティングされます。DNS Firewall による保護の主な用途は、データの DNS 漏洩を防ぐことです。

VPCからインターネットに出る際に、デフォルトでは、AWSが用意しているDNSサーバで名前解決がされますが、そのDNSサーバで名前解決の制限をかけます。
なので、手動でDNSサーバ変えたり、hostsファイルで無理矢理名前解決されると対処できないかも。

早速試してみる

Route 53 という名前はついてますが、設定自体は「VPC」から行います。

1. ドメインリストを追加する

まずはじめに、名前解決を許可する(拒否する)ドメインのリストを作成します。

  1. 設定は、「VPC」-「DNSファイアウォール」の「ドメインリスト」をクリックします。
  2. 「ドメインリストを追加」をクリックして、リスト名や登録するドメイン情報を入力して保存します。

これでドメインリストの作成は完了です。必要に応じて、複数作成します。

2. ルールグループを作成する

  1. 左メニューの「DNSファイアウォール」から「ルールグループ」をクリックします。
  2. 「ルールグループを作成」をクリックして、必要情報を記入していきます。
  3. ルール追加の設定画面で、先ほど作成したドメインリストを設定していきます。


    オプションでどのレコードクエリに対して許可(拒否)するかも設定が可能です。
    今回は、「すべてのAレコードを拒否する設定」と「googleへのアクセスを許可する設定」を作成しました。

    拒否設定する場合は、応答の指定 NODATA, NXDOMAIN, OVERRIDE もすることが可能です。
  4. ルールの優先度を設定します。

3. VPC への関連付け

作成したルールグループをVPCに関連付けしてあげる必要があります。
作成したルールグループを選択し、画面下の「関連付けられたVPC」より関連付けを行います。
関連付けが完了するまで少し時間(数分)がかかります。

※AWS Firewall Managerのポリシーも関連付けすることができますが、今回はしません。

4. 検証してみる

EC2でdigコマンドを実行して結果を確認します。

yahoo.co.jpの名前解決ができないことを確認

statusが「NXDOMAIN」になっていることが確認できます。

$ dig yahoo.co.jp

; <<>> DiG 9.16.42-RH <<>> yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 63704
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;yahoo.co.jp.                   IN      A

;; Query time: 10 msec
;; SERVER: 192.168.0.2#53(192.168.0.2)
;; WHEN: Thu Feb 29 13:47:51 UTC 2024
;; MSG SIZE  rcvd: 40

www.google.co.jpの名前解決ができることを確認

statusが「NOERROR」になっていることが確認できます。

$ dig www.google.co.jp

; <<>> DiG 9.16.42-RH <<>> www.google.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7954
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.jp.              IN      A

;; ANSWER SECTION:
www.google.co.jp.       126     IN      A       142.250.196.99

;; Query time: 40 msec
;; SERVER: 192.168.0.2#53(192.168.0.2)
;; WHEN: Thu Feb 29 13:50:01 UTC 2024
;; MSG SIZE  rcvd: 61

まとめ

設定自体は簡単にできました。
今まで意識したことがなかったサービスだったので、今後また使えそうな用途が見つかれば使ってみたいと思います。

Discussion