DNSSECについて

DNS Security Extensions(DNSSEC)は、アプリケーションとDNSリゾルバーが偽造または操作されたDNSデータを使用しないように保護するために設計されたテクノロジーです。

問題:攻撃者がDNS応答を改ざんしたり、 DNSキャッシュをポイズニングしたりして、アドレスバーに正当なドメイン名が含まれている悪意のあるサイトにユーザーを誘導する可能性があります。

解決策: DNSSECで構成された権限のあるDNSサーバーは、秘密鍵を使用して各リソースレコードにデジタル署名することにより、この種の攻撃を防ぎます。 DNSリゾルバーは、公開鍵とデジタル署名を使用してゾーンレコードの整合性を検証します。

NSDについて

Name Server Daemon( NSD )は、 NLNetLabsによって開発されたオープンソースの信頼できる唯一のDNSサーバーソフトウェアです。 簡単に設定できるように、BINDスタイルのゾーンファイルを使用します。

権限のある専用DNSサーバーは、担当するゾーンのクエリに対する回答を提供します。 この記事では、2つのドメイン名に対して独自の信頼できるNSDネームサーバーを設定します。 両方のドメイン名に対してDNSSEC署名付き応答を提供するようにNSDを構成します。

前提条件

この記事では、読者が次の分野に精通している必要があります。

この記事では、次の2つのドメイン名を使用します。

ドメイン名 ネームサーバー
example.com master.example.com
slave.example.com
foobar.org master.example.com
slave.example.com

次の2つのドロップレットはNSDを実行します。

ホスト名 IPアドレス
master.example.com 1.1.1.1
slave.example.com 2.2.2.2

チュートリアル全体を通して、 1.1.1.1 をマスターネームサーバーのIPアドレスに置き換え、2.2.2.2をスレーブネームサーバーのIPアドレスに置き換える必要があります。

この記事の目的は、自身のドメインのDNSSECステータスに関係なく、DNSSECを使用するドメインにサービスを提供できるネームサーバーを設定する方法を示すことです。 ドメインexample.comは、便宜上、ネームサーバーに使用されます。 ネームサーバーのドメイン名にDNSSECを設定する必要はありません。 ネームサーバーは、master.my-soa.comおよびslave.my-soa.comに簡単に設定できます。

また、ドメインを解決する場所のIPアドレスを念頭に置く必要があります。 これらのドメイン用にWebホストをまだ設定していない場合は、Webサーバーを実行する別のテストドロップレットを作成できます。 Ubuntu14.04イメージのLAMPを選択します。

LAMP on Ubuntu 14.04 image

LAMPドロップレットのIPアドレスは3.3.3.3になります。 このIPは、両方のドメイン名のAレコードとして使用され、Webブラウザーから解決されるかどうかを確認します。 チュートリアル全体を通して、3.3.3.3を目的のウェブホストIPアドレスに置き換える必要があります。

DNSSEC用語

DNSSECは、公開鍵暗号化の概念に取り組み、新しいDNSレコードタイプを導入します。 このセクションでは、この記事で使用されるいくつかの用語について説明します。

キー

  • ZSK Z one S igning K eyは、キーのプライベート/パブリックペアです。 秘密鍵はすべてのDNSレコードのデジタル署名を作成し、公開鍵はDNSリゾルバーがそれを検証するために使用します。
  • KSK K ey S igning K eyは、キーのプライベート/パブリックペアです。 秘密鍵はZSKに署名し、公開鍵はそれを検証します。

記録

  • DNSKEY :KSKおよびZSKの公開鍵が含まれています。
  • RRSIG R esource R ecord Sig natureは各レコードに存在し、そのレコードのデジタル署名を提供します。 RRSIGレコードは、レコード自体とZSKに基づいています。
  • DS DエレゲーションS ignerレコードは、DNSKEYレコードの整合性を検証するために使用されます。 このレコードは、ドメインレジストラのコントロールパネルに入力され、TLDの権限のあるネームサーバーに存在します。

ドメインにDNSSECを設定するには、ネームサーバーとレジストラの両方で適切なレコードが必要です。

DNSSECのしくみ

最初に、ドメイン所有者の観点から DNSSEC について説明します(それはあなたです!)。 ネームサーバーからのすべてのDNSレコードが署名されていることを確認する必要があります。 そうすれば、誰かがDNSレコードをスプーフィングしようとした場合、それらはfalseとして識別され、訪問者は悪意のあるサイトにアクセスすることを回避できます。

