BINDでDNSサーバを構築してみる

/ Linux/Unix / Comment[0]

CentOS7でBINDのDNSサーバを構築する実例をメモします。

CentOS7のネットワーク設定方法はこちら

環境・構成

OS: CentOS 7
BIND 9.9.4

ネットワーク: 10.0.0.0/16

マスターサーバ: 10.0.1.2
スレーブサーバ: 10.0.1.3

インストール

# yum install bind

重要ファイル/ディレクトリ

/etc/named.conf
DNSの全般設定ファイル
/var/named/
デフォルトのゾーンファイル格納ディレクトリ

重要ユーティリティ

/sbin/named
BINDデーモン本体
/sbin/rndc
BINDデーモンを制御するツール
/sbin/dnssec-keygen
鍵を作成するツール
/sbin/dnssec-sigzone
ゾーンファイルを署名するツール
/sbin/named-checkconf
named.confの構文チェックツール
/sbin/named-checkzone
ゾーンファイルの構文チェックツール

named.confの設定

必要最低限の設定例です。

マスターサーバ
; 全般設定
options {
  directory "/var/named";        ゾーンファイルの格納ディレクトリ
  version "TEST";                任意のバージョン情報
  notify yes;                   スレーブサーバにゾーンの更新情報を伝える
  allow-transfer { 10.0.1.3; 10.0.0.1; };  ゾーン転送を許可するホスト
  allow-query { 10.0.0.0/16; };  問い合わせを許可するホスト
  recursion no;                  再起問い合わせを許可しない
};

;ゾーンごとの設定
zone "labo.lab" IN {        ゾーン名
  type master;              マスターであることを明示
  file "labo.lab.zone";     ゾーンファイル名
};
スレーブサーバ
options {
  version "TEST";
  allow-query { 10.0.0.0/16; };
  recursion no;
};

zone "labo.lab" IN {
  type slave;
  masters { 10.0.1.2; };
};

named.confを編集した場合は次のコマンドでデーモンを再起動します。
# systemctl restart named.service

ゾーンファイルの例

/var/named/labo.lab.zone

$ORIGIN labo.lab.
$TTL 86400
labo.lab. IN SOA ns.labo.lab. root.labo.lab (
  2015040501; Serial
  10800;      Refresh
  600;        Retry
  86400;      Expire
  86400 );    Negative TTL

labo.lab.      IN NS ns.labo.lab.
labo.lab.      IN MX 10 mx.labo.lab.
ns.labo.lab.   IN A  10.0.1.2
desk.labo.lab. IN A  10.0.0.1
note.labo.lab. IN A  10.0.0.2
www.labo.lab.  IN A  10.0.1.1
ftp.labo.lab.  IN CNAME www.labo.lab.
mx.labo.lab.   IN CNAME www.labo.lab.

$ORIGINを略すとnamed.confからゾーン名を引っ張ってくるようになります。以下は略して書く例です。

$TTL 86400
@ IN SOA ns root (
  2015040501; Serial
  10800;      Refresh
  600;        Retry
  86400;      Expire
  86400 );    Negative TTL

      IN NS ns
      IN MX 10 mx
ns    IN A 10.0.1.2
desk  IN A 10.0.0.1
note  IN A 10.0.0.2
www   IN A 10.0.1.1
ftp   IN CNAME www
mx    IN CNAME www

ゾーンファイルを編集した場合は以下のコマンドを実行して適用させます。
# rndc reload labo.lab

検証

10.0.0.1のWindowsで検証してみました。

「ls -d ゾーン名」でゾーン転送の検証ができます。

DNSSECの設定

DNSSECはゾーン情報に公開鍵暗号方式の署名を行い、ゾーン情報の正当性を保障する仕組みです。

ゾーン情報に署名を行う鍵をZSK(Zone Signing Key)、ZSKに署名を行う鍵をKSK(Key Signing Key)といいます。

ZSKペアを作成します
# cd /var/named
# dnssec-keygen -r /dev/urandom -a RSASHA256 -b 1024 -n zone labo.lab
Klabo.lab.+008+46503.{private|key}の二つのファイルが作成されます。

次にKSKペアを作成します。
# dnssec-keygen -r /dev/urandom -f KSK -a RSASHA256 -b 1024 -n zone labo.lab
Klabo.lab.+008+35839.{private|key}の二つのファイルが作成されます。

両方の.key(公開鍵)をゾーンファイルに追加します。
# cat Klabo+lab.+008*.key >> /var/named/labo.lab.zone

dnssec-signzoneでゾーンファイルを署名します。
-k KSK秘密鍵 -o ゾーン名 ゾーンファイル
# dnssec-signzone -k Klabo.lab.+008+35839.private -o labo.lab labo.lab.zone Klabo.lab.+008+46503.private
labo.lab.zone.signedという署名済みのファイルが作成されます。

これを未署名のゾーンファイルと置き換えます。
# mv labo.lab.zone _labo.lab.zone
# mv labo.lab.zone.signed labo.lab.zone

リロードして適用
# rndc reload

WindowsのnslookupではDNSSEC非対応なのでdigで確認してみます。
# dig @10.0.1.2 ns.labo.lab any

TSIGの設定

マスターとスレーブ間ではゾーン転送でゾーン情報が同期されているため、改ざんされる危険性があります。そこで共有秘密鍵を使用してお互いを認証する仕組みがTSIG(Transaction Signatures)です。

HMAC-MD5の128bitで所有者タイプ:HOSTの鍵を作成します。
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST labo.lab
.privateと.keyが作成されますが使用するのは.privateです。

.privateのKEYの部分をコピーし、named.confに記述します。

;鍵を定義
key "labo.lab.key" {
  algorithm hmac-md5;
  secret "1nNUjIZDVnge9dd2LoZliA==";
};

;マスターならスレーブサーバ、スレーブならマスターサーバのIPアドレスと鍵名を指定
servers 10.0.1.3 {
  keys { labo.lab.key; };
};

:

デーモンの再起動で適用
# service named restart

関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可