TSIGによる署名

NSDが送出するNOTIFYへのTSIG署名

ns.example1.jpがns.example2.jp[10.2.0.3]に向けて送出する、example1.jpゾーンに関するNOTIFYにns.example1.jp-ns.example2.jpという鍵でTSIG署名してみます。
まずns.example2.jpの側で、example1.jpゾーンに関するNOTIFYについて署名を検証するように、named.confの

zone "example1.jp" IN {
                :
                :
};

にallow-notifyステートメントを追加し

zone "example1.jp" IN {
                :
                :
        allow-notify {
                key ns.example1.jp-ns.example2.jp;
        };
                :
                :
};

のように変更します。
この設定で、ns.example1.jpでnsdc notifyを実行して(署名していない)NOTIFYを送出してみると、ns.example2.jpのnamed(BIND 9.3.1)は

Dec 27 15:38:47 ns.example2.jp named[89746]: notify: info: client 10.2.0.4#52528: received notify for zone 'example1.jp'

のようなメッセージをログに出力し、上のようなallow-notifyが設定されていても、署名されていないNOTIFYを受理しました。
続いてnsd.confの

zone:
        name: example1.jp
                :
                :
        notify: 10.2.0.3 NOKEY


zone:
        name: example1.jp
                :
                :
        notify: 10.2.0.3 ns.example1.jp-ns.example2.jp

に変更し、NOTIFYに署名するように設定します。この設定でNOTIFYを送出してみるとns.example2.jpのnamedは
Dec 27 15:29:17 ns.example2.jp named[89746]: notify: info: client 10.2.0.4#55308: received notify for zone 'example1.jp': TSIG 'ns.example1.jp-ns.example2.jp'
のようなメッセージをログに出力し、署名を検証した上でNOTIFYを受理したことがわかります。
間違った鍵(まぎらわしいですがns.example2.jp-ns.example1.jpで試してみました)で署名したNOTIFYを送出してみると、ns.example2.jpのnamedは

Dec 27 15:38:20 ns.example2.jp named[89746]: security: error: client 10.2.0.4#58731: request has invalid signature: TSIG ns.example2.jp-ns.example1.jp: tsig verify failure (BADKEY)

のようなメッセージをログに出力し、検証の結果、署名が不正だったことを理由にNOTIFYを破棄したことがわかります。

NSDが送出するゾーン転送要求へのTSIG署名

次に、ns.example1.jpがns.example2.jp[10.2.0.3]に向けて送出する、example2.jpゾーンに関するゾーン転送要求にns.example1.jp-ns.example2.jpという鍵でTSIG署名してみます。
NOTIFYのときと同様に、まずns.example2.jpの側でexample2.jpゾーンに関するゾーン転送要求を署名によりアクセス制限するように、named.confの

zone "example2.jp" IN {
                :
                :
};

にallow-transferステートメントを追加し

zone "example1.jp" IN {
                :
                :
        allow-transfer {
                key ns.example1.jp-ns.example2.jp;
        };
                :
                :
};

のように変更します。
この設定で、example2.jpゾーンのデータを更新してns.example1.jpにNOTIFYを送出してみると、ns.example2.jpのnsdは署名していないゾーン転送要求を送出してくるので、ns.example2.jpのnamedは

Dec 27 16:37:53 ns.example2.jp named[89981]: security: error: client 10.2.0.4#50293: zone transfer 'example2.jp/IXFR/IN' denied

のようなメッセージをログに出力し、検証の結果、署名が不正だったことを理由にゾーン転送を拒否したことがわかります。
続いてnsd.confの

zone:
        name: example2.jp
                :
                :
        request-xfr: 10.2.0.3 NOKEY
                :
                :


zone:
        name: example2.jp
                :
                :
        request-xfr: 10.2.0.3 ns.example1.jp-ns.example2.jp
                :
                :

に変更し、ゾーン転送要求に署名するように設定します。この設定で、example2.jpゾーンのデータを更新してns.example1.jpにNOTIFYを送出してみると、ns.example2.jpのnamedは

Dec 27 16:48:09 ns.example2.jp named[89981]: xfer-out: info: client 10.2.0.4#65315: transfer of 'example2.jp/IN': AXFR-style IXFR started: TSIG ns.example1.jp-ns.example2.jp

のようなメッセージをログに出力し、署名を検証した上でゾーン転送要求に応じたことがわかります。
TSIGによる署名とその検証の準備|Up|TSIG署名の検証
Copyright(c) 2006, Koh-ichi Ito, All right reserved.
Last update: $Date: 2018-10-21 16:09:48 +0900 (Sun, 21 Oct 2018) $