では、どのように設定しますか? まず、ドメインごとに、ネームサーバー上に2つの一意の秘密/公開鍵のペアを生成する必要があります。 ドメインの公開鍵は、そのドメインのゾーンファイルにリストされているDNSKEYレコードに保存されます。 他の2つのタイプのレコード、DSレコードとRRSIGレコードは、DNSKEYレコードから生成されます。 これらの3種類のレコードは、すべて暗号的にリンクされています。 つまり、3つのうちの1つを見ると、他の2つが有効かどうかがわかります。

(注:わかりやすくするために、ドメインごとに各タイプのレコードの倍数がありますが、この説明の残りの部分では、それらを単数形で参照します。)

次に、DSレコードをレジストラにアップロードします。レジストラはそれをドメインのTLDネームサーバーに公開します。 DSレコードを公開する唯一の方法はレジストラを介することであるため、これはドメイン所有者がDSレコードを公開した人であることを証明し、そのDSレコードの有効性を証明します。 DSレコードの目的は、TLDネームサーバーとドメインで実行しているネームサーバーの間に認証チェーンを確立することです。 これは、DSレコードがDNSKEYに基づいているために機能します。したがって、DNSリゾルバーはDNSKEYがDSレコードと一致し、ドメインに対して正しいものであることを確認できます。

RRSIGレコードは、レコード値自体(IPアドレスなど)とDNSKEYに基づく他のタイプのDNSレコード(A、MXなど)に付随する署名です。

DNSKEY、DS、およびRRSIGレコードが構成されたので、DNSSECがドメイン用にセットアップされました。

次に、ユーザーの観点から説明します。 ユーザーがドメインにアクセスしたいとします。そのため、ユーザーはDNSリゾルバーにドメインのAレコードを照会します。 この例では、再帰DNSリゾルバーは、TLDネームサーバーのDSレコードに対して、このドメインのDNSKEYの有効性をすでにチェックしていますが、これも初めて簡単にチェックできます。

このクエリがどのように機能するかを次に示します。

  1. ユーザーはAレコードのクエリを送信し、DNSSEC対応の再帰DNSサーバーに到達します。
  2. DNSサーバーは、DSレコードを検出することにより、照会されたドメインがDNSSECをサポートしていることを検出します。 DOビットを含むAレコードのクエリを権限のあるネームサーバーに送信します。
  3. ネームサーバーは、Aレコードと対応するRRSIGレコードで応答します。
  4. 再帰DNSサーバーは、AレコードとファイルにあるDNSKEYレコードの値を計算し、復号化されたRRSIGレコードと照合します。 (DSレコードをチェックして、DNSKEYレコードがファイルにない場合は、最初に検証できます。)ハッシュが一致する場合、DNSサーバーはAレコードをユーザーに返します。ユーザーはWebサイトにアクセスできます。

DNSSEC validation

DNSSECの仕組みの詳細については、この記事をお読みください。 DNSSEC用語のより包括的なリストについては、thisをお読みください。

ステップゼロ—ドメインとレジストラのサポートを確認します

独自のNSDネームサーバーでDNSSECを設定することを決定する前に、ドメイン拡張子(.com、.orgなど)とレジストラがDNSSECをサポートしていることを確認してください。

ドメイン拡張がDNSSECに対応しているかどうかを確認するには、次のコマンドを使用してDNSKEYレコードをクエリします。

dig DNSKEY com. +short

これにより、公開鍵が次のように返されます。

256 3 8 AQPbokupKUJ5LLAtDEs6R3nDOHxF2jQEFtJEFTiDcfbsZia4fg3EK9Wv D9ZIr+7t2n1ddqRGHnTTInHTjduaKFPqm2iKaDHdrc6095o1mzqojnd1 bTtI45XNu61QmT5IU4VPT7HDUSby+53gLAsjLPyNsNEMp7Cc52RVxCHD no9efw==
257 3 8 AQPDzldNmMvZFX4NcNJ0uEnKDg7tmv/F3MyQR0lpBmVcNcsIszxNFxsB fKNW9JYCYqpik8366LE7VbIcNRzfp2h9OO8HRl+H+E08zauK8k7evWEm u/6od+2boggPoiEfGNyvNPaSI7FOIroDsnw/taggzHRX1Z7SOiOiPWPN IwSUyWOZ79VmcQ1GLkC6NlYvG3HwYmynQv6oFwGv/KELSw7ZSdrbTQ0H XvZbqMUI7BaMskmvgm1G7oKZ1YiF7O9ioVNc0+7ASbqmZN7Z98EGU/Qh 2K/BgUe8Hs0XVcdPKrtyYnoQHd2ynKPcMMlTEih2/2HDHjRPJ2aywIpK Nnv4oPo/

