CentOS 7 のBINDを設定する (プライマリ コンテンツサーバー)

CentOS7にインストールしたBINDを設定します。

named.conf の設定

BINDの設定ファイル named.conf を設定します。
gedit /etc/named.conf
コマンド等を実行して named.confをエディタで開きます。デフォルトでは"/etc"ディレクトリ内にあります。

named.conf (元の状態)

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
	listen-on port 53 { 127.0.0.1; };
	listen-on-v6 port 53 { ::1; };
	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     { localhost; };

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

named.conf 変更後

以下のように変更します。
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
	listen-on port 53 { 192.168.0.100; };
	listen-on-v6 {none;};
	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     { localhost; };
	allow-transfer { 192.168.0.108; };
	use-v6-udp-ports { };

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion no;

	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";

	rate-limit {
	    responses-per-second 5;
	    window 5;
	};
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};


zone "ipentec.com" IN {
	type master;
	file "ipentec.com.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

変更点の解説

リッスンアドレスとポート
"listen-on"でDNSサーバーの待ち受けIPアドレスとポートを指定します。今回の例ではローカルIPアドレスを記載していますが、実際にはこのDNSサーバーのグローバルIPアドレスを入力します。
listen-on port 53 { 192.168.0.100; };
IPv6の無効化
今回はIPv4ネットワークのDNSサーバーのため、IPv6を無効にします。

listen-on-v6 のセクションを"none"に変更します。
listen-on-v6 {none;};

また、use-v6-udp-ports を追記します。(この記述は無くても良いかもしれません)
use-v6-udp-ports { };
クエリを許可するアドレス
コンテンツサーバー(権威サーバ)として構築するため、すべてのIPアドレスからのクエリを受け付けます。
allow-query     { any; };
ゾーン転送の可否
allow-transfer を追加しゾーン転送をセカンダリDNSのみに許可します。
allow-transfer { 192.168.0.108; };
rate-limitの設定
アタック防止のため、optionsセクションに下記のrate-limitを追記しました。
1秒に5回以上問い合わせがあり、それが5秒以上続いた場合にブロックします。
  rate-limit {
    responses-per-second 5;
    window 5;
  };
  • responses-per-second : 制限をする、1秒間のリクエストの上限値 (0に設定すると無制限になります)
  • window : 判定期間の秒
  • log-only : ログのみを記録するかどうか
上記以外のパラメータについてはこちらのページに詳しい記述があります。
コンテンツサーバーとしての設定
今回はコンテンツサーバー(権威サーバー)として構築するため、
  recursion no;
としてあります。このサーバーでホストしているドメイン以外は解決しません。
ゾーンの設定
今回はゾーンは1つのみとします。ipentec.comドメインの例で記述しています。
プライマリサーバーのため、typeは"master"としています。fileにはゾーンファイルの名称を設定します。
zone "ipentec.com" IN {
	type master;
	file "ipentec.com.zone";
};

ゾーンファイルの作成

続いてゾーンファイルを作成します。
ゾーンファイルは、named.confの"directory"で指定した位置に作成します。上記のnamed.confの場合では、"/var/named"に作成します。
ゾーンファイルの名前は、named.confのzoneセクションのfileで指定したファイル名になります。先のipentec.comのゾーンの例では、 "/var/named/ipentec.com.zone"ファイルとなります。

ソーンファイルの雛形

$TTL 86400
@    IN   SOA   ns.example.com.   root.example.com. (
  2014010101     ;Serial
  3600           ;ゾーン転送の間隔(秒)
  300            ;転送失敗時のリトライ間隔(秒)
  360000         ;ゾーンファイルの保持時間(秒)
  86400     )    ;他サーバでキャッシュされる時間(秒)

;  Zone NS records
          IN   NS          ns.example.com.

;  Zone records
         IN   A            192.168.0.102
         IN   MX	10	mail.example.com.
ns       IN   A            192.168.0.100
mail     IN   A            192.168.0.101
host     IN   A            192.168.0.102

今回の例では以下のゾーンファイルを記述しました。

ソーンファイル

$TTL 86400
@    IN   SOA   ns1.ipentec.com.   root.ipentec.com. (
  2014010101     ;Serial
  3600           ;ゾーン転送の間隔(秒)
  300            ;転送失敗時のリトライ間隔(秒)
  360000         ;ゾーンファイルの保持時間(秒)
  86400     )    ;他サーバでキャッシュされる時間(秒)

;  Zone NS records
         IN   NS          ns1.ipentec.com.

;  Zone records
         IN   A            192.168.0.102
         IN   MX	10	mail.ipentec.com.
ns       IN   A            192.168.0.100
host     IN   A            192.168.0.101
mail     IN   A            192.168.0.102

BINDの起動

BINDの起動は以下のコマンドで実行します。
systemctl start named

うまく起動できない場合

エラーメッセージ等が表示され、起動できない場合は /var/log/messages を確認します。BINDで発生したエラーログが記録されています。ログファイルの内容に従ってnamed.confファイルやゾーンファイルを変更します。

動作確認

DNSが動作しているか確認します。確認はnslookupコマンドを用いるのが簡単です。コンソールからnslookupコマンドを実行します。
プロンプトが表示されますので、
server (DNSサーバーのIPアドレス)
コマンドを実行します。サーバーが切り替わったメッセージが表示されます。(下図)


DNSサーバーで扱われているホスト名を入力します。名前解決ができるとIPアドレスが返ってきます。


"connection timed ount;" などのエラーメッセージが表示されIPアドレスが返らない場合はサーバーが動作していないか、設定が正しくない可能性が高いです。

自動起動の設定

BINDを自動で起動させる場合は以下のコマンドを実行します。
systemctl enable named

ファイアウォールの設定

最後にファイアウォールの設定をします。この設定を忘れると、ローカルではDNSサーバーが動作するが、リモートではDNSが動作しない状態になります。

GUIが導入されている環境では"firewall-config"コマンドで設定アプリケーションを起動できます。


または、[アプリケーション]メニューの[諸ツール]の[ファイアウォール]を選択します。


[ファイアウォールの設定]ウィンドウが表示されます。[ゾーン]の"public"を選択します。[サービス]タブを選択します。


ウィンドウ上部のコンボボックスを開き[永続]を選択します。



サービスの一覧の"DNS"をクリックしチェックボックスにチェックします。


設定が終わったら、[ファイル]メニューの[終了]でアプリケーションを閉じます。

注意

上部のコンボボックスが[実行時]で選択されている場合、設定後にFirewalldを再起動すると設定が元に戻ってしまうので注意してください。

補足

不正アクセスが多い場合や、アタック対象となっている場合は、より強力なファイアウォールの設定もできます。こちらの記事を参照してください。


以上でDNSサーバーが利用するポートの開放ができました。

著者
かつて日本を代表したスーパーエンジニア (自称)
ハードウェア、電気設備、ガーデニング関係の記事を担当。
最終更新日: 2024-01-06
作成日: 2014-12-10
iPentec all rights reserverd.