強いBIND DNSサーバを構築する 第二回 named.confの基本設定


前回は、BIND9をソースtarボールからビルドしてみました。今回からはBIND9のnamed.confの設定方法です。

name.confの基礎と作成 – ACL定義/options部

BINDの既定の設定ファイルはnamed.confです。歴史的に、named.confはデフォルトで/etcディレクトリに配置されます(ソースからビルドした場合、デフォルトでは/usr/local/etc/以下)。

ゾーンファイルの場所は、named.confで指定することができますが、これも歴史的には/var/namedディレクトリの下におかれるのが通例ですが、namedからアクセス可能であれば他のディレクトリでもまったくかまいません。ISCのBIND9のドキュメントの例では、/etc/namedbを設定している例もあります。

ACLでIPアドレスやネットワークに名前をつける

以下の書式で、ネットワーク、ネットワークのグループやIPアドレスに名前をつけて、allow-query, allow-transferなどにより、特定のネットワークに対してクエリーやゾーン転送の許可などを設定する際に、名前で指定することができます。
##acl “[名前]” { [IPアドレスまたはネットワーク]; …… };

設定例

acl “net-sales-dep” {
    192.168.200.0/24;
};
acl “net-production-div” {
    192.168.221.0/24;
    192.168.222.0/24;
    192.168.223.34/32;
};

以下の名前はデフォルトで定義されています。

  • any
    すべてのアドレス
  • none
    anyの逆。すべてのアドレスを否定
  • localhost
    DNSホストに実装されたすべてのネットワーク・インタフェイスに割り当てられたIPアドレス(IPv4, IPv6)
  • localnets
    DNSホストに実装されたすべてのネットワーク・インタフェイスに割り当てられたネットワーク(IPv4, IPv6)

options部の設定

opions 部によって全体にかかわる設定項目を定義します。一部の設定項目を除いて、options部で設定した項目はゾーン定義部にも反映されます。recursionの可否、ゾーン転送やクエリーの許可設定に関する項目については、大半のゾーン定義に共通した設定をここに記述するとゾーン定義部での繰り返しを避けることができます。

以下のoptioins部の設定例は、キャッシュDNSサーバとしての利用を前提に、実用上必要にして十分な項目を網羅しています。マスターDNSサーバでのrecursionなど、セキュリティ上設定に注意が必要な項目については、追って別な回に解説します。

キャッシュDNSサーバのnamed.conf設定のポイントは、再起読み出し(recursion)を許可することと、HINTゾーン(ルートゾーン)を定義することです。キャッシュDNSサーバの役は、次回解説するルートサーバを起点として、世界中のDNSサーバを辿って、不特定多数のDNS名の解決を行うのが仕事ですから、recursionと、ルートゾーンの定義が必要になるのです。一方、悪意あるものも含めた不特定多数の外部ホストに対して無差別に自分が管理するゾーンの情報を提供しなければならない、外部向けプライマリDNSやセカンダリDNSサーバの場合、recursion機能を狙った攻撃を避けるために、できる限りrecursionを禁止し、ルートゾーンの定義も除外します。

acl “internalnet “{ 192.168.0.0/16; };
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;
    max-transfer-time-in 60;
    transfer-format many-answers;
    transfers-in 10;
    transfers-per-ns 2;
    //
    allow-transfer { none; };
    allow-query-cache { internalnet; localhost; };
    allow-query { internalnet; localhost; };
    //
    recursion yes;
    allow-recursion { localnets; localhost; internalnet; };
};

一般項目

  •  version  [ヴァージョン名]
    DNSソフトウェアのヴァージョンの問い合わせに対して返送する文字列を指定します。ヴァージョンを知られないようにするのはセキュリティ対策の基本ですので、”UNKNOWN”, “GUESS”等、ヴァージョンを悟られないように適当な文字列を設定しておきます。
  • hostname  [ホスト名]
    DNSサーバのホスト名の問い合わせに対して返送する文字列を設定します。この項目を省略した場合OSにて設定したホスト名が返されます。DNSサーバホストのDNSでの名前がOS設定でのホスト名と異なる場合に使用すると便利です(例:ロードバランス)。

各種ファイル配置を指定する項目

  • directory [パス名]
    named.confの中で、ファイルのパスが相対パスで指定されている場合、ここに指定した場所が、その相対パスの起点となります。/var/namedが一般的です。
  • dump-file [パス名]
    rndcを使ってdbのダンプを要求した際のダンプ先ファイルのパスを設定します。デフォルトは{namedのカレントディレクトリ}/named_dump.dbです。
  • statistics-file [パス名]
    rndcを使ってステータス情報を要求した際に統計情報が追記されるファイルのパスを設定します。デフォルトは、{namedのカレントディレクトリ}/named.statsです。
  • pid-file [パス名]
    namedプロセスのPID(プロセスID)を書き出すファイルのパスを設定します。PIDファイルは/var/run以下に書くのが一般的です。上記の例では、name専用にディレクトリ「/var/run/named」を設けています。

