CentOS7にインストールしたBINDを設定します。
BINDの設定ファイル named.conf を設定します。
コマンド等を実行して named.confをエディタで開きます。デフォルトでは"/etc"ディレクトリ内にあります。
//
// 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
//
// 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; };
今回は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; };
アタック防止のため、optionsセクションに下記のrate-limitを追記しました。
1秒に5回以上問い合わせがあり、それが5秒以上続いた場合にブロックします。
rate-limit {
responses-per-second 5;
window 5;
};
上記以外のパラメータについてはこちらのページに詳しい記述があります。
今回はコンテンツサーバー(権威サーバー)として構築するため、
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の起動は以下のコマンドで実行します。
エラーメッセージ等が表示され、起動できない場合は /var/log/messages を確認します。BINDで発生したエラーログが記録されています。ログファイルの内容に従ってnamed.confファイルやゾーンファイルを変更します。
DNSが動作しているか確認します。確認はnslookupコマンドを用いるのが簡単です。コンソールからnslookupコマンドを実行します。
プロンプトが表示されますので、
BINDを自動で起動させる場合は以下のコマンドを実行します。
最後にファイアウォールの設定をします。この設定を忘れると、ローカルではDNSサーバーが動作するが、リモートではDNSが動作しない状態になります。
GUIが導入されている環境では"firewall-config"コマンドで設定アプリケーションを起動できます。
または、[アプリケーション]メニューの[諸ツール]の[ファイアウォール]を選択します。
[ファイアウォールの設定]ウィンドウが表示されます。[ゾーン]の"public"を選択します。[サービス]タブを選択します。
ウィンドウ上部のコンボボックスを開き[永続]を選択します。
サービスの一覧の"DNS"をクリックしチェックボックスにチェックします。
設定が終わったら、[ファイル]メニューの[終了]でアプリケーションを閉じます。
上部のコンボボックスが[実行時]で選択されている場合、設定後にFirewalldを再起動すると設定が元に戻ってしまうので注意してください。
不正アクセスが多い場合や、アタック対象となっている場合は、より強力なファイアウォールの設定もできます。こちらの記事を参照してください。
以上でDNSサーバーが利用するポートの開放ができました。