DNSSECについて

DNSセキュリティ拡張機能(DNSSEC)は、偽造または操作されたDNSデータの使用からアプリケーションとDNSリゾルバーを保護するために設計された技術です。

問題: +攻撃者がDNS応答またはhttp://en.wikipedia.org/wiki/DNS_cache_poisoning[DNSキャッシュを毒する]を改ざんして、正当なドメイン名を持つ悪意のあるサイトにユーザーを誘導する可能性があります。アドレスバーに。

ソリューション: + DNSSECが設定した権限のあるDNSサーバーは、各リソースレコードに秘密キーでデジタル署名することにより、この種の攻撃を防ぎます。 DNSリゾルバーは、公開キーとデジタル署名を使用してゾーンレコードの整合性を検証します。

NSDについて

Name Server Daemon(* NSD *)は、http://www.nlnetlabs.nl/ [NLNet Labs]によって開発された、権威あるオープンソースのDNSサーバーソフトウェアです。 BINDスタイルのゾーンファイルを使用して簡単に構成できます。

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

前提条件

この記事を読むには、読者が次の分野に関する知識が必要です。

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

Domain Name Nameservers

example.com

master.example.com

slave.example.com

foobar.org

master.example.com

slave.example.com

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

Hostname IP Address

master.example.com

1.1.1.1

slave.example.com

2.2.2.2

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

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

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

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/1.png [Ubuntu 14.04上のLAMP画像]

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

DNSSECの用語

DNSSECはhttp://en.wikipedia.org/wiki/Public-key_cryptography[public-key cryptography]の概念に基づいて機能し、新しいDNSレコードタイプを導入します。 このセクションでは、この記事で使用されるいくつかの用語について説明します。

Keys

  • * 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 は各レコードに存在し、そのレコードのデジタル署名を提供します。 RRSIGレコードは、レコード自体とZSKに基づいています。

  • * DS *: D elegation S ignerレコードは、DNSKEYレコードの整合性を検証するために使用されます。 このレコードは、ドメインレジストラーのコントロールパネルに入力され、TLDの権限のあるネームサーバーにあります。

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

DNSSECの仕組み

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

では、どのように設定しますか? 最初に、すべてのドメインについて、ネームサーバー上で秘密/公開鍵の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がドメインに設定されました。

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

このクエリの仕組みを以下に示します:

  1. ユーザーは、Aレコードのクエリを送信し、DNSSEC対応の再帰DNSサーバーに到達します。

  2. DNSサーバーは、DSレコードを検出することで、クエリされたドメインがDNSSECをサポートしていることを検出します。 DOビットを使用して、権限のあるネームサーバーにAレコードのクエリを送信します。

  3. ネームサーバーは、Aレコードと対応するRRSIGレコードで応答します。

  4. 再帰DNSサーバーは、Aレコードの値+ファイルにあるDNSKEYレコードを計算し、復号化されたRRSIGレコードと照合します。 (DSレコードをチェックして、DNSKEYレコードがファイルにない場合は、まずDNSKEYレコードを検証できます。)ハッシュが一致すると、DNSサーバーはAレコードをユーザーに返し、ユーザーはウェブサイトにアクセスできるようになります。

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/2.png [DNSSEC検証]

DNSSECの機能の詳細については、http://technet.microsoft.com/en-in/library/jj200221.aspx [この記事]をご覧ください。 DNSSECの用語のより包括的なリストについては、http://technet.microsoft.com/en-us/library/ee649132(v = ws.10).aspx [this]をご覧ください。

ステップ0-ドメインおよびレジストラのサポートを確認する

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

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

dig DNSKEY . +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のクイックセットアップとして機能します。 設定の詳細な手順については、https://www.digitalocean.com/community/tutorials/how-to-use-nsd-an-authoritative-only-dns-server-on-ubuntu-14-04 [この記事]をご覧ください。 NSD。

マスターサーバー

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

  • * ldnsutils *:DNSSECキー生成およびゾーン署名用。

  • * haveged *:https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged[encreasing entropy]の場合。 このパッケージをインストールすると、キー生成プロセスが迅速になります。

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

useradd -r nsd

このオプションは、システムユーザーを作成します。 リポジトリを更新し、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

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

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

mkdir /etc/nsd/zones

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

nano /etc/nsd/nsd.conf

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

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

このディレクティブは、CHAOSクラスのクエリが実行されたときに、NSDがhttp://support.microsoft.com/kb/314780 [そのバージョンを返す]を防ぐ。

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

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

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

