Route53でDNSSECを設定してみた

Route53でDNSSECを設定してみた

前回投稿ドメイン管理をLightsailからRoute53へ移管してみたの終わりで宣言した通り、
今回はRoute53でDNSSECを設定してみることにします

そもそもDNSSECって何?

DNS応答が偽造される仕組み

DNSの仕組み…については前回投稿でやったので省略するとして。

ユーザからの問い合わせを受けて各DNSサーバに問い合わせをするサーバは、処理中に得た
ドメイン情報を一時的にローカルに保存しておくことができます。
(この行為をキャッシング、保存された一時データをキャッシュと呼びます。
この問い合わせをするサーバのことをキャッシュサーバーとも呼ぶのはこのため。)

キャッシュサーバーは16ビットの識別子をリクエストの中に指定して、ネームサーバーへ
問い合わせを行い、レスポンスの中に同じ識別子が含まれていれば、問い合わせに対する応答と
みなす…んですが。
IDは16ビット=65536通りしかないため、悪意ある第三者が総当たりでパケットを
生成したりすることでレスポンスを偽装されてしまう危険性があります。
ホスト名とIPアドレスの対応が悪意ある第三者によって偽装される、ということは
ユーザが特定のサイトに接続できなくなったり、悪意ある第三者が管理する別の(悪意のある)サイトへ
誘導されてしまったりする可能性
が出てきます。
(これをキャッシュポイズニングと言います。悪意ある第三者が使う攻撃手法の一つだったり。)

対策としては、DNS問い合わせに使用するポートをランダム化する、などの手法がありますが、
その中にDNSSECが含まれています。

DNSSECとは

キャッシュポイズニングは正規でないサーバーから偽造されたパケットを正規の応答と誤認してしまう
ことによるものですが、キャッシュサーバーの問い合わせに対して得た応答が、正規のネームサーバーから
の応答によるものかどうか、パケット内容が改ざんされていないかどうか、をキャッシュサーバー側で検証できるようになっています。

この仕組みのことをDNSSECと言い、電子署名という仕組みによって成り立っています。
電子署名とかその周辺の技術(公開鍵暗号とか)について細かいことは割愛します。
(そこまで話し出すと本題(AWS)がそれまくるので…w)
(気が向けば別の投稿で解説するかも…?)

イマイチしっくりこない方は
「DNSSECを導入することで、DNS問い合わせ通信に係る信頼性を高められる
くらいの理解で良いと思います。

設定手順

設定手順を書く、前に注意喚起を1つ。

<注意>
DNSSECの適用・有効化は慎重に実施してください!
特に商用提供中のサービスへ適用する場合は、厳重に確認を行った上で、
サービス提供時間外などに作業を実施することを強く推奨します。

作業中に想定外のトラブルが起きたり、誤って設定してしまったりすると、それらが解消するまで
ドメインの名前解決が出来なくなり、サービスへの影響がモロに出ます。

(Redherringの場合はだれが見てるとも分からないブログしか提供してないので気軽にやりましたがw)
(商用提供中のサービスで「DNSSECの設定ミスって繋がらなくなっちゃいました (・ω≦) テヘペロ」なんて
やった日には地獄を見ること間違いなし、だろうなと。。。)

それではここから設定手順を。

1.Route53から対象のホストゾーンを開く
  「DNSSEC署名」のタブから「DNSSEC署名を有効化する」をクリック

2.キー署名キー(KSK)を作成してDNSSEC署名を有効化する
  KSK名/CMK名は任意の文字列で良き。
  カスタマー管理のCMKで既存のものがあるのであればそれを選択して良いが、Redherringの場合は
  そんな高尚なものはないので大人しく作成。
  (他のものに使用しているキーと下手に共用はしない方が良いんじゃないかな、と思いつつ。。。)

「有効化する」をクリックして1分くらいそのまま待機。

3.有効化完了のダイアログが出たら、作成したKSKの詳細を確認
  作成したKSKにチェックを付けてから「詳細の表示」をクリック

  「信頼チェーンを確立」ブロックの中にパブリックキーなどの情報がある。
  今回レジストラはRoute53なので「Route53レジストラ」をクリックして開く。
  (「別のドメインレジストラ」を開くと10個くらいパラメータが出てきたので、
  それをもとにサードパーティのレジストラ側で登録手続きをすれば良いっぽい?)

  とりあえず「Route53レジストラ」欄にある全情報を記録しておく。
  (パブリックキーは公開しても大丈夫そうだけど一応念のためモザイクを。。。)

4.「登録済みドメイン」からDNSSECを登録したいドメインの管理画面を開く
  「DNSSECキー」タブから「キーの追加」をクリック

5.記録しておいた情報をもとに「DNSSECキーを追加」欄に記載して「追加」をクリック

6.追加が完了すると「Domain Update Successful」というメールが届くので、
  マネコンをリロードして、「登録済みドメイン」の「DNSSECキー」欄にキーが追加されている
  ことを確認する





(参考)DNSSECが正しく設定されているか、ユーザ(クライアント)として確認する方法
Powershellから以下コマンドを実施する

(例2)DNSSEC設定済みの場合の応答(QueryTypeにRRSIGって出てればDNSSECが有効らしい)
PS C:\Users\XXXXX> Resolve-DnsName fugafuga.com -DnssecOk
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
fugafuga.com AAAA 300 Answer YYYY:YYYY:YYY:YYYY:YYYY:YYYY:YYYY:YYYY
fugafuga.com A 210 Answer YYY.YY.YYY.YY

Name : fugafuga.com
QueryType : RRSIG
TTL : 300
Section : Answer
TypeCovered : AAAA
Algorithm : 13
LabelCount : 2
OriginalTtl : 300
Expiration : 2026/07/15 15:51:58
Signed : 2026/07/15 13:46:58
Signer : fugafuga.com
Signature : {5, 57, 26, 140...}

というわけで今回はここまで。