PowerDNS、Atomia DNSのインストールからDNSSECの設定(上位ゾーンへの登録は行わない)までを行う。
Atomia DNS、PowerDNS構成 |
---|
1. PowerDNSとは
PowerDNSはGPLライセンスのC++で実装されたDNSサーバです。ほとんどのUNIXライクなOS上で動作します。PowerDNSはシンプルなBINDスタイルのゾーンファイルからRDBMSやロードバランシング/フェイルオーバーアルゴリズムまで多岐に渡る特徴があります。別プログラムとしてDNS recursorも含みます。
PowerDNSはオランダの企業PowerDNS.COM BVとオープンソースコミュニからの多くの貢献によって生み出されました。著名なデベロッパはBer Hubert氏です。
関連サイト
関連ツール
2. Atomia DNSとは
Atomia DNSはスウェーデンの企業Atomia ABが提供するオープンソースのDNS管理システムです。Atomia DNSはそれ単体では動作せず、BINDやPowerDNSとゾーン情報を同期することで作用します。
Atomia DNSは主に2つのモジュール、Atomia DNS DatabaseとAtomia DNS APIから構成されています。同じマシン上まはた異なるマシン上にインストールすることが可能です。またオプションとしてAtomia DNS APIを呼び出すCLIツールのAtomia DNS Client、GUIツールのAtomia DNS Web Appがあります。
さらにBINDやPowerDNS等のDNSサーバと同期するには別途モジュールをインストールする必要があります。
関連サイト
3. インストール
3.1 Atomia DNSのインストール
3.1.1 Atomia DNS Masterのインストール
Atomia DNS MasterはAtomia DNS DatabaseとAtomia DNS APIの組み合わせです。同じマシン上にインストールする場合はAtomia DNS Masterをインストールしましょう。
# wget -q -O - http://public.apt.atomia.com/setup.sh.shtml | sed s/%distcode/`lsb_release -c | awk '{ print $2 }'`/g | sh
# apt-get install atomiadns-masterserver
Atomia DNSの設定を行う
# vim /etc/atomiadns.conf
3.1.2 Atomia DNS Clientのインストール
# apt-get install atomiadns-client
3.1.3 Atomia DNS Web Appのインストール
# apt-get install atomiadns-webapp
3.2 PowerDNSとの連携
3.2.1 Atomia DNS PowerDNS databaseのインストール
atomiadns-powerdns-databaseパッケージをインストールすると、mysql-server及びmysql-clientがインストールされpowerdns用のデータベースが作成されます。またpowerdns用のconfファイルも生成されます。
# apt-get install atomiadns-powerdns-database
# dpkg -L atomiadns-powerdns-database
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/atomiadns-powerdns-database
/usr/share/doc/atomiadns-powerdns-database/copyright
/usr/share/doc/atomiadns-powerdns-database/changelog.gz
/usr/share/atomiadns
/usr/share/atomiadns/powerdns.sql
/usr/share/atomia
/usr/share/atomia/conf
/usr/share/atomia/conf/atomiadns.conf.atomiapowerdns-database
/usr/share/atomia/conf/pdns.conf
インストール時に作成されるデータベース。
powerdns_schemaversionテーブル以外は空です。
# mysql -u root -p
Enter passowrd:
mysql> use powerdns;
mysql> show tables;
+------------------------+
| Tables_in_powerdns |
+------------------------+
| cryptokeys |
| domainmetadata |
| domains |
| global_cryptokeys |
| global_domainmetadata |
| outbound_tsig_keys |
| powerdns_schemaversion |
| records |
| supermasters |
| tsigkeys |
+------------------------+
10 rows in set (0.00 sec)
インストール時に生成されるpowerdns用confファイル。
PowerDNSのバックエンドにMySQLを使うように設定されているのと、DNSSECが有効になっている。
# cat /etc/powerdns/pdns.conf
launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-dbname=powerdns
gmysql-password=02c98b78a3db6de9d98454f36d286f00d862b51d
gmysql-dnssec=yes
3.2.2 Atomia DNS PowerDNS syncのインストール
上記のatomiadns-powerdns-databaseパッケージだけではPowerDNSと連携することは出来ません。
追加でatomiadns-powerdnssyncパッケージをインストールする必要があります。
atomiadns-powerdnssyncはAtomia DNS APIを利用し必要な情報を取得、その情報を直接PowerDNSのデータベース(今回であれば上記のMySQL)へ反映します。
# apt-get install atomiadns-powerdnssync
# dpkg -L atomiadns-powerdnssync
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/atomiadns-powerdnssync
/usr/share/doc/atomiadns-powerdnssync/copyright
/usr/share/doc/atomiadns-powerdnssync/changelog.gz
/usr/share/atomia
/usr/share/atomia/conf
/usr/share/atomia/conf/atomiadns.conf.atomiapowerdnssync
/usr/share/atomia/opendnssec_scripts
/usr/share/atomia/opendnssec_scripts/add_to_opendnssec.sh
/usr/share/atomia/opendnssec_scripts/remove_from_opendnssec.sh
/usr/share/atomia/opendnssec_scripts/export_keys_for_zone.sh
/usr/share/perl5
/usr/share/perl5/Atomia
/usr/share/perl5/Atomia/DNS
/usr/share/perl5/Atomia/DNS/PowerDNSDatabase.pm
/usr/share/perl5/Atomia/DNS/PowerDNSSyncer.pm
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/atomiapowerdnssync.1p.gz
/usr/bin
/usr/bin/atomiapowerdnssync
/etc
/etc/init
/etc/init/atomiadns-powerdnssync.conf
/etc/init.d
/etc/init.d/atomiadns-powerdnssync
同期プログラムのデーモンを起動します。
# /etc/init.d/atomiadns-powerdnssync start
全ゾーンを同期します。
# atomiapowerdnssync full_reload_online
詳細はmanページで参照してください。
# man atomiapowerdnssync
ここまでインストール及び設定して、ようやくAtomia DNSとPowerDNSの連携が可能になりますが、未だ肝心のPowerDNSをインストールしていません。
3.3 PowerDNSのインストール
3.3.1 PowerDNSのインストール
まずはPowerDNSをインストールします。
# wget http://downloads.powerdns.com/releases/deb/pdns-static_3.2-1_amd64.deb
# dpkg -i pdns-static_3.2-1_amd64.deb
# dpkg -L pdns-static
/.
/etc
/etc/powerdns
/etc/powerdns/pdns.conf
/etc/init.d
/etc/init.d/pdns
/usr
/usr/share
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/pdns_server.8
/usr/share/man/man8/zone2sql.8
/usr/share/man/man8/pdns_control.8
/usr/share/doc
/usr/share/doc/pdns
/usr/share/doc/pdns/copyright
/usr/share/doc/pdns/changelog.gz
/usr/share/doc/pdns/changelog.Debian.gz
/usr/sbin
/usr/sbin/pdns_server
/usr/bin
/usr/bin/pdnssec
/usr/bin/zone2json
/usr/bin/dnsreplay
/usr/bin/pdns_control
/usr/bin/zone2sql
3.3.2 PowerDNS用MySQLモジュールをインストール
次にPowerDNS用のMySQLドライバをインストールします。
# wget https://www.monshouwer.eu/download/3rd_party/pdns-server/el6/x86_64/pdns-server-backend-mysql-3.2-1.el6.MIND.x86_64.rpm
# alien pdns-server-backend-mysql-3.2-1.el6.MIND.x86_64.rpm
# dpkg -i pdns-server-backend-mysql_3.2-2_amd64.deb
# dpkg -L pdns-server-backend-mysql
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/pdns-server-backend-mysql-3.2
/usr/share/doc/pdns-server-backend-mysql-3.2/no-dnssec.schema.mysql.sql
/usr/share/doc/pdns-server-backend-mysql-3.2/dnssec.schema.mysql.sql
/usr/share/doc/pdns-server-backend-mysql
/usr/share/doc/pdns-server-backend-mysql/changelog.Debian.gz
/usr/share/doc/pdns-server-backend-mysql/copyright
/usr/lib64
/usr/lib64/libgmysqlbackend.so
※ alienがインストールされてなければ
# apt-get install alien dpkg-dev debhelper build-essential
3.3.3 PowerDNSの設定
バックエンドにMySQLを使うように設定します。
# vim /etc/powerdns/pdns.conf
launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-dbname=powerdns
gmysql-password=02c98b78a3db6de9d98454f36d286f00d862b51d
gmysql-dnssec
gmysql-socket=/var/run/mysqld/mysqld.sock
3.3.4 テストデータで動作の確認
テストデータを登録
# mysql -u root -p
Enter passowrd:
mysql> use powerdns;
mysql> INSERT INTO domains (name, type) values ('test.com', 'NATIVE');
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','localhost ahu@ds9a.nl 1','SOA',86400,NULL);
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','dns-us1.powerdns.net','NS',86400,NULL);
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','dns-eu1.powerdns.net','NS',86400,NULL);
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'www.test.com','199.198.197.196','A',120,NULL);
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'mail.test.com','195.194.193.192','A',120,NULL);
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'localhost.test.com','127.0.0.1','A',120,NULL);
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','mail.test.com','MX',120,25);
PowerDNSを起動
# /etc/init.d/pdns monitor
May 07 21:36:42 Reading random entropy from '/dev/urandom'
May 07 21:36:42 This is a standalone pdns
May 07 21:36:42 UDP server bound to 0.0.0.0:53
May 07 21:36:42 TCP server bound to 0.0.0.0:53
May 07 21:36:42 PowerDNS 3.2 (C) 2001-2013 PowerDNS.COM BV (Jan 17 2013, 09:33:38, gcc 4.4.5) starting up
May 07 21:36:42 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2.
May 07 21:36:42 Creating backend connection for TCP
May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 About to create 3 backend threads for UDP
% May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 gmysql Connection successful
May 07 21:36:42 Done launching threads, ready to distribute questions
"/etc/init.d/pdns monitor"の実体
/usr/sbin/pdns_server --daemon=no --guardian=no --control-console --loglevel=9
pdns_serverに関してはmanページを参照
# man pdns_server
テストデータを検証する
# host www.test.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
www.test.com has address 199.198.197.196
# host -v -t mx www.test.com 127.0.0.1
Trying "www.test.com"
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20874
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.test.com. IN MX
;; AUTHORITY SECTION:
test.com. 3600 IN SOA localhost. ahu.ds9a.nl. 1 10800 3600 604800 3600
Received 86 bytes from 127.0.0.1#53 in 0 ms
テストが完了すればテストデータは削除しておく。
# mysql -u root -p
Enter passowrd:
mysql> use powerdns;
mysql> delete from domains;
mysql> delete from records;
3.3.5 PowerDNSの起動
PowerDNSを起動する
# /etc/init.d/pdns start
"/etc/init.d/pdns start"の実体
# /usr/sbin/pdns_server --daemon --guardian=yes
OS起動時に起動するか確認
# sysv-rc-conf --list | grep pdns
pdns 0:off 1:off 2:on 3:on 4:on 5:on 6:off
※ sysv-rc-confがインストールされてなければ
# apt-get install sysv-rc-conf
3.3.6 PowerDNSへゾーン/レコードを登録する
※ atomiapowerdnssyncが起動していない場合は、予め下記のコマンドにて起動しておいてください。
# /etc/init.d/atomiadns-powerdnssync start
Atomia DNS Web Appでゾーン/レコードを登録する
GUIツールにログインし、[+ Add New Zone]ボタンから新規ゾーンを登録する。その後[Edit]ボタンからレコードを登録する。
http://[your machine]:5380
Atomia DNS Clientでゾーン/レコードを登録する
atomiadnsclientコマンドを使ってゾーンを登録する。
# atomiadnsclient --uri http://[your machine]/atomiadns --method AddZone --arg …
atomiadnsclientコマンドを使ってレコードを登録する。
# atomiadnsclient --uri http://[your machine]/atomiadns --method AddDnsRecords --arg ...
3.3.7 PowerDNSへ登録したレコードを更新する
Atomia DNS Web Appでレコードを更新する
GUIツールにログインし、[Edit]ボタンからレコードを更新する。
http://[your machine]:5380
Atomia DNS Clientでレコードを更新する
atomiadnsclientコマンドを使ってレコードを更新する。
# atomiadnsclient --uri http://[your machine]/atomiadns --method EditDnsRecords --arg ...
3.3.8 PowerDNSへ登録したレコードを削除する
Atomia DNS Web Appでレコードを削除する
GUIツールにログインし、[Edit]ボタンからレコードを削除する。
http://[your machine]:5380
Atomia DNS Clientでレコードを削除する
atomiadnsclientコマンドを使ってレコードを削除する。
# atomiadnsclient --uri http://[your machine]/atomiadns --method DeleteDnsRecords --arg ...
3.3.8 PowerDNSへ登録したゾーンを削除する
Atomia DNS Web Appでゾーンを削除する
GUIツールにログインし、[Delete]ボタンからゾーンを削除する。
http://[your machine]:5380
Atomia DNS Clientでゾーンを削除する
atomiadnsclientコマンドを使ってゾーンを削除する。
# atomiadnsclient --uri http://[your machine]/atomiadns --method DeleteZone --arg ...
3.3.10 PowerDNSの停止
PowerDNSを停止する
# /etc/init.d/pdns stop
"/etc/init.d/pdns stop"の実体
# /usr/bin/pdns_control quit 2> /dev/null
pdns_controlに関してはmanページを参照
# man pdns_control
4. DNSSEC
4.1 DNSSECとは
DNSSECとはデータの応答送信の際に公開鍵暗号を利用した署名を付加し、受信側で付加された署名を検証することによりデータの出自認証と完全性を確認でき、DNS応答の偽造(キャッシュポイズニング)を防ぐことができるDNSのセキュリティ拡張です。
ここでは詳細な説明は省きます。
信頼の連鎖 (chain of trust)
DNSSECと言えば信頼の連鎖。受け取ったDNS応答が「本当に正しい(偽装されていない)」ことを検証するためには、受け取ったデータについて以下の2点の確認が必要になります。
- 「正しい相手から」… 本当にその相手が登録したデータであること(データ出自の認証)
- 「そのままの形で」… 通信途中で置き換えられたり、一部が失われたりしていないこと(データの完全性)
example.jpの例
署名(コンテンツサーバ)
1. example.jpゾーンのレコードをZSK秘密鍵で署名します。
2. example.jpゾーンのZSK公開鍵をKSK秘密鍵で署名します。
3. example.jpゾーンのKSK公開鍵(と同等の情報)をDSとして親ゾーン(jp)に登録します。
4. jpゾーンのレコードをZSK秘密鍵で署名します。
5. jpゾーンのZSK公開鍵をKSK秘密鍵で署名します。
6. jpゾーンのKSK公開鍵(と同等の情報)をDSとして親ゾーン(ルート)に登録します。
7. ルートゾーンのレコードをZSK秘密鍵で署名します。
8. ルートゾーンのZSK公開鍵をKSK秘密鍵で署名します。
検証(キャッシュサーバ)
1. ルートゾーンのKSK公開鍵はキャッシュサーバが予め保持します。
2. キャッシュサーバはルートゾーンKSK公開鍵を用いて検証し、ルートゾーンのZSK公開鍵を入手します。
3. キャッシュサーバはルートゾーンZSK公開鍵を用いて検証し、JPゾーンのKSK公開鍵を入手します。
4. キャッシュサーバはJPゾーンのKSK公開鍵を用いて検証し、JPゾーンのZSK公開鍵を入手します。
5. キャッシュサーバはJPゾーンのZSK公開鍵を用いて検証し、exampleゾーンのKSK公開鍵を入手します。
6. キャッシュサーバはexampleゾーンのKSK公開鍵を用いて検証し、exampleゾーンのZSK公開鍵を入手します。
7. キャッシュサーバはexampleゾーンのZSK公開鍵を用いて検証し、レコード情報を取得します。
KSK (Key Signing Key)
「正しい相手から」
ゾーン内の公開鍵情報に署名するための比較的暗号強度の高い(RSAで2048bitほど)鍵。利用期間を長く(年次)できるため、鍵更新の頻度を低くできる。署名コストは高いが、少数の鍵情報のみを署名対象とするため問題にはならない。KSK公開鍵と暗号論的に等価な情報(DS)を作成し、親ゾーンに登録する必要がある。ロールオーバーした場合は、同時にDSも更新する必要がある。
ZSK (Zone Signing Key)
「そのままの形で」
ゾーンに署名するための比較的暗号強度の低い(RSAで1024bitほど)鍵。署名コストが低いため、大規模ゾーンの署名にも適応できる。安全確保のため、ある程度頻繁(月次)に鍵を更新する必要がある。ロールオーバーは親ゾーンとは関係なく独立で行える。
DS (Delegation Singer) レコード
KSK公開鍵にSHA-1やSHA-256等のハッシュ関数を適用して作成した、KSK公開鍵と等価な情報。親ゾーンに登録する必要がある。また親ゾーンにのみ存在する。
DNSKEYレコード
KSKとZSKの公開鍵を格納するためのレコード。
RRSIGレコード
レコードの署名レコード。
4.2 Atomia DNSのDNSSEC関連API
Atomia DNS Web AppからではDNSSECの設定が行えません。そのためDNSSECの設定はAtomia DNS Client(atomiadnsclientコマンド)を用います。
API一覧
メソッド名 | 概要 |
---|---|
GetDNSSECKeys | ストアされている全てのDNSSEC鍵のリストを取得する |
GetDNSSECKeysDS | ストアされている全てのアクティブなKSK鍵に対して生成されたDSレコードのリストを取得する |
GetExternalDNSSECKeys | ストアされている全ての外部DNSSEC鍵のリストを取得する |
AddDNSSECKey | データベースへDNSSEC鍵を追加する |
AddExternalDNSSECKey | データベースへ外部DNSSEC鍵を追加する |
ActivateDNSSECKey | DNSSEC鍵を有効にする |
DeactivateDNSSECKey | DNSSEC鍵を無効にする |
DeleteDNSSECKey | データベースからDNSSEC鍵を削除する |
DeleteExternalDNSSECKey | データーベスから外部DNSEC鍵を削除する |
GetDNSSECZSKInfo | 自動化されたZSKロールオーバーを実行できるようにストアされているすべてのZSK鍵に関する必要な情報を取得する |
4.3 DNSSEC鍵を登録する
4.3.1 KSK鍵を登録する
鍵生成にrng-toolsを使うので予めインストールしておきます。
# apt-get install rng-tools
# vim /etc/default/rng-tools
HRNGDEVICE=/dev/urandom
# /etc/init.d/rng-tools start
KSK鍵を登録します。
# atomiadnsclient --method AddDNSSECKey --arg RSASHA256 --arg 2048 --arg KSK --arg 1
KSK鍵が登録されたか確認します。
# atomiadnsclient --method GetDNSSECKeys
$VAR1 = [
{
'algorithm' => 'RSASHA256',
'activated' => '1',
'keysize' => '2048',
'activated_at' => '2013-05-09 20:15:54.240659',
'keytype' => 'KSK',
'created_at' => '2013-05-09 20:15:54.240659',
'deactivated_at' => undef,
'keydata' => 'Private-key-format: v1.2
Algorithm: 8 (RSASHA256)
Modulus: sE6t8Fw429Nww9wGaP5ygT0CdD8oadcMGCbWg5qg2SzTPhapTFtR7uXXkSSyURBkw2kUK02/gK8Zc5KDmMYSmqKL2ugdvjj2yfLpb8iYdt5qCG6bi0ICGeSGgdQ6lkNFCkiwohcl7LhJVjNigbcxC54JPCUZuMGfq0chPE3uJGmYrkE4ZCLnKacVFIAn92FozmeQ1vOneMJZ1iL1saUZtkqVVTjikbkI9qjr7V5KYQbcth7/zTmphVvs6hKU6LATNA4Ieq0I0E+u3mtmrgcjEsRdNVHALwCnbcE+o/oAC3gywlgimmjfTPthbrXoqAwxN9ipnfebhNLyNet0VuLraQ==
PublicExponent: AQAB
PrivateExponent: jLafGKFiOACvlYJ8EzxRg1iAJutpg9/ApV4KA4tcKTkfeAR6JpkT8Ym73Pne39gns9af5FfvKfOWaqlbIomju4tT9+keI/4u6ctYCIGfPfARzJ0Kw8BxEN1VhTUvdVJHPgf6AcRb3mzPC1+DlWfyWwVM9ZXey5itqPPiUNEZ6jCSKDoGz90iN/RGNqTxI+bVUk1hJNAd/AZ9jE5TaHmNbm7UBVfau6xP9arm90axLhICaIH252tZxET+lXoJLS8RQ3N05Rx4deTPMooAeawWMsX/cZZTuFKD0lcR1n5XkGU0RLEruK9Yw+fN22aGOWpPsuoaWQ62WyvNZwHcssDJoQ==
Prime1: 1t78VT6rylDXWoMDKNDEGqx1CDlMmsC+PjQIIxuzEgVyl3tBHkeOmRBvXqSrkuqf7ScR2kz95SXrYWobYIR0wOFqjZQYcGbbBqPaz5XjBFzghOPpbxZ8J7/W2fkzuESyFC6fAWx+e5oGAt6FSyyc0zRYVPCDZnoAv98bVptRw8U=
Prime2: 0g4DR4JH1WUbvG71WRV8ESx5+ISCZb64CI0q7RlXnbhSJoglXIiLCEceEoPcnoR95bqCvT791EBvgM73TKG95g8TEWCZDR56nO+bpXSo5Hvm1FYJ4VYxr9g6JkRnrHo7w8nqUykQpVM+RBHMWlU/TMylr//Cu9xOG2uO+YqY71U=
Exponent1: r49z5oaVQHG681Y2P6QLhqu/159RiuPOzO4gc+cO8buHvGNVelMHHOMDy/WJxjlzwAX7HT1o+VB5OJfElKDE8E99iv4k1boEXTGF97REz2y/eXTqZvydJrEk7+YgLv/Z7ImHG1e1JHJdVPzRNfHWlO6g+Y2mHxWyBRNat/Gh5e0=
Exponent2: Uxb/7RV33M21/v/VRXveK9zwEoI4Io8itR9CT6+qnNUAigVo4gWRGaEoICLQ7lNyiaERflKgjYk/kjBMWp/QQmTMIh+X6zyXO+T8KKLQ/DCWyn+OQPibhvd9aQ2+BNgFNBl2+5ZO41beVobD0yfNdk+tasU8/prSur39PHC6tlE=
Coefficient: pE/z+rrNRHpNqJsvdReFrsgrybUuOYEUYQqtywYQO2gKlqfveQVvP5c+n2Uzjlo2mr63KyOAUQyzV+SoElRNL8+aOZeYqovdxBQXkQEvlEpUhAdAqxWdYhkwuyWN+14W4wjBW7cln86mtxZskmRsWvQtEM9Gl9O6uBBLe2/ZyRc=
',
...
PowerDNS側ではcryptokeysテーブルに登録されます。PowerDNSでDNSSECを利用する場合、cryptokeys、domainmetadata、tsigkeysテーブルを使います。
4.3.2 ZSK鍵を登録する
# atomiadnsclient --method AddDNSSECKey --arg RSASHA256 --arg 1024 --arg ZSK --arg 1
非アクティブなZSKを登録する場合は最後の引数の値を0に
# atomiadnsclient --method AddDNSSECKey --arg RSASHA256 --arg 1024 --arg ZSK --arg 0
4.4 pdnssecツール
pdnssecコマンドはPowerDNSSEC用のコマンドラインツールです。
コマンド名 | 概要 |
---|---|
activate-zone-key ゾーン 鍵ID | ゾーンの指定した鍵IDの鍵を有効にします |
add-zone-key ゾーン [zsk│ksk] [bits] [rsasha1│rsasha256│rsasha512│gost│ecdsa256│ecdsa384] | ゾーン用のKSKまたはZSK鍵を指定されたアルゴリズムで作ります |
check-zone ゾーン | 指定したゾーンがDNSSECの正しさをチェックします |
check-all-zones | 全てのゾーンに対し、DNSSECの正しさをチェックします |
create-bind-db FNAME | BINDバックエンド用のDNSSECデータベースを作成します |
deactivate-zone-key ゾーン 鍵ID | ゾーンの指定した鍵IDの鍵を無効にします |
disable-dnssec ゾーン | ゾーンの署名と全ての鍵を非アクティブかします |
export-zone-dnskey ゾーン 鍵ID | 指定したゾーンの指定した公開鍵をエクスポートします |
export-zone-key ゾーン 鍵ID | 指定したゾーンの指定した秘密鍵をエクスポートします |
hash-zone-record ゾーン RNAME | ゾーンのレコード用NSEC3ハッシュ値を計算します |
import-zone-key ゾーン ファイル [ksk│zsk] | ゾーンに対しKSKまたはZSK鍵を伊ポートします |
rectify-zone ゾーン [ゾーン ..] | 指定ゾーンのDNSSECフィールドをFIXします |
rectify-all-zones | 全てのゾーンをFIXします |
remove-zone-key ゾーン 鍵ID | ゾーンから指定した鍵IDの鍵を削除します |
secure-zone ゾーン [ゾーン ..] | ゾーンに対し、DNSSEC設定を行います |
set-nsec3 ゾーン ['params' [narrow]] | ゾーンにNSEC3パラメータを設定します |
set-presigned ゾーン | 事前署名ゾーンに切り替えます |
show-zone ゾーン | ゾーンのDNNSEC鍵の詳細を表示します |
unset-nsec3 ゾーン | NSEC3からNSECへ戻します |
unset-presigned ゾーン | ゾーンの事前署名を解除します |
4.5 DSの取得と上位ゾーンへの反映
DSは以下のコマンドにて取得できます。
# pdnssec show-zone ゾーン | grep DS
DS = test.com IN DS 55216 8 1 382c270fa3e842a144994f79818d2dca82b50f45
DS = test.com IN DS 55216 8 2 b7fe7d2bf358a8f92026fd7f065aa5c7856902c5c28a293689bc08d3efacb3f4
DS = test.com IN DS 55216 8 3 6450eb2a4bff6663c7a4f7632e247ed3fdb3f0c0cb86f6f1a9c2d22894ad105e
...
DSレコードとして反映するのは以下の部分となります。
DS = test.com IN DS 55216 8 1 382c270fa3e842a144994f79818d2dca82b50f45
の
55216 8 1 382c270fa3e842a144994f79818d2dca82b50f45
の部分を反映します。先頭から鍵タグ(対応するDNSKEYレコードから生成した整数値)、アルゴリズム(署名鍵のアルゴリズムを表す整数値)、ダイジェスト型(ダイジェスト方式を表す整数値)、ダイジェストデータ(DNSKEYのダイジェストを16進数で表した文字列)です。
APIで取得する場合はatomiadnsclientを使います。
# atomiadnsclient --method GetDNSSECKeysDS --arg test.com
$VAR1 = [
{
'digest' => '382C270FA3E842A144994F79818D2DCA82B50F45',
'digestType' => '1',
'alg' => '8',
'keyTag' => '55216'
},
...
4.5.1 上位ゾーンへの反映
上位ゾーンへの反映方法はレジストリやレジストラによって違います。
例えば自身がレジストラの場合、.JPドメインを扱うJPRSとやりとりする場合はGUIまたはAPIを通じてDSレコードの情報を反映します。.COMや.NETドメインなどのgTLDや大半のccTLDはEPP(Extensible Provisioning Protocol)というレジストラからレジストリへのデータ登録用プロトコルを用います。GUIが用意されている場合もあります。
自身がリセラーの場合はレジストラが用意したGUIやAPIにて、自身がクライアントの場合はリセラーまたはレジストラが用意したGUIやAPIにてDSレコードを登録することになります。国内ではそもそもgTLDに対するDSレコードの取り次ぎをレジストラが行っていない場合が多数です。(Japanとなっているのが国内レジストラです)
例えば.ORGドメインの場合は国内では2社(JPRSは除く)が対応可能となっていますが、公式サイトでは取り次ぎのアナウンスはありません。
海外でも対応しているレジストラやリセラーは少ないですが、ドメイン保持数が世界一位であるGo DaddyはDNSSECに対応しています。
どうしてもgTLDでDNSSECを採用したい場合は、レジストリへの取り次ぎを行っているレジストラ(Go Daddy等)か、そのレジストラと契約しているリセラーにてドメインを取得しましょう。
4.6 ZSKロールオーバー
事前公開法によるZSKのロールオーバーを行う。
非アクティブ化されているZSK鍵をアクティブ化する。
# atomiadnsclient --method ActivateDNSSECKey --arg 次のZSK鍵ID
以前のZSK鍵を非アクティブ化する。
# atomiadnsclient --method DeactivateDNSSECKey --arg 前のZSK鍵ID
以前のZSK鍵を削除する。
# atomiadnsclient --method DeleteDNSSECKey --arg 前のZSK鍵ID
非アクティブなZSKを登録する。
# atomiadnsclient --method AddDNSSECKey --arg RSASHA256 --arg 1024 --arg ZSK --arg 0
以降、定期的(月次)に繰り返し。
ある程度自動化は可能。
4.7 KSKロールオーバー
二重署名法によるKSKのロールオーバーを行う。
新しいKSK鍵を登録する。
# atomiadnsclient --method AddDNSSECKey --arg RSASHA256 --arg 2048 --arg KSK --arg 1
DS情報を取得し、親ゾーンへ登録する。
# pdnssec show-zone ゾーン | grep DS
以前のKSK鍵を非アクティブ化する。
# atomiadnsclient --method DeactivateDNSSECKey --arg 前のKSK鍵ID
以前のKSK鍵を削除する。
# atomiadnsclient --method DeleteDNSSECKey --arg 前のKSK鍵ID
KSKをロールオーバーした場合、DSを上位ゾーンへ再登録しなければいけないが、現状自動化するツールは存在しない。OpenDNSSECはeppclientというレジストリ(つまり上位ゾーン)のデータを更新sるうプラグインがあったが、保守されなかったためデフォルトから外されている。
4.8 DNSSECを無効に
# pdnssec disable-dnssec ゾーン