出力がない場合は、そのドメイン拡張に対するDNSSECサポートがないことを示しています。

TLDがDNSSECをサポートしている場合は十分ではありません。 ドメインレジストラには、コントロールパネルにDSレコードを入力するためのオプションも必要です。 これは、「レジストラ名 dnssec」をグーグルで検索するか、レジストラに直接問い合わせることで確認できます。 DNSSECをサポートする人気のあるレジストラは次のとおりです。

TLDとドメインレジストラの両方がDNSSECをサポートしていることを確認したら、カスタムネームサーバーの設定を開始できます。

ステップ1—両方のサーバーにNSDをインストールしてセットアップする

このステップでは、マスターサーバーとスレーブサーバーの両方にNSDをインストールして構成します。 ドメインexample.comのDNSレコードも設定します。 このセクションは、NSDのクイックセットアップとして機能します。 NSDの設定の詳細な手順については、この記事をお読みください。

マスターサーバー

NSDサーバーパッケージに加えて、マスターサーバーには次のパッケージが必要です。

  • ldnsutils :DNSSECキー生成およびゾーン署名用。
  • haveged エントロピーの増加の場合。 このパッケージをインストールすると、キー生成プロセスが高速化されます。

インストール中のエラーを回避するには、nsdという名前のシステムユーザーを作成します。

useradd -r nsd

-r オプションは、システムユーザーを作成します。 リポジトリを更新し、NSD、ldnsutils、およびhavegedをインストールします。

apt-get update
apt-get install nsd ldnsutils haveged

マスターサーバーからスレーブサーバーへのDNSゾーン転送は、共有シークレットによって保護されます。 次のコマンドを使用して、シークレットをランダムに生成します。

dd if=/dev/random count=1 bs=32 2> /dev/null | base64

出力文字列を書き留めます。 マスターサーバーとスレーブサーバーの両方の構成ファイルで使用します。

sHi0avMk1bME89cnJdHkYzFBbvQmQ8YZ

ゾーンファイル用に別のディレクトリを作成します。

mkdir /etc/nsd/zones

NSDの構成ファイルを編集します。

nano /etc/nsd/nsd.conf

1つ目は、ゾーンファイル、ログ、およびPID(プロセスID)ファイルの場所を指定するserverセクションです。

server:
    username: nsd
    hide-version: yes
    zonesdir: "/etc/nsd/zones"
    logfile: "/var/log/nsd.log"
    pidfile: "/run/nsd/nsd.pid"

hidden-version ディレクティブは、CHAOSクラスクエリが実行されたときにNSDがバージョンを返すのを防ぎます。

key セクションでは、 mykey という名前のキーを定義し、以前に生成されたシークレットを入力します。

key:
    name: "mykey"
    algorithm: hmac-sha256
    secret: "sHi0avMk1bME89cnJdHkYzFBbvQmQ8YZ"

zoneセクションには、ドメイン名、ゾーンファイル名、およびそのスレーブサーバーの詳細が含まれます。

zone:
    name: example.com
    zonefile: example.com.zone
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey
zone:
    name: foobar.org
    zonefile: foobar.org.zone
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey

notify:および Provide-xfr:行には、スレーブサーバーIPアドレスが必要です。 ファイルを保存し、example.comのゾーンファイルを作成します。

nano /etc/nsd/zones/example.com.zone

以下のデータをゾーンファイルに追加します。 すべてのエントリをカスタマイズする必要があるため、変数はマークされていません。

$ORIGIN example.com.
$TTL 1800
@       IN      SOA     master.example.com.    email.example.com. (
                        2014080301
                        3600
                        900
                        1209600
                        1800
                        )
