強いBIND DNSサーバを構築する 第六回 安全なゾーン転送設定


前回は、ISC BIND DNSサーバについて、SOAレコードの書き方を中心に解説しました。今回は、SOAレコードの主要なパラメータに関連してゾーン転送設定をまとめます。

ゾーン転送のタイミングは、マスター/スレーブそれぞれの設定に依存する

前回は、マスター側で、SOAレコードのゾーン転送関連パラメータの最適値を検討しました。しかし、マスターがSOAレコードでスレーブサーバに提示する値が、必ずスレーブサーバに都合の良いものであるとは限りません。

前回述べたように、ゾーン転送のタイミングは、マスター/スレーブ相互の都合を検討して決定されるべきもので、マスターの一方的な都合をスレーブサーバに強制した場合、数1000個のゾーンのスレーブを務めるサーバなどでは、最悪、スレーブサーバ側で処理しきれなくなります。

多数のユーザ企業にセカンダリサーバサービスを提供するISPの場合、各ユーザ企業の担当者とゾーン転送のタイミングを協議するのは事実上不可能です。

BINDには、ゾーン転送のタイミング等にスレーブ側で制限を加えるための設定項目が提供されています。今回は、マスター/スレーブ双方について、ゾーン転送の安全性に拘わる設定項目を検討してみます。

スレーブサーバ側でゾーン転送タイミングを制限する

  • min-refresh-time, max-refresh-timeREFRESHの値の範囲を制限するパラメータです。min-refresh-timeが下限、max-refresh-timeが上限を定めます。スレーブサーバでこれらの値が設定されている場合、マスターサーバがSOAレコードで指定したREFRESH値が制限範囲を超えた場合、スレーブサーバは、強制的に上限値あるいは下限値にてREFRESHを行います。
  • min-retry-time, max-retry-time
    RETRYの値の範囲を制限するパラメータです。min-retry-timeが下限、max-retry-timeが上限を定めます。SOAレコードでの設定同様、それぞれmin-refresh-time, max-refresh-timeで指定した値の整数分の一の値を設定します。

 これらのパラメータは、options部、ゾーン定義部いずれでも設定可能です。

  • max-transfer-time-in
    一回のゾーン転送の継続時間の最大値です(分単位)。指定した時間を経過してもゾーン転送が終了しない場合、そのゾーン転送はその時点で中止されます。省略時の規定値は120(分)です。サーバ数台程度の小規模なサイトのひとつのゾーンの転送にかかわる時間は、WAN経由でも10ms前後で終了します。多数のゾーンを転送する場合は、実際にすべてのゾーンの転送が終了するまでの所要時間をnamedのログで確認した後、すべてのゾーンを転送するのに十分な値を設定します。
    論理的に設定可能な最大値は40320分(28日)ですが、ゾーン転送が10時間以上に及ぶなどという場合は、この値を変更して対応するよりも、複数のネームサーバに分散させるなど、合理的な対策を講じるべきです。

    これらのパラメータは、options部、ゾーン定義部いずれでも設定可能です。

  • transfer-format  ( one-answer|manyanswers )
    マスターからゾーン転送する際に、複数のレコードをパケットのサイズが許す範囲でまとめて転送する(”manyanswers”)か、一回に1レコード(”one-answer”)とするかを指定します。このパラメータは、ゾーン単位で指定することはできません。named.confのグローバル部分または、options{}, server{}, view{}いずれかの内部で指定します。特定のマスターサーバに固有の値を指定する場合は、後述するserver{}を利用しることができます。

  • transfers-in
    並列処理可能なゾーン転送の最大数を規定します。省略時の規定値は10です。

  • transfer-per-ns
    マスターサーバ毎に並列処理可能なゾーン転送の最大数を規定します。省略時の規定値は2です。

以下は、これらのパラメータを指定したスレーブサーバのnamed.confの記述例です。

ゾーン転送関連パラメータを指定したスレーブサーバのnamed.conf

options {
     version “unknown”
     hostname “somehost.some.domain”;
     directory “/var/named/”;
     dump-file “/var/named/data/cache_dump.db”;
     statistics-file “/var/named/data/named_stats.txt”;
     pid-file “/var/run/named/named.pid”;
     //
     listen-on port 53 {
         127.0.0.1;
         192.168.0.2;
     };
     auth-nxdomain yes;
    // Zone transfer specifications
    notify no;
    // Zone transfer parameters for SLAVE zone(s)
    max-refresh-time 86400;
    min-refresh-time 3600;
    max-retry-time 3600;
    min-retry-time 900;
    max-transfer-time-in 60;
    transfer-in 10;
    transfer-per-ns 2;
    //
    allow-transfer { none; };
    allow-query-cache { none; };
    allow-query { any; };
    //
    recursion no;
};
include “/etc/myzones.zones”;

次回は、ゾーンファイルにホストを登録してみます。