auto-dnssec maintain; を試してみる
BIND-9.7.2-P2で
ARMを見る限り、
お試しの環境はCentOS 5.5で、ディレクトリ構成なんかはchrootな場合のデフォルトです。起動オプションは、
になります。用意するゾーンはテストなので
んで、鍵を作ります。お試しするだけなので、賞味期限は短めで。まずは、KSK。
今すぐゾーンに公開され署名に使用され、1 日後署名に使用されなくなり、2 日後ゾーンから消えるものを。
次に、ZSK。2つ作ります。
今すぐゾーンに公開され署名に使用され、3 時間後署名に使用されなくなり、4 時間後ゾーンから消えるものと、1 時間後ゾーンに公開され、2 時間後署名に使用され、5 時間後署名に使用されなくなり、6 時間後ゾーンから消えるものを。
ちなみに、metadataの
まあ、かなり適当です。
次に、
を足して、
尚、お試しならば
と完全に等価ですので、例えば、
みたいな
とか記述すればできます。ちなみに、上記はデフォルト値です。
これで、準備ができたので、
これで、Kexample.jp.+008+12199とKexample.jp.+008+59595が署名に使用され、Wed Oct 27 22:45:55 JST 2010 を過ぎればKexample.jp.+008+58539がゾーンに公開され、Thu Oct 28 00:42:57 JST 2010を過ぎればKexample.jp.+008+59595が署名に使われなくなったりしてくれます(*2)。
ゾーンへの RR の追加などは、
なんぞで、そうでなければ、
とかして、
して、
する手もあります。ちなみに、鍵に timing metadata が付いていて、ちゃんと
ただ、
ま、取り敢えず、これで上位へのDSやDLVの登録なんかを除けば、鍵を作り足し忘れない限り、大丈夫そうな状態が作れる感じ。適切なoffset値で
*1:
*2: うまく動作しない場合もあるみたいです(Nov 09, 2010)。
auto-dnssec maintain;
を試したメモ。ARMを見る限り、
auto-dnssec
に指定できる値としては、allow|maintain|create|off
があるみたいですけど、allow
は、dnssec-signzone(8)
の-S
で使えるSmart signingに毛が生えた程度な感じだし、完全放置プレイができそうなcreate
は、まだ未実装みたいなので、取り敢えず、一番便利そうなmaintain
を試してみることに。大雑把にいえば、timing metadataを付けた鍵を用意しておけば、そのtimingで鍵をゾーンにpublishedにしたり、ゾーンでactiveにしたりInactiveにしたりrevokeにしたり、ゾーンからdeleteしたりしてくれるシロモノのようです。お試しの環境はCentOS 5.5で、ディレクトリ構成なんかはchrootな場合のデフォルトです。起動オプションは、
# /usr/sbin/named -u named -t /var/named/chroot
になります。用意するゾーンはテストなので
example.jp.
にして、鍵は、/var/named/chroot/var/named/keys/example.jp
に置くことにして、ゾーンファイルは、/var/named/chroot/var/named/dynamic
に置くことにします。まず、下準備。$ su -
# cd /var/run/named
# ln -s /var/named/chroot/var/run/named/session.key .
# cd /var/named/chroot/var/named
# mkdir -m 770 dynamic
# chown -R named:named dynamic
# mkdir -m 770 keys
# chown -R named:named keys
# su - named --shell=/bin/bash
$ cd /var/named/chroot/var/named/keys
$ mkdir -m 770 example.jp
$ cd example.jp
んで、鍵を作ります。お試しするだけなので、賞味期限は短めで。まずは、KSK。
今すぐゾーンに公開され署名に使用され、1 日後署名に使用されなくなり、2 日後ゾーンから消えるものを。
$ /usr/sbin/dnssec-keygen -f KSK -r /dev/urandom -3 -a RSASHA256 \
-b 2048 -I +86400 -D +172800 -n ZONE example.jp
Generating key pair........+++ .........................................................+++
Kexample.jp.+008+12199
$ cat Kexample.jp.+008+12199.key
; This is a key-signing key, keyid 12199, for example.jp.
; Created: 20101027123754 (Wed Oct 27 21:37:54 2010)
; Publish: 20101027123754 (Wed Oct 27 21:37:54 2010)
; Activate: 20101027123754 (Wed Oct 27 21:37:54 2010)
; Inactive: 20101028123754 (Thu Oct 28 21:37:54 2010)
; Delete: 20101029123754 (Fri Oct 29 21:37:54 2010)
example.jp. IN DNSKEY 257 3 8 ...
$
次に、ZSK。2つ作ります。
今すぐゾーンに公開され署名に使用され、3 時間後署名に使用されなくなり、4 時間後ゾーンから消えるものと、1 時間後ゾーンに公開され、2 時間後署名に使用され、5 時間後署名に使用されなくなり、6 時間後ゾーンから消えるものを。
$ /usr/sbin/dnssec-keygen -r /dev/urandom -3 -a RSASHA256 \
-b 1024 -I +10800 -D +14400 -n ZONE example.jp
Generating key pair...++++++ ..............++++++
Kexample.jp.+008+59595
$ cat Kexample.jp.+008+59595.key
; This is a zone-signing key, keyid 59595, for example.jp.
; Created: 20101027124257 (Wed Oct 27 21:42:57 2010)
; Publish: 20101027124257 (Wed Oct 27 21:42:57 2010)
; Activate: 20101027124257 (Wed Oct 27 21:42:57 2010)
; Inactive: 20101027154257 (Thu Oct 28 00:42:57 2010)
; Delete: 20101027164257 (Thu Oct 28 01:42:57 2010)
example.jp. IN DNSKEY 256 3 8 ...
$ /usr/sbin/dnssec-keygen -r /dev/urandom -3 -a RSASHA256 \
-b 1024 -P +3600 -A +7200 -I +18000 -D +21600 -n ZONE example.jp
Generating key pair..........++++++ ..............++++++
Kexample.jp.+008+58539
$ cat Kexample.jp.+008+58539.key
; This is a zone-signing key, keyid 58539, for example.jp.
; Created: 20101027124555 (Wed Oct 27 21:45:55 2010)
; Publish: 20101027134555 (Wed Oct 27 22:45:55 2010)
; Activate: 20101027144555 (Wed Oct 27 23:45:55 2010)
; Inactive: 20101027174555 (Thu Oct 28 02:45:55 2010)
; Delete: 20101027184555 (Thu Oct 28 03:45:55 2010)
example.jp. IN DNSKEY 256 3 8 ...
$
ちなみに、metadataの
20101027124555
みたいな日時はUTCなもの、Wed Oct 27 21:45:55 2010
みたいなのはJSTです。そして、テスト用に簡単なexample.jp.
ゾーンファイルを作成。$ cd ../../dynamic
$ cat > example.jp.zone.signed
$ORIGIN example.jp.
$TTL 3600
@ IN SOA localhost.example.jp. hostmaster.example.jp. (
2010102701 ; Serial
10800 ; Refresh
1200 ; Retry
604800 ; Expire
1200 ) ; Minimum TTL
IN NS localhost.example.jp.
0 IN NSEC3PARAM 1 0 10 1234ab
localhost IN A 127.0.0.1
$
まあ、かなり適当です。
次に、
named.conf(5)
のoptions
かview
にdnssec-enable yes;
を足して、
zone
を以下のように追加します。zone "example.jp." {
type master;
file "dynamic/example.jp.zone.signed";
key-directory "/var/named/keys/example.jp";
update-policy local;
auto-dnssec maintain;
};
尚、お試しならば
zone
にdnssec-secure-to-insecure yes;
を足しておいた方が幸せかもしれません。ちなみに、update-policy local;
ですが、名前からするとDynamic DNSなupdateをローカルに限定してくれそうですが、ARMによると、update-policy { grant local-ddns zonesub any; };
と完全に等価ですので、例えば、
view "world" {
match-clients { any; };
match-destinations { 外側のインターフェースのIPアドレス; };
...
};
みたいな
view
に追加した場合、デフォルトのTSIG session keyを他のホストにコピーすればリモートからもupdateがかけられます。尚、デフォルトのTSIG session keyの場所や名前も変えられるようで、options
にsession-keyfile "/var/run/named/session.key";
session-keyname "local-ddns";
session-keyalg "hmac-sha256";
とか記述すればできます。ちなみに、上記はデフォルト値です。
これで、準備ができたので、
reload
してloadkeys
します(*1)。# rndc reload
# rndc loadkeys example.jp.
これで、Kexample.jp.+008+12199とKexample.jp.+008+59595が署名に使用され、Wed Oct 27 22:45:55 JST 2010 を過ぎればKexample.jp.+008+58539がゾーンに公開され、Thu Oct 28 00:42:57 JST 2010を過ぎればKexample.jp.+008+59595が署名に使われなくなったりしてくれます(*2)。
ゾーンへの RR の追加などは、
nsupdate(1)
で行います。ローカルから更新できるview
内にあるのであれば、# nsupdate -l
なんぞで、そうでなければ、
# nsupdate -k /var/run/named/session.key
とかして、
server
を指定するなりすれば更新できます。別解としては、# rndc freeze example.jp.
して、
/var/named/chroot/var/named/dynamic/example.jp.zone.signed
をエディタで編集し、SOA RRのシリアルを上げて、# rndc thaw example.jp.
する手もあります。ちなみに、鍵に timing metadata が付いていて、ちゃんと
key-directory
が指定されていれば、auto-dnssec off;
でもnsupdate(1)
等で更新すれば適切に署名してくれます。ただ、
key-directory
を指定せずデフォルト以外の場所に鍵を置いていたりすると、署名の有効期限が近づいたときに、named(8)
が勝手に署名の更新をかけようとして鍵が見つからないので、署名の除去をしたりするのはなんだかなといった感じ。DNSSECなゾーンはDynamic DNSが使えるように設定しとかないと面倒な状態になるみたいですね。auto-dnssec off;
なら署名の期限切れなんて自己責任にしてくれてもいいんじゃないかなと。設定であるのかな。取り敢えず、rndc freeze
しとけば、そういう更新は起こりませんけど、なんか使い方が違う気がしますし。ま、取り敢えず、これで上位へのDSやDLVの登録なんかを除けば、鍵を作り足し忘れない限り、大丈夫そうな状態が作れる感じ。適切なoffset値で
dnssec-keygen(8)
にtiming optionを指定してcron(8)
あたりで呼べば、作成もなんとかなるのかも。*1:
rndc loadkeys
に関する記述を追加(Nov 09, 2010)。まあ、reloadしてるんで問題ないんですけど、鍵追加したときにはloadkeys
しようねという意味で。*2: うまく動作しない場合もあるみたいです(Nov 09, 2010)。
2010-10-28 14:38
nice!(0)
コメント(0)
トラックバック(4)
コメント 0