@       IN      NS      master.example.com.
@       IN      NS      slave.example.com.
master  IN      A       1.1.1.1
slave   IN      A       2.2.2.2
@       IN      A       3.3.3.3
www     IN      CNAME   example.com.
@       IN      MX      10 aspmx.l.google.com.
@       IN      MX      20 alt1.aspmx.l.google.com.
@       IN      MX      20 alt2.aspmx.l.google.com.
@       IN      MX      30 aspmx2.googlemail.com.
@       IN      MX      30 aspmx3.googlemail.com.

このファイルを保存して、foobar.orgのゾーンファイルを作成します。

nano /etc/nsd/zones/foobar.org.zone

2番目のゾーンファイル:

$ORIGIN foobar.org.
$TTL 1800
@       IN      SOA     master.example.com.    email.example.com. (
                        2014080301
                        3600
                        900
                        1209600
                        1800
                        )
@       IN      NS      master.example.com.
@       IN      NS      slave.example.com.
@       IN      A       3.3.3.3
www     IN      CNAME   foobar.org.
@       IN      MX      0 mx.sendgrid.com.

ファイルを保存し、nsd-checkconfコマンドを使用して構成エラーを確認します。

nsd-checkconf /etc/nsd/nsd.conf

有効な構成では何も出力されません。 NSDサーバーを再起動します。

service nsd restart

dig コマンドを使用して、ドメインのDNSレコードが有効になっているかどうかを確認します。

dig ANY example.com. @localhost +norec +short

このコマンドからの出力例:

master.example.com. email.example.com. 2014080301 3600 900 1209600 1800
master.example.com.
slave.example.com.
3.3.3.3
10 aspmx.l.google.com.
20 alt1.aspmx.l.google.com.
20 alt2.aspmx.l.google.com.
30 aspmx2.googlemail.com.
30 aspmx3.googlemail.com.

2番目のドメインに対してdigコマンドを繰り返します。

dig ANY foobar.org. @localhost +norec +short

マスターサーバーにNSDを正常にインストールして構成し、2つのゾーンも作成しました。

スレーブサーバー

スレーブサーバーではキーの生成や署名が行われないため、NSDパッケージのみが必要です。

nsdという名前のシステムユーザーを作成します。

useradd -r nsd

リポジトリを更新してNSDをインストールします。

apt-get update
apt-get install nsd

ゾーンファイル用のディレクトリを作成します。

mkdir /etc/nsd/zones

NSD構成ファイルを編集します。

nano /etc/nsd/nsd.conf

構成ディレクティブを追加します。

server:
    username: nsd
    hide-version: yes
    zonesdir: "/etc/nsd/zones"
    logfile: "/var/log/nsd.log"
    pidfile: "/run/nsd/nsd.pid"

key:
    name: "mykey"
    algorithm: hmac-sha256
    secret: "sHi0avMk1bME89cnJdHkYzFBbvQmQ8YZ"

zone:
    name: example.com
    zonefile: example.com.zone
    allow-notify: 1.1.1.1 mykey
    request-xfr: 1.1.1.1 mykey
zone:
    name: foobar.org
    zonefile: foobar.org.zone
    allow-notify: 1.1.1.1 mykey
    request-xfr: 1.1.1.1 mykey

mykeysecretは、マスターサーバーに入力されたものとまったく同じである必要があります。 allow-notifyおよびrequest-xfr行でマスターサーバーのIPアドレスを使用します。

構成エラーを確認します。

nsd-checkconf /etc/nsd/nsd.conf

NSDサービスを再起動します。

service nsd restart

nsd-control コマンドを使用して、両方のドメインのゾーン転送を強制します。

nsd-control force_transfer example.com
nsd-control force_transfer foobar.org

次に、このサーバーがドメインexample.comのクエリに応答できるかどうかを確認します。

dig ANY example.com. @localhost +norec +short

これがマスターと同じ結果を返す場合、このゾーンは正しく設定されています。 foorbar.orgドメインに対してdigコマンドを繰り返して、そのゾーンが正しく設定されているかどうかを確認します。 これで、ドメインexample.comfoobar.orgに対して権限を持つNSDDNSサーバーのペアができました。

この時点で、Webブラウザでドメインにアクセスできるはずです。 それらは、私たちが設定したデフォルトのLAMPサーバー、または指定したホストに解決されます。

ステップ2—キーを生成し、ゾーンに署名します