zone:
   name:
   zonefile: .zone
   notify:  mykey
   provide-xfr:  mykey
zone:
   name:
   zonefile: .zone
   notify:  mykey
   provide-xfr:  mykey

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

nano /etc/nsd/zones/.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/.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 /etc/nsd/nsd.conf

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

service nsd restart

コマンドを使用して、DNSレコードがドメインに対して有効かどうかを確認します。

dig ANY . @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 ANY . @localhost +norec +short

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

スレーブサーバー

スレーブサーバーは、キーの生成や署名が行われないため、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: ""

zone:
   name:
   zonefile: .zone
   allow-notify:  mykey
   request-xfr:  mykey
zone:
   name:
   zonefile: .zone
   allow-notify:  mykey
   request-xfr:  mykey

for * mykey *は、マスターサーバーに入力されたものとまったく同じでなければなりません。 および行で*マスターサーバーのIPアドレス*を使用します。

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

nsd-checkconf /etc/nsd/nsd.conf

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

service nsd restart

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

nsd-control force_transfer
nsd-control force_transfer

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

dig ANY . @localhost +norec +short

これがマスターと同じ結果を返す場合、このゾーンは適切にセットアップされています。 * foorbar.org ドメインに対してコマンドを繰り返して、そのゾーンが適切にセットアップされているかどうかを確認します。 ドメイン example.com および foobar.org *に対して権限を持つNSD DNSサーバーのペアが作成されました。

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

ステップ2-キーを生成してゾーンに署名する

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

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

cd /etc/nsd/zones

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

アルゴリズムでZSKを生成します。

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

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

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

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

  • 拡張機能付きの2つの秘密キー。

  • 拡張機能付きの2つの公開キー。

  • 拡張子を持つ2つのDSレコード。

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

rm $ZSK.ds $KSK.ds
  • foobar.org *ドメインに対してコマンドを繰り返します。

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

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

ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) .zone $ZSK $KSK
  • example.com.zone.signed *という名前の新しいファイルが作成されます。

  • foobar.org *ドメインに対してコマンドを実行します。

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

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

nano /etc/nsd/nsd.conf

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

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

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

nsd-control reconfig
nsd-control reload
nsd-control reload

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

dig DNSKEY . @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 DNSKEY . @localhost +multiline +norec

これで、マスターサーバーは*署名付き* DNS応答を提供します。

奴隷

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

nsd-control force_transfer
nsd-control force_transfer

このサーバーのDNSKEYレコードを照会します。

dig DNSKEY . @localhost +multiline +norec

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

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

この手順では、2つのDSレコードを生成します。次の手順では、ドメイン登録者のコントロールパネルに入力します。 DSレコードは次の仕様になります。

Algorithm Digest Type

DS record 1

RSASHA1-NSEC3-SHA1

SHA1

DS record 2

RSASHA1-NSEC3-SHA1

SHA256

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

このコマンドは、署名済みゾーンファイルからDSレコードを生成します。 ゾーンファイルディレクトリに切り替えて、コマンドを実行します。

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

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

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

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

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

Key tag Algorithm Digest type Digest

DS record #1

17385

7

1

c1b9f7f1[…]

DS record #2

17385

7

2

98216f4d[..]

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

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

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

ステップ4-レジストラーでDSレコードを構成する

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

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

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

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

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

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/3.png [GoDaddyホスト名]

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

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/4.png [ホスト名の追加]

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

すべてのドメイン:

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

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/5.png [ネームサーバーの追加]

  • DSレコード*セクションで[管理]をクリックします。

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/6.png [GoDaddy管理DSレコード]

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

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/7.png [最初のDSレコードのキータグ、アルゴリズム、ダイジェストタイプ、およびダイジェストを入力します。]

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/8.png [2番目のDSレコードのキータグ、アルゴリズム、ダイジェストタイプ、およびダイジェストを入力します。]

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

画像:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/9.png [image]

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

dig DS . +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番目のドメインでこれらの手順を実行するときは、ネームサーバーを適切なネームサーバードメインに設定してください。

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/10.png [2番目のドメインネームサーバー]

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

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

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

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

image:https://assets.digitalocean.com/articles/dnssec_nsdnameserver/11.png [DNSSECテスト]

マークされた行に注意してください。 彼らは次のように読みます:

  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ホストをポイントする必要があります。

ゾーンレコードの変更

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

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

YYYYMMDD

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

20140922

同じ日に後続の変更を行う場合、最初の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

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

追加の読み物

Sharon Campbellによる追加コピー