こんにちは。re:Invent 2020 最終日の本日(JST基準)、Route53がDNSSECのサポートを始めるという発表がありました。AWSはDNSSECはやらない方針だという噂を聞いたことがあるので、アメリカで何か流れが変わってきたのかな?と推測しつつ、早速試してみました。Route53のDNSSEC設定方法と検証結果をみなさまと共有します。
目次
- 前提
- 設定
- 検証
- RRSIGについて解説
- 参考資料
前提
- ドメイン: uu1.jp (検証用に持っている本物のドメインです)
- ドメインレジストラー: JPRS
設定
1. AWS Route53でDNSSEC署名の有効化
-
Route53のホストゾーンをクリックすると「DNSSEC署名」という新しいタブメニューが出来ていました。それをクリックします。
-
AWS KMS(Key Management Service)のCMK(Custom Master Key)を作成し、有効化します。
-
「信頼チェーンを確立情報 > 別のドメインレジストラ」でDSレコードを確認し、コピーしておきます。AWS側の作業はこれで終わりです。
2. ドメインレジストラーでDSを登録
ドメインレジストラーのドメインのNameserver設定メニューに入り、上記でコピーしたDSレコードを追加します。
ここは、利用しているドメインレジストラー毎にメニューやUIで差があるので割愛します。
検証
1. digで引いてみる
# dig +dnssec uu1.jp soa
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> +dnssec uu1.jp soa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13724
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;uu1.jp. IN SOA
;; ANSWER SECTION:
uu1.jp. 840 IN SOA ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
uu1.jp. 840 IN RRSIG SOA 13 2 900 20201221022147 20201221000647 4359 uu1.jp. koEqk+5b7nmjMyroGnVprJTYl9IVLfLyoYHowQzbDDjFC0rZkbfu2WpR Jl0scud4UMDKlcicj/jnCzBpJBMetw==
2. drillで引いてみる
# drill -r named.root -k root.key -S uu1.jp soa
;; Number of trusted keys: 1
;; Chasing: uu1.jp. SOA
DNSSEC Trust tree:
uu1.jp. (SOA)
|---uu1.jp. (DNSKEY keytag: 11110 alg: 13 flags: 256)
|---uu1.jp. (DNSKEY keytag: 7052 alg: 13 flags: 257)
|---uu1.jp. (DS keytag: 7052 digest type: 2)
|---jp. (DNSKEY keytag: 18321 alg: 8 flags: 256)
|---jp. (DNSKEY keytag: 46369 alg: 8 flags: 257)
|---jp. (DS keytag: 46369 digest type: 2)
|---. (DNSKEY keytag: 26116 alg: 8 flags: 256)
|---. (DNSKEY keytag: 20326 alg: 8 flags: 257)
;; Chase successful
3. dnsvizでAnalyzeしてみる
ちゃんとチェーンが出来ています。素晴らしい。
RRSIG署名について解説
有効期間
ふと、RRSIGの有効期間を見ると、かなり短いですね。一般的には1週間とか2週間で運用するのが多いのかと思っていましたが、2時間くらいになっています。
# dig @ns-48.awsdns-06.com. +dnssec uu1.jp soa
...
;; ANSWER SECTION:
uu1.jp. 900 IN SOA ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 864
uu1.jp. 900 IN RRSIG SOA 13 2 900 20201218062631 20201218041131 11110 uu1.jp. Qzkzm...(略)
有効期間が2020年12月18日 04:11:31 ~ 2020年12月18日 06:26:31 です。期間が2時間15分です。
TTLが15分と短いのでいいですが、長いとどうなるのでしょうか。1日にしてやってみましょう。
# dig @ns-48.awsdns-06.com. +dnssec ttl-86400.uu1.jp a
...
;; ANSWER SECTION:
ttl-86400.uu1.jp. 86400 IN A 1.1.1.1
ttl-86400.uu1.jp. 86400 IN RRSIG A 13 3 86400 20201219061446 20201218041446 11110 uu1.jp. B9RoA...(略)
2020年12月18日 04:14:46 ~ 2020年12月19日 06:14:46 になりました。期間が1日と2時間になりました。
なるほど。TTL + 2時間 がRRSIGの有効期間ということのようです。
署名タイミング
署名の有効期間開始日時もちょっと気になります。現在時刻になっているような気がします。
試してみましょう。
# dig @ns-48.awsdns-06.com. +norec +dnssec uu1.jp soa
...
;; ANSWER SECTION:
uu1.jp. 900 IN SOA ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
uu1.jp. 900 IN RRSIG SOA 13 2 900 20201218063622 20201218042122 11110 uu1.jp. +3v2yqQSUmPANtvqEmLma5dtrauehT2zEP+5nR5H5Z2P0YUf5jodAE+I PSt8RRTN96BqE4gyxwPrJEAh0EAq8Q==
2秒後
# dig @ns-48.awsdns-06.com. +norec +dnssec uu1.jp soa
...
;; ANSWER SECTION:
uu1.jp. 900 IN SOA ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
uu1.jp. 900 IN RRSIG SOA 13 2 900 20201218063624 20201218042124 11110 uu1.jp. YH5Q+JGAK9KkXiQCt1Wio7AlvSPG2iKu9Yx5jB3sJtd3Qq4CSj25O+34 obVpzeuSaACuckcyDOWLntaln8iywA==
やはり、現在時刻ですね。
あらかじめ署名したZoneを用意するのではなく、Queryが来るたびに署名しているようです。
たくさんあるDNSサーバーにZSKのPrivate Keyを使えるようにするのが大変そうですが、さすがAWSですね。
DNSKEYの署名
レコードセットの中でも、DNSKEYだけは、ZSKではなくKSKで署名されます。
こちらはどうでしょうか。
# dig @ns-48.awsdns-06.com. +norec +dnssec uu1.jp dnskey
...
;; ANSWER SECTION:
uu1.jp. 3600 IN DNSKEY 256 3 13 4rIKNvbTPUfKYk1nJEQvtChbIheFCjpukQlt35iKoKwMag32hEhc124h h6qxQRbrXG7JC4HE0AJyo8+m5SIAYA==
uu1.jp. 3600 IN DNSKEY 257 3 13 /FcqSpmG5z0DXzFOBnm5vGGweJUZ1BewWNZ7zLf5amARaEU1HTcKjGLT n6hmBND92WkjI4tkfSkFeRcVJuB4BQ==
uu1.jp. 3600 IN RRSIG DNSKEY 13 2 3600 20201218090000 20201217230000 7052 uu1.jp. bUofVksYDT3Z5/H5OwS3vP7bb8X3KFq3vgEq5C/GwS8zlIVeGOvBDiy4 te+Ah1x2j3FbJ15M/kM3Zc5SN0gneA==
こちらは毎回署名するわけではなさそうですね。