このステップでは、ドメインごとにゾーン署名キー(ZSK)とキー署名キー(KSK)のペア(プライベートとパブリック)を生成します。 このセクションのコマンドは、特に指定がない限り、マスターサーバーで実行する必要があります。

現在のディレクトリをNSDのゾーンディレクトリに変更します。

cd /etc/nsd/zones

ldns-keygen コマンドは、キーファイルを生成し、その名前をK<domain>+<algorithm>+<key-id>の形式で出力します。 この名前を書き留める代わりに、後で簡単に参照できるように変数に割り当てます。

RSASHA1-NSEC3-SHA1アルゴリズムでZSKを生成します。

export ZSK=`ldns-keygen -a RSASHA1-NSEC3-SHA1 -b 1024 example.com`

次に、同じコマンドに -k オプションを追加して、KSKを生成します。

export KSK=`ldns-keygen -k -a RSASHA1-NSEC3-SHA1 -b 2048 example.com`

このディレクトリには、次の6つの追加ファイルが含まれます。

  • .private拡張子の付いた2つの秘密鍵。
  • .key拡張子を持つ2つの公開鍵。
  • .ds拡張子を持つ2つのDSレコード。

ステップ3では、異なるダイジェストタイプのDSレコードを生成するため、混乱を避けるために、これらのDSレコードファイルを削除してください。

rm $ZSK.ds $KSK.ds

foobar.orgドメインに対してldns-keygenコマンドを繰り返します。

export ZSK2=`ldns-keygen -a RSASHA1-NSEC3-SHA1 -b 1024 foobar.org`
export KSK2=`ldns-keygen -k -a RSASHA1-NSEC3-SHA1 -b 2048 foobar.org`
rm $ZSK2.ds $KSK2.ds

ldns-signzone コマンドは、DNSゾーンに署名するために使用されます。 このコマンドの-sオプションは、salt値を取ります。 ランダムな文字を生成し、SHA1ハッシュを計算し、この値をソルトとして渡します。

ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) example.com.zone $ZSK $KSK

example.com.zone.signedという名前の新しいファイルが作成されます。

foobar.orgドメインに対してldns-signzoneコマンドを実行します。

ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) foobar.org.zone $ZSK2 $KSK2

NSDは、.signedゾーンファイルを使用するように構成する必要があります。 構成ファイルを編集します。

nano /etc/nsd/nsd.conf

両方のドメインのzone:セクションの下にある zonefile:オプションを変更します。

zone:
    name: example.com
    zonefile: example.com.zone.signed
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey
zone:
    name: foobar.org
    zonefile: foobar.org.zone.signed
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey

変更を適用してゾーンファイルをリロードするには、次のコマンドを実行します。

nsd-control reconfig
nsd-control reload example.com
nsd-control reload foobar.org

DNSクエリを実行して、DNSKEYレコードを確認します。

dig DNSKEY example.com. @localhost +multiline +norec

これにより、ZSKとKSKの公開鍵が次のように出力されます。

; <<>> DiG 9.9.5-3-Ubuntu <<>> DNSKEY example.com. @localhost +norec +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14231
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                IN DNSKEY

;; ANSWER SECTION:
example.com.            1800 IN DNSKEY 256 3 7 (
                                AwEAAbUfMzOJWWWniRSwDb2/2Q6bVpVoEPltPj0h5Qu6
                                hzBdYA4HJYlVXTJ6veNENI/5lV1y84Dhc47j4VAoA66F
                                j7xuTTZjzcuu0KAkQg8Jr2uCmmOuI/rZR7sWZMooHFZ1
                                JPPJZak8HKSNGvHXlMJiz9JPOA3ebJ/liG6lCGJshPah
                                ) ; ZSK; alg = NSEC3RSASHA1; key id = 2870
example.com.            1800 IN DNSKEY 257 3 7 (
                                AwEAAeMDpaVQJixHg1deUDBRRwVldJadgyRZPlieSoVf
                                ps3tYPvTD0nVBOQxenf+m4N/ALpnC5TH4GpxZLYS9IFc
                                rujudQrqA0UuTXBvIWP+XvuJ1yoyZCxO9PHV+GsefjI7
                                kvnmBD1V9UJlGVlHlB3YXHa3f/J5E0RujMnE4a19KG7b
                                HkYebK/2zjzhqXan9442VAG6jhw0lUUJZrCpZjMDEi9n
                                LhJOUSymxglQv1BftALmYnYcuHId9NCwZbvZMb7bS239
                                bm6ONjwqSHqW2slNhBnDVnng2tDfNwjR+eDz5oUbtw4b
                                LMtVACx1WzJEKbIN4rHY7aRe7Ao+4jvSJ8ozVrM=
                                ) ; KSK; alg = NSEC3RSASHA1; key id = 17385

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Sep 04 01:37:18 IST 2014
;; MSG SIZE  rcvd: 467

