FreeBSD

BIND 9.9 の DNSSEC の設定

FreeBSD 9.3-RELEASE に付属の named が BIND 9.9.5 になり、inline signing が使えるようになったので、設定してみた。

cf. Inline Signing in ISC BIND 9.9.0 -- Examples
In-line Signing With NSEC3 in BIND 9.9+ -- A Walk-through

要点

KSK と ZSK の生成

dnssec-keygen コマンドを使って ZSKKSK を生成する。

# mkdir /etc/namedb/keys
# cd /etc/namedb/keys
# dnssec-keygen -3 example.jp > zsk-example.jp		# ZSK が生成される
Generating key pair.........++++++ .....++++++ 
# dnssec-keygen -3 -fk example.jp > ksk-example.jp	# KSK が生成される
Generating key pair......+++ .........+++ 

zsk-example.jp ksk-example.jp ファイルの中に、それぞれ生成されたキーのファイル名が入る。

Kexample.jp.+007+02268.key のような感じのファイルができる。

上流に登録する DS は KSK から作る。

# dnssec-dsfromkey `cat ksk-example.jp`.key > ds-example.jp

ds-example.jp の中身はこんな感じ。

# cat ds-example.jp
example.jp. IN DS 2268 7 1 AA902BA2DEA0FE792F001A968621DA57F0F119FD
example.jp. IN DS 2268 7 2 3FC9EBC2892630837CA698247B7CC15C5ABF26045106FCE4715DB9357A8DFC69

最後に、これらのファイルとディレクトリを bind の持ち物に変更しておく。

# chown bind * .

named.conf の設定

まず、options セクションに key-directory を追加する。

options {
        directory       "/etc/namedb/working";
        key-directory   "/etc/namedb/keys";
        pid-file        "/var/run/named/pid";
        dump-file       "/var/dump/named_dump.db";
        statistics-file "/var/stats/named.stats";

        allow-query {
                localhost;
                localnets;
        };
        allow-transfer {
                none;
        };
        dnssec-validation       auto;
        dnssec-lookaside        auto;
};

次に、DNSSEC を有効にするゾーンに auto-dnssec と inline-signing を追加する。

zone "example.jp" {
        type    master;
        file    "/etc/namedb/master/example.jp.db";
        allow-query {
                any;
        };
        allow-transfer {
                10.0.0.2;  // secondary (slave)
        };
        auto-dnssec maintain;
        inline-signing yes;
};

named は、ゾーンファイルと同じ場所にいくつかのファイルを作るので、この例だと /etc/namedb/master/ に bind で書き込める必要がある。

ところが、named の起動スクリプトは、デフォルトのままだと起動時に /etc/namedb/master/ の owner:group permission を root:wheel 0755 に戻してしまう。

選択肢はふたつ。

後者にしてみた。

# chown bind /etc/namedb/master
# echo 'named_chroot_autoupdate="NO"' >> /etc/rc.conf
# service named restart

NSEC3 対応

# rndc signing -nsec3param 1 0 10 9876abcd example.jp
# rndc loadkeys example.jp

9876abcd のところは salt なので任意の 16 進数(8 桁まで)。

DS レコードの登録

dnssec-dsfromkey の出力のうち、DS よりも後の部分をレジストラに登録する。

example.jp. IN DS 2268 7 1 AA902BA2DEA0FE792F001A968621DA57F0F119FD
example.jp. IN DS 2268 7 2 3FC9EBC2892630837CA698247B7CC15C5ABF26045106FCE4715DB9357A8DFC69

空白も含めてそのまま、ふたつとも。

whois の [Signing Key] のところにこれらが表示されるようになれば完了。