Ubuntu14.04のNSDネームサーバーでDNSSECを設定する方法
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アドレスを念頭に置く必要があります。 これらのドメインにウェブホストをまだ設定していない場合は、ウェブサーバーを実行する別のテストドロップレットを作成できます。 Ubuntu14.04イメージのLAMPを選択します。
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の有効性をすでにチェックしていますが、これも初めて簡単にチェックできます。
このクエリがどのように機能するかを次に示します。
- ユーザーはAレコードのクエリを送信し、DNSSEC対応の再帰DNSサーバーに到達します。
- DNSサーバーは、DSレコードを検出することにより、照会されたドメインがDNSSECをサポートしていることを検出します。 DOビットを含むAレコードのクエリを権限のあるネームサーバーに送信します。
- ネームサーバーは、Aレコードと対応するRRSIGレコードで応答します。
- 再帰DNSサーバーは、AレコードとファイルにあるDNSKEYレコードの値を計算し、復号化されたRRSIGレコードと照合します。 (DSレコードをチェックして、DNSKEYレコードがファイルにない場合は、最初に検証できます。)ハッシュが一致する場合、DNSサーバーはAレコードをユーザーに返します。ユーザーはWebサイトにアクセスできます。
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
mykeyのsecretは、マスターサーバーに入力されたものとまったく同じである必要があります。 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.comとfoobar.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のように異なる場合は、ネームサーバードメインのみに対してこの手順を実行する必要があります。
ホスト名セクションの管理をクリックします。
一部のレジストラは、これを「子ネームサーバー」と呼ぶ場合があります。 ホスト名の追加をクリックし、最初のドロップレットのIPを指すホスト名master.example.comを作成します。
追加をクリックします。 この手順をもう一度繰り返して、2番目のドロップレットのIPを指すホスト名slave.example.comを作成します。
すべてのドメイン:
これらの2つのホスト名は、このドメインのネームサーバーとして設定する必要があります。 NameserversセクションのManageをクリックして、両方を追加します。
DSレコードセクションの管理をクリックします。
適切なフィールドに詳細を入力します。 必要に応じて、前の手順のチャートを参照してください。
両方のレコードを保存します。
数分後、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番目のドメインに対してこれらの手順を実行するときは、ネームサーバーが適切なネームサーバードメインに設定されていることを確認してください。
このドメインのホスト名を作成する必要はありません。
ステップ5—DNSSECの動作を確認する
DNSSECは、次のサイトで確認できます。
最初のWebサイトからのテストが成功すると、次の結果が表示されます。
マークされた線に注意してください。 簡単に言えば、彼らは次のように読んでいます。
- DSレコード#2(ダイジェストタイプSHA256)はKSK(キーID 17385)を検証します
- KSK(キーID 17385)は、他のDNSKEY(ZSK)を検証します
- 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 変数で定義されたディレクトリに配置されているため、どのディレクトリからでも機能します。
追加の読み物
- BINDDNSサーバーでのDNSSECの構成
- DNSSECの概要-Microsoft
シャロンキャンベルによる追加コピー