Porkbun(レジストラ)とCloudflare(権威DNS)でのDNSSEC運用

昨日、○○○.earthという独自ドメインが無事に

レジストラ:Porkbun / 権威DNS:Cloudflare

という構成になったので、DNSSECを有効化してみました。

”Porkbun’s Cloudflare DNSSEC”の誤解

PorkbunにはCloudflare DNSSECという設定項目があるので、てっきり子ゾーン(権威DNSのCloudflare)の鍵更新があったときに親ゾーン(Porkbun)側のDSレコードに新しい鍵情報を反映させてくれたりする機能なんだと思っていました。

Warning
This guide walks through how to enable DNSSEC on a domain using Porkbun’s nameservers. If you are using external nameservers, please refer to the following guide instead: How to install DNSSEC

でも説明をよく読むとこんな注意書きが。Cloudflare DNSSECは子ゾーンがPorkbunのときだけ使える機能のようです。

じゃあなんでCloudflareって名前がついてるん?と思ったんですが、

Porkbunの提供するDNSサービス自体が内部的にCloudflareのシステムを使っているからみたいです。

DNSSECを有効化する

子ゾーンがPorkbun管理じゃない場合、子ゾーンの鍵情報をどうやって親ゾーンのDSレコードに反映させるのかというと、

ただ手入力するしかないようです。

Cloudflareのドメイン管理ダッシュボード > DNS > Settings > DNSSEC > Enable DNSSEC

これでDSレコード用の情報を取得して、Porkbun側のKey TagAlgorithmDigest TypeDigest欄に入力します。

ここにも書かれている通り、keyData欄には何も入力しません。

これで子ゾーンのCloudflare側からも親ゾーンのDSレコードが認識できて、DNSSECが無事に有効化できました。

DNSSECの動作確認をする

さっそく名前解決の様子をWiresharkでキャプチャして動作のちがいを見てみようと思ったんですが、ふつうと何も変わらない。あれ?

ざっくりDNSSECというのは、DNSの各レコードに電子署名をつけることで、レコードとその署名を比較して「正しい」かどうか検証できるようにする技術です。

調べてみると、この「電子署名をチェックして検証する」という動作を端末(ブラウザ・OSとも)側は通常やらないみたいなんです。検証するのはDNSリゾルバから先。しかもやるかやらないかは任意。

てことは、悪意あるWi-FiルータのDHCPで、偽装DNS情報を配布するみたいなケースには無力ってことか〜。その偽装DNSがDNSSECの検証をせずににせ情報を流せば、端末はそれをうのみにしてしまうわけなので。

がんばってブラウザにアドオンを入れれば検証できたりするみたいんですが、それだと「がんばらないふつうの人も含めてみんなDNS偽装にだまされないように」することはできないのであんまりおもしろくないなあ・・・

DNSSECの状況を可視化できるサイトで、各レコードがStatus: SECUREになっていることは確認できたので、ちゃんと外部から見ても動作はしているようです。

鍵更新運用

親ゾーン(Porkbun)で鍵更新があった場合、鍵そのもの関連以外で影響するのはDSレコードに対する署名(RRSIGレコード)だけなので、親ゾーンの中で閉じる話です。ここはユーザーが手出しできないところなので、自動でうまいことやってくれるんでしょう。

問題は子ゾーン(Cloudflare)で鍵更新があった場合。親ゾーンのDSレコードに新しい鍵の情報を登録しなおすことになるけれど、これがPorkbunでは手作業でしかやりようがない。

で、どういうタイミングで鍵更新があるのか調べてみたんですが、

Cloudflareは、現在使用されているほとんどのRSA鍵よりも強力な楕円曲線アルゴリズムECDSA P-256を使用しています。署名の生成に使用されるCPUの使用量が少ないため、より効率的に署名をその場での生成が可能です。通常、DNSSECの一部として、ゾーン署名鍵 (ZSK) と鍵署名鍵 (KSK) との2つの鍵が使用されます。最も単純なレベルでは、ZSKはクエリに応答して提供されるDNSレコードの署名に使用され、KSKは真正性を確保するためのZSKを含めてDNSKEYの署名に使用されます。

現在、Cloudflareは、すべてのDNSSEC署名にグローバルに共有ZSKとKSKを使用しています。このような強力な暗号化アルゴリズムの使用によりこの鍵セットの安全性に確信を持っているため、少なくともセキュリティ上の理由からZSKやKSKを定期的にローテーションする必要はないと考えています。

あ、そうなん!?鍵の自動更新ってないんや!

子ゾーンの鍵は、アルゴリズムがECDSAで鍵長512ビットなので、

暗号強度としてはRSAの15360ビットと同等ということみたい。今の時代としてはめっちゃ強いけど、楕円曲線暗号に量子耐性はないそうなので、さすがに量子コンピュータが使い物になる時代までにはこの鍵は更新されそうかな。

しかしながら、ポリシー上、これらの鍵を特定の間隔でローテーションする必要があるお客様もいます。このため、新しいFoundation DNSの高度なネームサーバーには、必要に応じてアカウントごと、またはゾーンごとにZSKとKSKの両方をローテーションする機能が追加されています。これはまずAPI経由で利用でき、続いてCloudflareダッシュボードから利用できるようになります。そのため、DNSSEC鍵のローテーションに関する厳格なポリシー要件を持つお客様も、Cloudflare Foundation DNSを使用してその要件に対応することができます。

ふむふむ。今はCloudflareダッシュボードにそういう機能は見あたらないので、今後の話なんやろけど、ブラウザから手作業で更新できるようになるってことか。

もしそうなって鍵更新をしたくなった場合は、

  • 親ゾーン(Porkbun)側でDNSSECをOFFにする
  • Cloudflare側で鍵更新をする
  • Porkbun側のDSレコードに新しい鍵の情報を登録してDNSSECをONにする

みたいな手順でやることになるんかな。

コメント

読み込み中...