TSIG

ソースコード

tsig は、TSIG 鍵を定義し、着信 TSIG 署名付きリクエストを検証し、レスポンスに署名します。

説明

tsig を使用すると、CoreDNS の TSIG 秘密鍵を定義できます。 これらの鍵を使用して、tsig は着信 TSIG リクエストを検証し、それらのリクエストへのレスポンスに署名します。 CoreDNS から送信されるリクエストに自身で署名することはありません。これらのリクエストを送信するそれぞれのプラグインが、tsig によって定義された鍵を使用して署名する必要があります。

tsig プラグインは、特定のクエリタイプに対して着信リクエストが署名されていることを要求し、準拠していないリクエストを拒否することもできます。

構文

tsig [ZONE...] {
  secret NAME KEY
  secrets FILE
  require [QTYPE...]
}
  • ZONE - tsig が TSIG を適用するゾーン。デフォルトでは、サーバーブロックのゾーンが使用されます。

  • secret NAME KEY - NAME に対する TSIG 秘密鍵を KEY で指定します。複数の秘密鍵を定義するには、このオプションを複数回使用します。秘密鍵は、囲んでいる ZONE だけでなく、サーバーインスタンス全体でグローバルです。

  • secrets FILE - secret と同じですが、秘密鍵をファイルからロードします。ファイルには、それぞれ以下の named.conf 形式で、任意の数のユニークな鍵を定義できます。

    key "example." {
        secret "X28hl0BOfAL5G0jsmJWSacrwn7YRm2f6U5brnzwWEus=";
    };
    

    各鍵は algorithm hmac-sha256; のように algorithm を指定することもできますが、これは現在プラグインでは無視されます。

    • require QTYPE… - TSIG で署名する必要があるクエリタイプ。指定されたタイプの要求が署名されていない場合、REFUSED されます。require all はすべてのタイプの要求に署名を要求します。 require none はどのタイプの要求にも署名を要求しません。デフォルトの動作は要求しないことです。

example.zone への転送リクエストに対して、TSIG 署名付きトランザクションを要求します。

example.zone {
  tsig {
    secret example.zone.key. NoTCJU+DMqFWywaPyxSijrDEA/eC3nK0xi3AMEZuPVk=
    require AXFR IXFR
  }
  transfer {
    to *
  }
}

auth.zone へのすべてのリクエストに対して、TSIG 署名付きトランザクションを要求します。

auth.zone {
  tsig {
    secret auth.zone.key. NoTCJU+DMqFWywaPyxSijrDEA/eC3nK0xi3AMEZuPVk=
    require all
  }
  forward . 10.1.0.2
}

バグ

セカンダリ

secondary プラグインでは、TSIG 転送はまだ実装されていません。 secondary プラグインは、ゾーン転送リクエストに署名しません。

ゾーン転送通知

transfer プラグインを使用すると、CoreDNS からのゾーン転送通知は TSIG 署名されません。

転送サーバーに関する特別な考慮事項 (RFC 8945 5.5)

https://datatracker.ietf.org/doc/html/rfc8945#section-5.5

CoreDNS は、このセクションを以下のように実装していません…

  • RFC 要件

    TSIG の名前がサーバーが発信元と共有する秘密鍵の名前でない場合、サーバーは TSIG を含むメッセージをそのまま転送する必要があります。

    CoreDNS の動作: リクエストのゾーンが tsig プラグインのゾーンと一致する場合、TSIG レコードは常に削除されます。ただし、tsig プラグインが関係していない場合でも、forward プラグインは圧縮を使用してメッセージを変更することがあり、宛先での検証エラーが発生する可能性があります。

  • RFC 要件

    TSIG がすべてのチェックに合格した場合、転送サーバーは、可能であれば、宛先または次の転送サーバーへの独自の TSIG を含める必要があります。

    CoreDNS の動作: リクエストのゾーンが tsig プラグインのゾーンと一致する場合、forward プラグインは TSIG なしでリクエストをアップストリームにプロキシします。

  • RFC 要件

    宛先へのトランザクションセキュリティが利用できず、メッセージがクエリであり、対応するレスポンスに AD フラグ (RFC4035 を参照) が設定されている場合、転送サーバーはレスポンスに TSIG を追加してクエリを受信したシステムに結果を返す前に、AD フラグをクリアする必要があります。

    CoreDNS の動作: AD フラグはクリアされません。