2番目のドメインに対してdigコマンドを繰り返し、応答を確認します。

dig DNSKEY foobar.org. @localhost +multiline +norec

マスターサーバーは、 signedDNS応答を提供するようになりました。

奴隷

このゾーンをスレーブサーバーに転送する必要があります。 スレーブサーバーにログインし、両方のゾーンの転送を強制します。

nsd-control force_transfer example.com
nsd-control force_transfer foobar.org

このサーバー上のDNSKEYレコードをクエリします。

dig DNSKEY example.com. @localhost +multiline +norec

これにより、マスターサーバーで見たのと同じDNSKEYが返されます。 両方のDNSサーバーは、署名されたDNS応答を提供するように構成されています。

ステップ3—DSレコードを生成する

このステップでは、2つのDSレコードを生成します。次のステップでは、ドメインレジストラのコントロールパネルに入力します。 DSレコードは、次の仕様になります。

アルゴリズム ダイジェストタイプ
DSレコード1 RSASHA1-NSEC3-SHA1 SHA1
DSレコード2 RSASHA1-NSEC3-SHA1 SHA256

以下のコマンドは、マスターサーバーで実行されます。

ldns-key2ds コマンドは、署名されたゾーンファイルからDSレコードを生成します。 ゾーンファイルディレクトリに切り替えて、次のコマンドを実行します。

cd /etc/nsd/zones
ldns-key2ds -n -1 example.com.zone.signed && ldns-key2ds -n -2 example.com.zone.signed

-1 オプションはハッシュ関数としてSHA1を使用しますが、-2は同じためにSHA256を使用します。 -n オプションは、結果のDSレコードをファイルではなくstdoutに書き込みます。

これにより、2行の出力が返されます。

example.com. 1800    IN      DS      17385 7 1 c1b9f7f1425bc44976dc19165e48c60032e7820d
example.com. 1800    IN      DS      17385 7 2 98216f4d66d24dbb752c46523a747a97bbad49d5846bbaa6256b6950b4a40995

次の表に、これらのDSレコードの各フィールドを示します。

キータグ アルゴリズム ダイジェストタイプ ダイジェスト
DSレコード#1 17385 7 1 c1b9f7f1[…]
DSレコード#2 17385 7 2 98216f4d[…]

foobar.orgのDSレコードを生成します。

cd /etc/nsd/zones
ldns-key2ds -n -1 foobar.org.zone.signed && ldns-key2ds -n -2 foobar.org.zone.signed

上記の表に示すように、4つすべてのDSレコード(ドメインごとに2つ)のすべての部分を書き留めます。 次のステップでそれらが必要になります。

ステップ4—レジストラを使用してDSレコードを構成する

このセクションでは、ドメインレジストラのコントロールパネルにDSレコードを追加します。 これにより、DSレコードがトップレベルドメイン(TLD)のネームサーバーに公開されます。 この手順では、例としてGoDaddyのコントロールパネルを使用します。

GoDaddyにログインし、ドメイン名を選択します。

初めてのネームサーバーのセットアップのみ:

ネームサーバーを初めてセットアップするには、ホスト名セクションを1回実行する必要があります。 ネームサーバードメインがmy-soa.comのように異なる場合は、ネームサーバードメインのみに対してこの手順を実行する必要があります。

ホスト名セクションの管理をクリックします。

GoDaddy Host Names

一部のレジストラは、これを「子ネームサーバー」と呼ぶ場合があります。 ホスト名の追加をクリックし、最初のドロップレットのIPを指すホスト名master.example.comを作成します。

Adding Hostnames

追加をクリックします。 この手順をもう一度繰り返して、2番目のドロップレットのIPを指すホスト名slave.example.comを作成します。

すべてのドメイン:

これらの2つのホスト名は、このドメインのネームサーバーとして設定する必要があります。 NameserversセクションのManageをクリックして、両方を追加します。

