こんにちは。弁護士ドットコム SRE 室のテイです。
今年(2021年)3 月にリリースされた Amazon Route 53 Resolver DNS Firewall を検証してみました。
DNS Firewall とは
DNS Firewall は VPC からのアウトバウンド DNS リクエストを保護するサービスです。保護方法は以下のとおりです。
- 特定のドメイン名以外の名前解決をさせない
- 不良と判別されているドメイン名の名前解決をさせない
作成手順
Route 53 Resolver DNS Firewall という名前ですが、作成は Route53 ではなく、VPC のコンソールからです。
VPC コンソール画面で「DNS FIREWALL」→「ルールグループ」→「ルールグループを作成」の順でクリックします。
ルールグループの名前を記入して、「Next」をクリックします。
ルール追加画面でルールの名前を記入します。
ドメインリストで「独自のドメインリストを追加」と「AWS マネージドドメインリストを追加」を選択できます。
今回は検証するため、「独自のドメインリストを追加」を選択します。
「新しいドメインリストを作成」を選択して、ドメイン名を記入して、ブロックしたいドメイン名を記入します。検証のため、www.google.co.jp をリストに入れました。
今回は対象ドメインをブロックするため、Action では BLOCK を選択します。
- ALLOW:ドメインリストにあるドメインへのアクセスを許可する
- BLOCK:ドメインリストにあるドメインに対する名前解決できないようブロックする
- ALERT:アクセスを許可するけれど、DNS クエリログではアラートとして記録される
ルールを追加した後、「Next」ではなく、「ルールを追加」ボタンをクリックします。間違って「Next」をクリックすると、設定したルールが追加されず、次の画面に行ってしまいます。
ちなみに、以下の2つが AWS からマネージドドメインリストとして提供されています。
- AWSManagedDomainsMalwareDomainList(既知のマルウェアの通信先ドメインのリスト)
- AWSManagedDomainsBotnetCommandandControl(既知のボットネットの Command & Control サーバのドメインのリスト)
どのようなドメインがこれらに含まれているか公表されてはいませんが、本番運用の時にマネージドドメインリストを利用するのが良いでしょう。
上記の画面で「ルールを追加」ボタンをクリックして、設定されたルールが追加されました。この画面で「Next」ボタンをクリックします。
複数ルールがある場合、優先度を設定し、「Next」をクリックします。
最後、タグの設定画面と確認画面がありますが、省略します。
ルールグループを作成した後、VPC と関連付けます。
対象ルールグループを選択して、下にある「関連付けられた VPC」をクリックして、「VPC を関連付け」をクリックします。
対象 VPC と関連付けた後、しばらくすると、ステータスが「完了」になりまして、DNS Firewall が動作し始めます。
動作確認
ルールグループと関連付けられた VPC 内で EC2 インスタンスを起動して、www.google.co.jp へアクセスしてみます。今回は curl
とnslookup
コマンドでテストしてみました。
「ルールを追加」画面で、BLOCK アクションを選択すると、NODATA、NXDOMAIN、OVERRIDE 3つからどのように応答するかが設定できます。それぞれをテストしてみます。
NODATA
NODATA はクエリは成功したが、当該クエリについて利用可能な応答がないという結果になります。
NODATA に設定すると、 curl によるアクセスは対象ドメイン名の名前解決ができず、ちゃんとブロックされました。また、nslookup
では No answer
が表示されました。
$ curl -v www.google.co.jp
* Rebuilt URL to: www.google.co.jp/
* Could not resolve host: www.google.co.jp
* Closing connection 0
curl: (6) Could not resolve host: www.google.co.jp
$ nslookup www.google.co.jp
Server: 10.50.0.2
Address: 10.50.0.2#53
Non-authoritative answer:
*** Can't find www.google.co.jp: No answer
NXDOMAIN
NXDOMAIN はクエリ内のドメイン名が存在しないという結果になります。
NXDOMAIN にする場合、curl の結果は同じになるのですが、nslookup
を実行すると、NXDOMAIN
が表示されることが分かります。
$ nslookup www.google.co.jp
Server: 10.50.0.2
Address: 10.50.0.2#53
** server can't find www.google.co.jp: NXDOMAIN
OVERRIDE
OVERRIDE はクエリに対するカスタムオーバーライドの応答を提供します。
ルールの編集画面で、「OVERRIDE」を選択して、当社が利用している情報共有サービス esa.io のドメインをオーバーライド用ドメインとして記入し、レコードタイプは CNAME を選択します。(CNAME しか選択できません)
curl
を実行して、301 になりまして、リダイレクトされたことが分かります。
$ curl -v www.google.co.jp
* Rebuilt URL to: www.google.co.jp/
* Trying 54.199.**.**...
* TCP_NODELAY set
* Connected to www.google.co.jp (54.199.**.**) port 80 (#0)
> GET / HTTP/1.1
> Host: www.google.co.jp
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: awselb/2.0
< Date: Tue, 08 Jun 2021 07:18:49 GMT
< Content-Type: text/html
< Content-Length: 134
< Connection: keep-alive
< Location: https://www.google.co.jp:443/
<
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
</body>
</html>
* Connection #0 to host www.google.co.jp left intact
nslookup
コマンドでも確認してみます。 www.google.co.jp に対するクエリには [team 名].esa.io の Public IP が返ってきています。
$ nslookup www.google.co.jp
Server: 10.50.0.2
Address: 10.50.0.2#53
Non-authoritative answer:
www.google.co.jp canonical name = [team 名].esa.io.
Name: [team 名].esa.io
Address: 52.194.**.**
Name: [team 名].esa.io
Address: 54.199.**.**
以上、Amazon Route 53 Resolver DNS Firewall の検証でした。
次回はブロック対象のドメインへアクセスすることが検知され、Slack へ通知する監視設定を紹介します。