BINDを使用してDNSサーバーを構築するためには、まず以下3つの設定ファイルを編集する必要があります。
- BIND自体の基本設定ファイル(named.conf)
- 正引き用設定ファイル
- 逆引き用設定ファイル
今回はBIND自体の基本設定ファイル(named.conf)の編集方法について見ていきます。
DNSサーバー配置概要
設定方法について見ていく前に、今回構築していくDNSサーバーの配置概要図を以下に示します。
今回は、上図の「内部DNSサーバー」を構築します。ポイントとしては、内部DNSサーバーからインターネット上のDNSサーバーに対して、DNS問い合わせは可能となるようにしますが、インターネット上から内部DNSサーバーに対して、DNSの問い合わせはできない構成となるようにします。
named.conf
named.confはDNSサーバー(BIND)全体の基本になる設定ファイルです。DNSサーバー自体の設定の他、正引き用設定ファイルや逆引き用設定ファイルのパスなどを指定します。
まず一度、設定済みのnamed.confを見てみましょう。
# cat /etc/named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { 127.0.0.1; 172.16.0.0/24; }; // allow-transfer{ // 127.0.0.1; // }; forwarders{ 172.16.0.254; }; }; logging { category lame-servers { null; }; }; zone "webtest01.com" IN { type master; file "webtest01.com"; allow-update { none; }; }; zone "0.16.172.in-addr.arpa" IN { type master; file "webtest01.com.rev"; allow-update { none; }; };
named.confでは、3つのステートメントで構成されます。
ステートメント | 概要 |
---|---|
opions | BIND全体にかかわる設定項目を定義する。optionsステートメントで設定した一部内容はzoneステートメントにも反映される。 |
logging | DNSサーバーのログ出力に関する設定項目を定義する。 |
zone | ゾーンを宣言し、ゾーンファイルへのパスを設定する。また、そのゾーン固有の各種オプション設定(リカーションの可否、クエリーやゾーン転送の許可など)を設定する。 |
zoneステートメントでは複数のゾーンを定義できますが、各ゾーンで同じ設定となる項目は、opionsステートメントでまとめて設定することができます。それにより、同じ設定項目を各ゾーンごとに記述する必要がなくなります。(ゾーンとはDNSサーバーがドメインを管理する範囲のことです。厳密には違いますが、ここでは「1ゾーン=1ドメイン」と考えてください。)
opionsステートメント
設定項目はたくさんありますが、ここでは必要最低限な項目のみ見ていきます。
options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { 127.0.0.1; 172.16.0.0/24; }; // allow-transfer{ // 127.0.0.1; // }; forwarders{ 172.16.0.254; }; };
設定項目 | 概要 |
---|---|
directory | zoneステートメントの中に出てくる設定ファイルのディレクトリパスやnamedデーモンのワークディレクトリを指定。 |
dump-file | キャッシュ内容を保存するファイルのパスを指定(rndcで利用)。 |
statistics-file | rndcを使ってステータス情報を要求した際に統計情報が追記されるファイルのパスを指定。 |
memstatistics-file | サーバー終了時にメモリ使用統計について出力するファイルのパスを指定(rndcで利用)。 |
allow-query | DNSクエリ(問い合わせ)を許可するホストもしくはネットワークを指定。 |
allow-transfer | ゾーン転送を許可するホストを指定(通常はセカンダリDNSサーバーを指定)。 |
forwarders | 自身で解決できない問い合わせを転送するフォワーダーを指定。 |
DNSサーバーは通常、プライマリとセカンダリの2つ以上必要となります。これは、DNSがドメインや各ホストに関する情報を管理する基本的なサービスであり、常に動作していないといけないからです。複数のDNSサーバーは同じ内容を持っていなければいけません。情報を管理し更新するDNSサーバーをプライマリDNSサーバーと呼び、プライマリDNSサーバーの内容を自動的にコピーして情報を管理するDNSサーバーをセカンダリDNSサーバーと呼びます。「allow-transfer」にはセカンダリDNSサーバーを指定しますが、今回はサンプルであり、DNSサーバーを1台しか構築しないため、コメントアウトしておきます。(行頭に「//」と記述することでその行はコメントとなります。)
また、上記サンプルではフォワーダ機能を使用し、自身のDNSで解決できない問い合わせを「forwarders」に指定したDNSサーバーに転送するようにしています。通常、ルーターやプロバイダのDNSサーバーをフォワーダとして指定します。
loggingステートメント
BINDはこれまで数々の脆弱性が発見され、その度に緊急のアップデートを繰り返しています。シェアが群を抜いて高いこともあり、ハッカーにも狙われやすく、当たり前のことですがセキュリティに関しては高い意識を持つ必要があります。
loggingステートメントでは、ロギング機能の設定を行ないます。
BINDで適切なログを収集、監視し、攻撃の意思を持つアクセスを特定できるようにしておくことは管理者として必須な作業です。
と、大げさに前振りしましたが今回構築するDNSサーバーは(アドレス変換を行なう)ルーター配下に配置するため、外部からアクセスされることはありません。そのためここではロギングに関する設定は特に行ないません。
ただし、IPアドレスからホスト名を逆引きできなかった場合に出力される「lame server resolving …」というログを出力しないように「category lame-servers」をnullで指定します。
logging { category lame-servers { null; }; };
zoneステートメント
zoneステートメントではゾーンの宣言を行ないます。
ホスト名からIPアドレスを取得するための正引き用のゾーン設定を以下で行なっています。
zone "webtest01.com" IN { type master; file "webtest01.com"; allow-update { none; }; };
webtest01.comドメインのためのゾーンを設定します。
設定項目 | 概要 |
---|---|
type | マスター/スレーブの関係を指定。プライマリDNSサーバーの場合は「master」、セカンダリDNSサーバーの場合は「slave」を指定。 |
file | 正引き用設定ファイルのパスを指定。 |
allow-update | ゾーン情報の更新を許可するホストもしくはネットワークを指定。 |
次にIPアドレスからホスト名を取得するための逆引き用のゾーン設定を行ないます。
zone "0.16.172.in-addr.arpa" IN { //ネットワークアドレスを逆にした数値を入力
type master;
file "webtest01.com.rev";
allow-update { none; };
};
設定項目は正引き用の内容と同じです。
決まりではありませんが、逆引き用設定ファイルの名前は正引き用設定ファイルの後ろに「.rev」を付加するのが慣習となっています。
以上でBIND自体の基本設定ファイル(named.conf)の編集は完了です。ただ、完了といってもあくまで基本的な部分のみの設定のみです。named.confには他にも様々な設定項目があり、非常に奥が深いです。一度に全て覚えようとせず、まずは動くものを構築するのが大切でしょう。
次回は正引き用設定ファイルの編集方法について見ていきます。