リッスンアドレス、ポート番号の設定

  • listen-on port [ポート番号] { [IPアドレス]; …. };
    DNSホストに割り当てられたIPアドレスについて、DNSサービスへのアクセスが可能なものを限定する場合に指定します。複数のネットワークインタフェイスが実装されたホストや、IPエリアスでネットワークインタフェイスに複数のIPアドレスが割り当てられているホストで、DNSサービスを特定のアドレスに限定したい場合に設定します。省略した場合、namedはホストに割り当てられたすべてのアドレスをリッスンします。

ゾーン転送関連の設定

  • notify [yes | no]
    このDNSサーバがSOAであるマスターゾーンについて、ゾーンデータに更新があった際に、その更新をあらかじめ指定されたスレーブサーバに伝えるかどうかを決定します。この値は、各ゾーンの設定部分でも指定変更可能です。
  • max-transfer-time-in [秒数]
    インバウンドのゾーン転送のタイムアウト時間を数値(分単位)で指定します。省略時は120(2時間)です。ゾーン転送についての設定項目はこのほかインバウンド/アウトバウンドともに数多くありますが、他でまとめて解説します。
  • transfer-format [one-answer | many-answers]
    ゾーン転送するマスターサーバ側で設定します。one-answerが指定されている場合、マスターサーバは一回の応答につき1レコードのみを転送します。many-answersが指定されてりる場合は、複数のレコードを一回の応答でまとめて転送します。many-answersのほうが転送効率が良いのは言うまでもありませんが、古いDNSサーバはこれに対応できない場合があります。BINDではBIND9, BIND8, BIND4.9.5が対応しています。また、最近のMicrosoft Windowsサーバ製品のDNSサービスがこれに対応しています。省略時の規定値は、many-answersです。
  • transfers-in [数値]
    同時実行可能なインバウンド方向のゾーン転送の最大数を設定します。省略時の規定値は10です。数値を増加されると転送効率が向上しますが、リモートサーバの負荷も増加します。
  • transfers-per-ns [数値]
    同時実行可能なインバウンド方向のゾーン転送の、リモートサーバ一台あたりの最大数です。省略時の規定値は2です。数値を増加させると転送効率が増大しますが、リモートサーバの負荷も増加します。

アクセス制限に関する設定

  • allow-transfer { [IPアドレス、ネットワークアドレスまたはACL名]; … }
    ゾーン転送を許可するリモートサーバを定義します。
  • allow-query-cache { [IPアドレス、ネットワークアドレスまたはACL名]}
    キャッシュデータに対するDNSクエリーを許可するリモートホストを定義します。

再帰的クエリーに関する設定

  • recursion [yes | no]
    再帰的クエリーに対する措置を決定します。yesに設定されたDNSサーバは、自分がマスターでないゾーンについてのクエリーを受けると、そのゾーンのSOAである他のDNSサーバに問い合わせをかけ、調べて回答します。noに設定されたDNSサーバは、自分がSOAであるゾーンのみについて名前解決をおこないます。内部ネットワークからインターネットへのアクセスについてDNSサービスを提供しなければならないDNSサーバの場合、この設定項目や次のallow-recursionにより再帰的クエリーを内部のクライアントに許可する必要がありますが、再帰的クエリーの実行は、悪意ある攻撃の対象となる可能性があります。(再起的クエリー関連の設定は、セキュリティにかかわる重要項目です。あとでまとめて解説します)
  • allow-recursion { [IPアドレス、ネットワークアドレスまたはACL名]}
    再帰的クエリーを特定のホストやネットワークに限定して許可する場合に使用します。DNSサーバはこれらのホストの要求に対しては、再帰的クエリーを実行します。

その他

  • auth-nxdomain [yes | no]
    yesが設定された場合、要求されたdnsクエリーを行った結果、指定されたドメインが見つからずクエリー発行元にNXDOMAIN(non- existent domain)を返す際に、SOAでない場合も、強制的にAAビットをたてます。BIND8まではデフォルト値がtrueでしたが、今では、この機能が必 要なケースがまれであるためBIND9からはfalseがデフォルト値となりました。DNS参照をする古いソフトウェアでは必要なケースがあります。

ゾーン定義

次回はいよいよゾーン定義です。ISP、ASPのDNSサーバのように、多数のマスターゾーンを抱えるサイトのゾーン定義を想定して、ゾーン定義ファイルの整理方法を考えます。

2010年6月27日 | カテゴリー : DNS, BIND | 投稿者 : eurotec