テクニカルノーツ

DNSサーバを構築してみた

2014.1.23
DNS

Debian wheezyでDNSサーバを構築してみました。

基本的なインストール方法と設定手順を説明します。

なお、各正・逆引きファイルの設定内容は省略しています。

BINDインストール

#aptitude install bind9 bind9-host bind9utils

設定ファイルの設定

named.confの設定

以下の2行のみ設定を有効にする

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";

named.conf.optionsの設定

options {
        directory "/var/cache/bind";
        //query-source address * port 53;   //コメントアウト
        auth-nxdomain no;    # conform to RFC1035
   listen-on-v6 { none; }; //IPv6は使用しないので設定

       allow-query {
                192.168.XXX.0/24;
                XXX.XXX.XXX.XXX/XX;
        };
        allow-transfer {
                192.168.XXX.0/24;
                XXX.XXX.XXX.XXX/XX;
        };
        version "DNS Server";
}
設定内容
  • //query-source address * port 53

    コメントアウトするのは、ポートを固定すると攻撃先のポートが特定されて攻撃へのリスクが高くなります。

  • allow-query

    問合せを許可する範囲を設定します。

  • allow-transfer

    ゾーンの転送を許可する範囲を設定します。

named.conf.localの設定

各正・逆引きゾーンファイルの設定内容は省略します。

なお、ゾーンファイルの命名規則は、内側はファイル名の頭に「db.」+ホスト名、外側はファイル名の頭に「zone.」+ホスト名にして、ファイル名で各ホストの外側・内側の設定ファイルがわかりやすいようしています。

view "internal" {
        match-clients {
                192.168.XXX.0/16;
                127.0.0.0/8;
        };
        recursion yes;
       zone "0.in-addr.arpa" {                 type master;                 file "/etc/bind/db.0";         };
        zone "one-x.co.jp" {                 type master;                 file "/etc/bind/db.one-x.co.jp";         }; }

view "external" {         match-clients { any; };         allow-query { any; };         recursion no;        zone "one-x.co.jp" in {                 type master;                 file "/etc/bind/one-x.co.jp.zone";         } ;
}
設定内容
  • view "internal"

    内向けのLAN内の設定を記載します。

  • view "external"

    外向けのWAN側の設定を記載します。

  • match-clients

    指定範囲の物が定義を参照します。

  • recursion

    再帰検索の設定。外側の設定は禁止(no)にすること。
    yesにすると攻撃(不正なリクエスト)に対して再帰検索による不要な検索(管理外のドメインに対する検索)やDNSキャッシュするで、サーバに負荷がかかったりやキャッシュポイズニング等にる攻撃に弱くなるためです。

設定の確認

以下のコマンドで設定のシンタックスエラーをチェックできます。

問題がある場合は、コマンド実行後にエラーが表示されます。表示されない場合は問題ありません。

# named-checkconf /etc/bind/named.conf

BINDの起動

# /etc/init.d/bind9 start

動作検証

dnsutils をインストール

digコマンドを使うので dnsutils をインストールします。

#aptitude install dnsutils

dig コマンドで検証

dig コマンドで AUTHORITY SECTION が正常に取得できることを確認します。

以下は、コマンド実施の例です。

#dig @localhost one-x.co.jp MX

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @localhost one-x.co.jp MX
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35491
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;one-x.co.jp.                   IN      MX

;; ANSWER SECTION:
one-x.co.jp.            86400   IN      MX      0 mail.one-x.co.jp.

;; AUTHORITY SECTION:
one-x.co.jp.            86400   IN      NS      ns.one-x.co.jp.

;; ADDITIONAL SECTION:
ns.one-x.co.jp.         86400   IN      A       XXX.XXX.X.XX

;; Query time: 9 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Jan 23 16:26:01 2014
;; MSG SIZE  rcvd: 83

以上