Adding Nameservers

DSレコードセクションの管理をクリックします。

GoDaddy manage DS records

適切なフィールドに詳細を入力します。 必要に応じて、前の手順のチャートを参照してください。

Enter the Key tag, Algorithm, Digest type, and Digest for the first DS record.

Enter the Key tag, Algorithm, Digest type, and Digest for the second DS record.

両方のレコードを保存します。

数分後、DSレコードを照会します。

dig DS example.com. +trace +short | egrep '^DS'

出力には、両方のDSレコードが含まれている必要があります。

DS 17385 7 2 98216F4D66D24DBB752C46523A747A97BBAD49D5846BBAA6256B6950 B4A40995 from server 192.55.83.30 in 1 ms.
DS 17385 7 1 C1B9F7F1425BC44976DC19165E48C60032E7820D from server 192.55.83.30 in 1 ms.

2番目のドメインに対してこれらの手順を実行するときは、ネームサーバーが適切なネームサーバードメインに設定されていることを確認してください。

Second domain nameservers

このドメインのホスト名を作成する必要はありません。

ステップ5—DNSSECの動作を確認する

DNSSECは、次のサイトで確認できます。

最初のWebサイトからのテストが成功すると、次の結果が表示されます。

DNSSEC test

マークされた線に注意してください。 簡単に言えば、彼らは次のように読んでいます。

  1. DSレコード#2(ダイジェストタイプSHA256)はKSK(キーID 17385)を検証します
  2. KSK(キーID 17385)は、他のDNSKEY(ZSK)を検証します
  3. ZSK(キーID 2870)は、Aレコードの署名を検証します

マスターサーバーとスレーブサーバーの両方がDNSSEC応答を提供するようになりました。

また、Webブラウザで両方のドメインを表示できる必要があります。 3.3.3.3で設定したテストWebサーバーのデフォルトのApache/Ubuntuページ、またはドメインの@エントリで指定したWebホストを指す必要があります。

ゾーンレコードの変更

ゾーンレコードを変更するには、署名されていないファイル( example.com.zone )を編集する必要があります。 変更したら、SOAシリアル番号をインクリメントし、変更を有効にするためにゾーンに再度署名する必要があります。

SOAシリアルは次の形式です。

YYYYMMDDnn

ゾーンファイルを変更する場合は、現在の日付に設定してください。 したがって、2014年9月22日に最初の変更を行うと、シリアルは次のようになります。

2014092201

同じ日に後続の変更を行う場合は、最初の2桁をインクリメントする必要があります。 SOAシリアルをインクリメントするのを忘れた場合、ゾーンファイルに加えられた変更はスレーブサーバーに転送されません。

注:.signedファイルに直接変更を加えると、署名が無効になり、検証が失敗します。

ゾーンに署名するために毎回長いコマンドを入力する代わりに、シェルスクリプトを作成します。 マスターDNSサーバーにファイルを作成して編集します。

nano /usr/local/bin/dnszonesigner

次のコードを貼り付けます。

#!/bin/bash
PDIR=`pwd`
ZONEDIR="/etc/nsd/zones" #location of your zone files
DOMAIN=$1
cd $ZONEDIR
KSK=$(basename $(grep -r "`grep '(ksk)' $DOMAIN.zone.signed | cut -f3-10`" K$DOMAIN.*.key | cut -d':' -f1) .key)
ZSK=$(basename $(grep -r "`grep '(zsk)' $DOMAIN.zone.signed | cut -f3-10`" K$DOMAIN.*.key | cut -d':' -f1) .key)
/usr/bin/ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) -f $ZONEDIR/$DOMAIN.zone.signed $DOMAIN.zone $ZSK $KSK
/usr/sbin/nsd-control reload $DOMAIN
/usr/sbin/nsd-control notify $DOMAIN
cd $PDIR

これらの行のほとんどは、手動で実行したチュートリアルの前半から認識されているはずです。

このファイルを実行可能にします。

chmod +x /usr/local/bin/dnszonesigner

DNSレコードを追加、削除、または編集した後は、必ず SOAシリアルをインクリメントして、このスクリプトを実行してください。

dnszonesigner example.com

このシェルスクリプトは、 $ PATH 変数で定義されたディレクトリに配置されているため、どのディレクトリからでも機能します。

追加の読み物

シャロンキャンベルによる追加コピー