ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

DNSSEC 導入

いつの間にか Tucows が gTLD の DNSSEC に対応していたので、
手元の実験用ドメインで導入してみました。


まずは鍵リポジトリを作ります。

$ cd /usr/local/etc/namedb
$ sudo mkdir keys

KSK のロールオーバーは来年考えることにしてとりあえず作成。
末尾のはドメイン名を書きます。

$ sudo dnssec-keygen -K keys -a RSASHA256 -b 2048 -f ksk hslab.net
Generating key pair..............................................+++ ............+++
Khslab.net.+008+07519

とりあえずしばらくは毎週日曜 0:00 に ZSK を作成して、毎日 0:10 に再署名をかける予定。
日曜 0:10 時点で inactive になる ZSK と、
まずは stand-by して日曜 0:10 時点から active、次の日曜 0:10 時点で inactive になる ZSK を作ります。

$ sudo dnssec-keygen -K keys -a RSASHA256 -b 1024 -P now -A now -I +1D -D +2D hslab.net
Generating key pair..............++++++ .......++++++
Khslab.net.+008+27564
$ sudo dnssec-keygen -K keys -a RSASHA256 -b 1024 -P now -A +1D -I +8D -D +9D hslab.net
Generating key pair....................++++++ ............++++++
Khslab.net.+008+45060

鍵のメタ情報はこんな感じになりました。

$ cat *.key
; This is a key-signing key, keyid 7519, for hslab.net.
; Created: 20160701145659 (Fri Jul  1 23:56:59 2016)
; Publish: 20160701145659 (Fri Jul  1 23:56:59 2016)
; Activate: 20160701145659 (Fri Jul  1 23:56:59 2016)
hslab.net. IN DNSKEY 257 3 8 AwEAAawAAeGJm5ZnlpiAEXwaEjOIP0f1Qp9X/n...
; This is a zone-signing key, keyid 27564, for hslab.net.
; Created: 20160701145754 (Fri Jul  1 23:57:54 2016)
; Publish: 20160701145754 (Fri Jul  1 23:57:54 2016)
; Activate: 20160701145754 (Fri Jul  1 23:57:54 2016)
; Inactive: 20160702145754 (Sat Jul  2 23:57:54 2016)
; Delete: 20160703145754 (Sun Jul  3 23:57:54 2016)
hslab.net. IN DNSKEY 256 3 8 AwEAAcvl4fz19BK6ZcRq5v+bfIVsfuZU8UHyZhN...
; This is a zone-signing key, keyid 45060, for hslab.net.
; Created: 20160701145807 (Fri Jul  1 23:58:07 2016)
; Publish: 20160701145807 (Fri Jul  1 23:58:07 2016)
; Activate: 20160702145807 (Sat Jul  2 23:58:07 2016)
; Inactive: 20160709145807 (Sat Jul  9 23:58:07 2016)
; Delete: 20160710145807 (Sun Jul 10 23:58:07 2016)
hslab.net. IN DNSKEY 256 3 8 AwEAAa+hnTG6ycprahnq+vszIQ9cCW1Z8ix8M4qH...

んでっ、ゾーンファイルに署名。
うちのゾーンファイルには ORIGIN が書いてなかったので、-o オプションで ORIGIN を指定します。←ここでハマった...
末尾はゾーンファイルのファイル名。

$ sudo dnssec-signzone -K keys -N unixtime -o hslab.net -S master/hslab.net.zone
Fetching KSK 7519/RSASHA256 from key repository.
Fetching ZSK 27564/RSASHA256 from key repository.
Fetching ZSK 45060/RSASHA256 from key repository.
Verifying the zone using the following algorithms: RSASHA256.
Zone fully signed:
Algorithm: RSASHA256: KSKs: 1 active, 0 stand-by, 0 revoked
                      ZSKs: 1 active, 1 stand-by, 0 revoked
master/hslab.net.zone.signed

KSK は 1 個。ZSK はスタンバイが 1 個にアクティブが 1 個。予定通り。


後はレジストラに登録する DS レコードを作ります。

$ sudo dnssec-dsfromkey keys/Khslab.net.+008+07519.key
hslab.net. IN DS 7519 8 1 A07EC45282B9AD8A78126BD5827254EEBD4EF900
hslab.net. IN DS 7519 8 2 A2CB2855132604B7493BD1A2A9B4DD115AA4AF62DAD9D85703C75303A25682D9

この 2 レコードを Tucows のマネージメントページからポチポチと入力すればOK。


次はロールオーバー用のスクリプトの準備。

$ cat genkey.sh
#!/bin/sh
cd /usr/local/etc/namedb
/usr/local/sbin/dnssec-keygen -K keys -a RSASHA256 -b 1024 -P now -A +7D -I +14D -D +15D hslab.net
$ cat sign.sh
#!/bin/sh
cd /usr/local/etc/namedb
/usr/local/sbin/dnssec-signzone -K keys -N unixtime -o hslab.net -S master/external/hslab.net.zone
/usr/local/sbin/rndc reload

sign.sh はさっきと同じコマンド。genkey.sh は日付だけ調整してほぼ同じコマンド。


これを /etc/crontab に登録。

$ tail -n 2 /etc/crontab
0       0       *       *       0       root    /root/genkey.sh
10      0       *       *       *       root    /root/sign.sh

この辺を参考にしました。
https://www.nic.ad.jp/ja/materials/iw/2010/proceedings/s10/iw2010-s10-01.pdf
https://jprs.jp/dnssec/doc/smart-sign.pdf
http://dnssec.jp/wp-content/uploads/2011/08/20110420-dnssec-rollover_key-nakashima.pdf