広告

検索

RSS RSSフィード

カレンダー

2018年12月
« 4月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

最新のコメント

リンク

Lion ServerでオリジナルメールアドレスをiPhoneにプッシュ通知するぞ その4 Lion ServerのセカンダリDNSサーバとメールサーバの設定

投稿者:yasu 更新日時:2012年7月8日 22時25分57秒
カテゴリApple, bind, dovecot, iPhone/iPod touch/iPad, OS X, postfix, 自宅サーバー
タグ

前回に引き続いてLion ServerでオリジナルメールアドレスをiPhoneにプッシュ通知できるようになったのでメモを残しておきます。
今回はLion ServerのセカンダリDNSサーバとメールサーバの設定変更を行います。

現状の構成やLion Server設定の前提の復習です。

まず今の状況。
・固定IPアドレスは一つ
・メールサーバはすでにScientific Linux 6+postfix+dovecotで構築済みでルータのNAT設定は25番ポート、465番ポート、993番ポート、995番ポートがScientific Linux 6機に対応づけている
・DNSサーバはすでにScientific Linux 6+bindで構築済みでルータのNAT設定は53番ポートがScientific Linux 6機に対応づけている

Lion Serverの設定を行うにあたり
・固定IPアドレスは増やさない(一つのまま)
・ドメインは追加する
・Scientific Linux 6の環境はそのまま残す(メインのメールサーバ・DNSサーバはScientific Linux 6機)
・ルータのNAT設定もそのまま残すので25番ポート、53番ポート、465番ポート、993番ポート、995番ポートはLion Server機に対応づけられない
・Lion Server機はインサイドネットワークに入れる
という前提で進めていきたいと思います。

セカンダリDNSサーバの設定

アプリケーションからサーバ管理を起動します。

左ペインの「DNS」を選択し、右ペイン上部の[ゾーン]を選択します。

画面中央の[ゾーンを追加]-[セカンダリーゾーン(スレーブ)を追加]を選択します。
セカンダリーゾーン名とプライマリDNSサーバを入力して[保存する]ボタンをクリックします。
セカンダリーゾーン名:sasaki.jpn.com
プライマリDNSサーバ:プライマリDNS(Scientific Linux 6機)のIPアドレス
※今回の設定としてはsasaki.jpn.comだけ追加すればよいのですが、元々使っていたsa-sa-ki.jpのゾーンも追加しておきます

[DNSを開始]ボタンをクリックしてDNSサーバを起動します。

メールサーバ用SSL自己証明書作成

メールサーバ用のSSL自己証明書を作成します。

アプリケーションからServerを起動します。

左ペインの[ハードウェア]-[macmini(←コンピュータ名)]を選択します。
続いて右ペイン上部の[設定]を選択し、SSL証明書の[編集]ボタンをクリックします。

左下の歯車のマークのボタンから[証明書を管理]を選択します。

[+]ボタン-[証明書識別情報を作成]を選択します。

証明書の名前、固有名のタイプ、証明書のタイプを入力・選択し、[作成]ボタンをクリックします。
名前:mail.sasaki.jpn.com
※今回構築するメールサーバは自宅ネットワーク内からも外部からもmail.sasaki.jpn.comで名前解決出来るように考えていまして、証明書もmail.sasaki.jpn.comの名前で作成します
固有名のタイプ:自己署名ルート
証明書のタイプ:SSLサーバ

「自己署名証明書を作成しようとしています。」のダイアログが出てきたら[続ける]ボタンをクリックします。

証明書ができたら[完了]ボタンをクリックします。

「Serverは、キーチェーンのキー"mail.sasaki.jpn.com"を書き出そうとしています。」ダイアログが出てきたら[常に許可]ボタンをクリックします。

作成した証明書が一覧に追加されているのを確認して[OK]ボタンをクリックします。

メールサーバの設定

DNSサーバの設定時に起動したサーバ管理の左ペインの「メール」を選択し、続いて右ペインの[メールサービスを構成]ボタンをクリックします。

サービス構成アシスタントが表示されますので、[続ける]ボタンをクリックします。

メールサービスの一般設定を行います。
IMAPを許可、SMTPを許可、受信メールを許可のチェックをして、ドメイン名・ホスト名を入力します。
ドメイン名:sasaki.jpn.com
ホスト名:mail.sasaki.jpn.com

メールサービスのフィルタ設定を行います。

メールサービスのセキュリティ設定を行います。
SMTPとIMAPのCRAM-MD5にチェックをします。

メールサービスのメールの保管設定を行います。

メールサービスの設定の確認をしたら[続ける]ボタンをクリックします。

メールサービスの設定が完了したら[閉じる]ボタンをクリックします。

またサーバ管理に戻り、左ペイン「メール」を選択した状態で、右ペイン上部の[設定]-[一般]を選択します。
画面中央のプッシュ通知サーバの[追加]ボタンをクリックします。

「プッシュメール通知を配信するには、通知サーバの管理者ログイン情報を入力してください」ダイアログが表示されるのでサーバのアドレスと管理者アカウント・パスワードを入力して[接続]ボタンをクリックします。

ホスト名が表示されればOKです。
※ホスト名はServerの左ペイン[ハードウェア]-[macmini]を選択、右ペインの[ネットワーク]から確認できます

右ペイン[設定]-[リレー]を選択します。
これらのホストとネットワークからのSMTPリレーのみを受け付けるの一覧の右の[+]ボタンで転送を受け付けるネットワーク(自宅のネットワークアドレス)を追加します。

右ペイン[設定]-[ログ]を選択します。
ログレベルを全て「情報」に変更し、ログをアーカイブする間隔を7日ごとに変更します。
※この設定は任意

右ペイン[設定]-[詳細]を選択します。
SMTP SSLとIMAPおよびPOP SSLの設定を行います。
SMTP SSL:使用 mail.sasaki.jpn.com
IMAPおよびPOP SSL:必要 mail.sasaki.jpn.com

SSLの設定は[使用しない]、[使用]、[必要]の3択で、[使用]はSSLのポートとSSLじゃないポート両方が有効になり、[必要]はSSLのポートのみ有効になります。
SMTPのSSLを[必要]にすると、sasaki.jpn.com宛のメールがScientific Linux 6からLion Serverに転送する時に
: host xxx.xxx.xx.xx[xxx.xxx.xx.xx] said: 530 5.7.0 Must issue a STARTTLS command first (in reply to MAIL FROM command)
というエラーがでて転送できないのでSMTPだけ[使用]を選択しています。
SMTPのSSLも[必要]を選択しても転送できないか調査はしていこうと思います。

最後にIMAPSの稼働ポート番号を変えます。
通常IMAPSのポートは993番でLion ServerのIMAPSも993番なのですが、それだとScientific Linux 6で構築したIMAPSのポート番号と重複してしまいルータのNATの設定ができないので、Lion ServerのIMAPSの稼働ポート番号を993番以外のポートに変更します。
Lion Serverのターミナルを起動します。

macmini:~ macmini$ cd /etc/dovecot/conf.d
macmini:conf.d macmini$ sudo vi 10-master.conf
Password: ログインユーザのパスワード
# 29行目〜36行目あたり
# viエディタの編集モードで:set number[return]を押下すると左端に行番号が表示されます

service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 23993 ← IMAPSのデフォルトのポート番号993から適当な番号に変更
ssl = yes
}

保存してviエディタを終了します

サーバ管理の[メールを停止]ボタンでメールサーバの停止をし、[メールを開始]ボタンでメールサーバの再起動をすれば設定が反映されます。

最後にルータのNAT設定で外部からアクセスされたSMTP SubMission 587番ポートとIMAPSのポート番号(さっき上の手順で変更したポート番号)がLion Serverに変換されるように設定します。

次回はいよいよ最終回!
iPhoneのメールクライアントの設定とプッシュ通知の確認を行います。

Lion ServerでオリジナルメールアドレスをiPhoneにプッシュ通知するぞ その3 Scientific Linux 6 プライマリDNSサーバとメールサーバの設定変更

投稿者:yasu 更新日時:2012年7月4日 20時05分22秒
カテゴリApple, bind, iPhone/iPod touch/iPad, OS X, postfix, Scientific Linux, 自宅サーバー
タグ

前回に引き続いてLion ServerでオリジナルメールアドレスをiPhoneにプッシュ通知できるようになったのでメモを残しておきます。
今回はScientific Linux 6に構築してあるプライマリDNSサーバとメールサーバの設定変更を行います。

現状の構成やLion Server設定の前提の復習です。

まず今の状況。
・固定IPアドレスは一つ
・メールサーバはすでにScientific Linux 6+postfix+dovecotで構築済みでルータのNAT設定は25番ポート、465番ポート、993番ポート、995番ポートがScientific Linux 6機に対応づけている
・DNSサーバはすでにScientific Linux 6+bindで構築済みでルータのNAT設定は53番ポートがScientific Linux 6機に対応づけている

Lion Serverの設定を行うにあたり
・固定IPアドレスは増やさない(一つのまま)
・ドメインは追加する
・Scientific Linux 6の環境はそのまま残す(メインのメールサーバ・DNSサーバはScientific Linux 6機)
・ルータのNAT設定もそのまま残すので25番ポート、53番ポート、465番ポート、993番ポート、995番ポートはLion Server機に対応づけられない
・Lion Server機はインサイドネットワークに入れる
という前提で進めていきたいと思います。

まずはDNSサーバに今回取得したsasaki.jpn.comの名前解決ができるように設定を追加します。

内部向け正引きゾーンデータベースファイル作成

sasaki.jpn.com用の内部向け(ローカルネットワーク参照用)正引きゾーンデータベースファイルを作成します。
Scientific Linux 6にsshクライアントで接続して設定を行います。

#rootユーザにスイッチします
[sl6@sl6 ~]$ su -
パスワード: rootユーザのパスワード

[root@sl6 ~]# cd /var/named/chroot/var/named
[root@sl6 ~]# vi sasaki.jpn.com.local

$TTL    86400
@       IN      SOA     sasaki.jpn.com. root.sasaki.jpn.com.  (
                                      2012062001 ; Serial
                                      3600       ; Refresh
                                      900        ; Retry
                                      604800     ; Expire
                                      86400 )    ; Minimum
        IN      NS      ns.sasaki.jpn.com.
        IN      MX  10  mail.sasaki.jpn.com.
@       IN      A       xxx.xxx.xx.xx(Lion ServerのIPアドレス)
ns      IN      A       xxx.xxx.xx.xx(Lion ServerのIPアドレス)
mail    IN      CNAME   ns

保存してviエディタを終了します

外部向け正引きゾーンデータベースファイル作成

sasaki.jpn.com用の外部向け(インターネット参照用)正引きゾーンデータベースファイルを作成します。

[root@sl6 ~]# vi sasaki.jpn.com

$TTL    86400
@       IN      SOA     sasaki.jpn.com. root.sasaki.jpn.com.  (
                                      2012062001 ; Serial
                                      3600       ; Refresh
                                      900        ; Retry
                                      604800     ; Expire
                                      86400 )    ; Minimum
        IN      NS      ns.sasaki.jpn.com.
        IN      NS      2nd.dnsv.jp.
        IN      MX  10  mail.sasaki.jpn.com.
@       IN      A       183.177.138.7(固定IPアドレス)
ns      IN      A       183.177.138.7(固定IPアドレス)
mail    IN      CNAME   ns

保存してviエディタを終了します

内部向けZone設定ファイル作成

[root@sl6 ~]# vi sa-sa-ki.jp.local.zones

zone "sa-sa-ki.jp" {
    type master;
    file "sa-sa-ki.jp.local";
};
zone "sasaki.jpn.com" {
    type master;
    file "sasaki.jpn.com.local";
};
zone "x.xxx.xxx.in-addr.arpa" {
    type master;
    file "x.xxx.xxx.in-addr.arpa.db";
};
zone "xx.xxx.xxx.in-addr.arpa" {
    type master;
    file "xx.xxx.xxx.in-addr.arpa.db";
};

保存してviエディタを終了します

内部向けZone設定ファイル作成

[root@sl6 ~]# vi sa-sa-ki.jp.zones

zone "sa-sa-ki.jp" {
    type master;
    file "sa-sa-ki.jp";
    allow-transfer { 210.172.129.81; };
    allow-query { any; };
};
zone "sasaki.jpn.com" {
    type master;
    file "sasaki.jpn.com";
    allow-transfer { 210.172.129.81; };
    allow-query { any; };
};
zone "SUB7.138.177.183.in-addr.arpa" {
    type master;
    file "138.177.183.in-addr.arpa.db";
    allow-query { any; };
};

保存してviエディタを終了します

bind再起動

[root@sl6 named]# /etc/rc.d/init.d/named restart
named を停止中: . [ OK ]
named を起動中: [ OK ]

sasaki.jpn.comドメイン宛メールの転送設定

続いてSMTPサーバの設定を変更します。

本来、sa-sa-ki.jp宛のメールはScientific Linux 6で、sasaki.jpn.com宛のメールはLion Serverで受信したいところなのですが、固定IPアドレスが一つしかないyasuの環境の場合、外部からメールが来るとどちらのメールもまず既存のScientific Linux 6で構築したpostfixで受信することになります。
これは外部からメールがきた場合、ルータからするとNATの設定でSMTPサービスの25番ポートがScientific Linux 6に関連づけられているからだと思います。
そこで全てのメールはScientific Linux 6側のpostfixで受け、ドメイン名がsasaki.jpn.comの場合だけLion Serverのpostfixに転送するという方法を採ります。

sasaki.jpn.comドメイン宛メール転送設定

transportファイルに転送設定をしてdbファイルを作成します。

[root@sl6 named]# cd /etc/postfix
[root@sl6 postfix]# vi transport
sasaki.jpn.com smtp:xxx.xxx.xx.xx(Lion ServerのIPアドレス)

保存してviエディタを終了します

[root@sl6 postfix]# postmap transport
[root@sl6 postfix]# ls -l transport*
-rw-r--r-- 1 root root 12534 6月 21 08:50 2012 transport
-rw-r--r-- 1 root root 12534 6月 21 08:51 2012 transport.db
#transport.dbファイルが作成されていることを確認

sasaki.jpn.comドメイン宛メール転送設定反映

postfixの設定ファイルにメール転送設定にsasaki.jpn.comドメイン宛のメール受信許可と、前の手順で作成したメール転送用dbファイルを指定します。

[root@sl6 postfix]# vi main.cf
relay_domains = $mydestination, sasaki.jpn.com
transport_maps = hash:/etc/postfix/transport

保存してviエディタを終了します

#postfixサービスを再起動して設定を反映させます
[root@sl6 postfix]# /etc/rc.d/init.d/postfix restart
postfix を停止中: [ OK ]
postfix を起動中: [ OK ]

これでsasaki.jpn.comドメインの名前解決は作成したゾーンファイルに従って行われるようになりますし、sasaki.jpn.comのメールはLion Serverに転送されるようになりました。
次回はLion Serverのメールサーバの設定を行います。

Scientific Linux 6で自宅サーバー構築 その10 DNSサーバーを構築

投稿者:yasu 更新日時:2011年7月6日 21時07分49秒
カテゴリbind, Linux, Scientific Linux, 自宅サーバー
タグ

bindをインストールしてDNSサーバーを構築します。

bindインストール

bindをインストールします。またセキュリティを考慮してchroot(chroot - Wikipedia)もインストールします。

# bindとbind-chrootをインストールします
[root@sl6 ~]# yum install bind bind-chroot
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package bind.x86_64 32:9.7.3-2.el6_1.P1.1 set to be updated
---> Package bind-chroot.x86_64 32:9.7.3-2.el6_1.P1.1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================
 Package                                     Arch                                   Version                                               Repository                                   Size
=======================================================================================
Installing:
 bind                                        x86_64                                 32:9.7.3-2.el6_1.P1.1                                 sl-security                                 3.9 M
 bind-chroot                                 x86_64                                 32:9.7.3-2.el6_1.P1.1                                 sl-security                                  66 k

Transaction Summary
=======================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 4.0 M
Installed size: 7.0 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): bind-9.7.3-2.el6_1.P1.1.x86_64.rpm                                                                                                                            | 3.9 MB     00:03
(2/2): bind-chroot-9.7.3-2.el6_1.P1.1.x86_64.rpm                                                                                                                     |  66 kB     00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                       926 kB/s | 4.0 MB     00:04
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : 32:bind-9.7.3-2.el6_1.P1.1.x86_64                                                                                                                                    1/2
  Installing     : 32:bind-chroot-9.7.3-2.el6_1.P1.1.x86_64                                                                                                                             2/2

Installed:
  bind.x86_64 32:9.7.3-2.el6_1.P1.1                                                         bind-chroot.x86_64 32:9.7.3-2.el6_1.P1.1

Complete!

named.conf設定

bindの設定ファイルであるnamed.confの設定を行います。

# named.conf(bindの設定ファイル)の場所を確認します
[root@sl6 ~]# find / -name named.conf -print
/usr/share/doc/bind-9.7.0/sample/etc/named.conf
/etc/named.conf

# サンプル用named.confをchroot環境(/var/named/chroot/)にコピーします
[root@sl6 ~]# cp -p /usr/share/doc/bind-9.7.0/sample/etc/named.conf /var/named/chroot/etc

# named.confを編集します
[root@sl6 ~]# vi /var/named/chroot/etc/named.conf

/*
 Sample named.conf BIND DNS server 'named' configuration file
 for the Red Hat BIND distribution.

 See the BIND Administrator's Reference Manual (ARM) for details, in:
   file:///usr/share/doc/bind-{version}/arm/Bv9ARM.html
 Also see the BIND Configuration GUI : /usr/bin/system-config-bind and
 its manual.
*/
# localnetworkという名前でローカルネットワークのサブネットを定義します
acl "localnetwork" { 192.168.0.0/24; 192.168.11.0/24; };
options
{
        // Put files that named is allowed to write in the data/ directory:
        # bindのバージョンを隠蔽します
        version                 "unknown";
        directory               "/var/named";           // "Working" directory
        dump-file               "data/cache_dump.db";
        statistics-file         "data/named_stats.txt";
        memstatistics-file      "data/named_mem_stats.txt";


        /*
          Specify listenning interfaces. You can use list of addresses (';' is
          delimiter) or keywords "any"/"none"
        */
        //listen-on port 53     { any; };
        # 問い合わせ元がローカルホスト(127.0.0.1)のみ許可になっている設定をコメント化して全ての問い合わせを受けられるようにします
        //listen-on port 53       { 127.0.0.1; };

        //listen-on-v6 port 53  { any; };
        # 問い合わせ元がローカルホスト(127.0.0.1)のみ許可になっている設定をコメント化して全ての問い合わせを受けられるようにします
        //listen-on-v6 port 53    { ::1; };

        /*
          Access restrictions

          There are two important options:
            allow-query { argument; };
              - allow queries for authoritative data

            allow-query-cache { argument; };
              - allow queries for non-authoritative data (mostly cached data)

          You can use address, network address or keywords "any"/"localhost"/"none" as argument
          Examples:
            allow-query { localhost; 10.0.0.1; 192.168.0.0/8; };
            allow-query-cache { ::1; fe80::5c63:a8ff:fe2f:4526; 10.0.0.1; };
        */

        # 問い合わせ元をローカルホストとローカルネットワークに限定します
        allow-query             { localhost; localnetwork; };
        # キャッシュを応答する先をローカルホストとローカルネットワークに限定します
        allow-query-cache       { localhost; localnetwork; };

        // Enable/disable recursion - recursion yes/no;
        # 再起問い合わせを禁止します
        recursion no; ← yes から no に変更

        /* DNSSEC related options. See information about keys ("Trusted keys", bellow) */

        /* Enable serving of DNSSEC related data - enable on both authoritative
           and recursive servers DNSSEC aware servers */
        dnssec-enable yes;

        /* Enable DNSSEC validation on recursive servers */
        dnssec-validation yes;

        /* Enable DLV by default, use built-in ISC DLV key. */
        # ルートサーバー(.)がDNSSECに対応した為、DLV(JPCERT/CC: 情報提供サービス - JPCERT/CC レポート)の設定はコメント化します
        //dnssec-lookaside auto;
};

logging
{
/*      If you want to enable debugging, eg. using the 'rndc trace' command,
 *      named will try to write the 'named.run' file in the $directory (/var/named).
 *      By default, SELinux policy does not allow named to modify the /var/named directory,
 *      so put the default debug log file in data/ :
 */
# BINDのロギング機能を参考にログ設定をします
# 初期設定はコメント化します
        //channel default_debug {
        //        file "data/named.run";
        //        severity dynamic;
        //};
# 新しいログ設定を追記します
        channel "default-log" {
                file "/var/log/default.log" versions 3 size 10M;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        channel "xfer-out-log" {
                file "/var/log/xfer-out.log" versions 3 size 10M;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        channel "queries-log" {
                file "/var/log/queries.log" versions 3 size 10M;
                severity info;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        category default {
                "default-log";
                "default_syslog";
                "default_debug";
                "default_stderr";
        };
        category xfer-out { "xfer-out-log"; };
        category queries { "queries-log"; };
        category lame-servers { null; };
};

/*
 Views let a name server answer a DNS query differently depending on who is asking.

 By default, if named.conf contains no "view" clauses, all zones are in the
 "default" view, which matches all clients.

 Views are processed sequentially. The first match is used so the last view should
 match "any" - it's fallback and the most restricted view.

 If named.conf contains any "view" clause, then all zones MUST be in a view.
*/

view "localhost_resolver"
{
/* This view sets up named to be a localhost resolver ( caching only nameserver ).
 * If all you want is a caching-only nameserver, then you need only define this view:
 */
        match-clients           { localhost; };
        recursion yes;

        # all views must contain the root hints zone:
        zone "." IN {
                type hint;
                file "/var/named/named.ca";
        };

        /* these are zones that contain definitions for all the localhost
         * names and addresses, as recommended in RFC1912 - these names should
         * not leak to the other nameservers:
         */
        include "/etc/named.rfc1912.zones";
        # 内部DNS用のゾーン定義ファイルを指定します
        include "/var/named/sa-sa-ki.local.zones";
};
view "internal"
{
/* This view will contain zones you want to serve only to "internal" clients
   that connect via your directly attached LAN interfaces - "localnets" .
 */
        match-clients           { localnetwork; }; # localnetsからlocalnetworkに変更
        recursion yes;

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

        /* these are zones that contain definitions for all the localhost
         * names and addresses, as recommended in RFC1912 - these names should
         * not leak to the other nameservers:
         */
        include "/etc/named.rfc1912.zones";

        // These are your "authoritative" internal zones, and would probably
        // also be included in the "localhost_resolver" view above :

        /*
          NOTE for dynamic DNS zones and secondary zones:

          DO NOT USE SAME FILES IN MULTIPLE VIEWS!

          If you are using views and DDNS/secondary zones it is strongly
          recommended to read FAQ on ISC site (www.isc.org), section
          "Configuration and Setup Questions", questions
          "How do I share a dynamic zone between multiple views?" and
          "How can I make a server a slave for both an internal and an external
           view at the same time?"
        */
        # 内部DNS用のゾーン定義ファイルを指定します
        # 初期設定はコメント化します
        //zone "my.internal.zone" {
        //        type master;
        //        file "my.internal.zone.db";
        //};
        //zone "my.slave.internal.zone" {
        //        type slave;
        //        file "slaves/my.slave.internal.zone.db";
        //        masters { /* put master nameserver IPs here */ 127.0.0.1; } ;
        //        // put slave zones in the slaves/ directory so named can update them
        //};
        //zone "my.ddns.internal.zone" {
        //        type master;
        //        allow-update { key ddns_key; };
        //        file "dynamic/my.ddns.internal.zone.db";
        //        // put dynamically updateable zones in the slaves/ directory so named can update them
        //};
        include "/var/named/sa-sa-ki.local.zones";
};
# yasu宅は固定IPアドレスを利用していてDynamicDNSは使わないのでコメント化します
//key ddns_key
//{
//        algorithm hmac-md5;
//        secret "use /usr/sbin/dnssec-keygen to generate TSIG keys";
//};

view "external"
{
/* This view will contain zones you want to serve only to "external" clients
 * that have addresses that are not match any above view:
 */
        match-clients           { any; };
        allow-query             { any; };
        zone "." IN {
                type hint;
                file "/var/named/named.ca";
        };

        recursion no;
        // you'd probably want to deny recursion to external clients, so you don't
        // end up providing free DNS service to all takers

        // These are your "authoritative" external zones, and would probably
        // contain entries for just your web and mail servers:
        # 外部DNS用のゾーン定義ファイルを指定します
        # 初期設定はコメント化します
        //zone "my.external.zone" {
        //        type master;
        //        file "my.external.zone.db";
        //};
        include "/var/named/sa-sa-ki.jp.zones";
};

/* Trusted keys

  This statement contains DNSSEC keys. If you want DNSSEC aware resolver you
  have to configure at least one trusted key.

  Note that no key written below is valid. Especially root key because root zone
  is not signed yet.
*/
/*
trusted-keys {
// Root Key
"." 257 3 3 "BNY4wrWM1nCfJ+CXd0rVXyYmobt7sEEfK3clRbGaTwSJxrGkxJWoZu6I7PzJu/
             E9gx4UC1zGAHlXKdE4zYIpRhaBKnvcC2U9mZhkdUpd1Vso/HAdjNe8LmMlnzY3
             zy2Xy4klWOADTPzSv9eamj8V18PHGjBLaVtYvk/ln5ZApjYghf+6fElrmLkdaz
             MQ2OCnACR817DF4BBa7UR/beDHyp5iWTXWSi6XmoJLbG9Scqc7l70KDqlvXR3M
             /lUUVRbkeg1IPJSidmK3ZyCllh4XSKbje/45SKucHgnwU5jefMtq66gKodQj+M
             iA21AfUVe7u99WzTLzY3qlxDhxYQQ20FQ97S+LKUTpQcq27R7AT3/V5hRQxScI
             Nqwcz4jYqZD2fQdgxbcDTClU0CRBdiieyLMNzXG3";
// Key for forward zone
example.com. 257 3 5 "AwEAAaxPMcR2x0HbQV4WeZB6oEDX+r0QM65KbhTjrW1ZaARmPhEZZe
                      3Y9ifgEuq7vZ/zGZUdEGNWy+JZzus0lUptwgjGwhUS1558Hb4JKUbb
                      OTcM8pwXlj0EiX3oDFVmjHO444gLkBO UKUf/mC7HvfwYH/Be22GnC
                      lrinKJp1Og4ywzO9WglMk7jbfW33gUKvirTHr25GL7STQUzBb5Usxt
                      8lgnyTUHs1t3JwCY5hKZ6CqFxmAVZP20igTixin/1LcrgX/KMEGd/b
                      iuvF4qJCyduieHukuY3H4XMAcR+xia2 nIUPvm/oyWR8BW/hWdzOvn
                      SCThlHf3xiYleDbt/o1OTQ09A0=";
// Key for reverse zone.
2.0.192.IN-ADDRPA.NET. 257 3 5 "AQOnS4xn/IgOUpBPJ3bogzwcxOdNax071L18QqZnQQQA
                                VVr+iLhGTnNGp3HoWQLUIzKrJVZ3zggy3WwNT6kZo6c0
                                tszYqbtvchmgQC8CzKojM/W16i6MG/ea fGU3siaOdS0
                                yOI6BgPsw+YZdzlYMaIJGf4M4dyoKIhzdZyQ2bYQrjyQ
                                4LB0lC7aOnsMyYKHHYeRv PxjIQXmdqgOJGq+vsevG06
                                zW+1xgYJh9rCIfnm1GX/KMgxLPG2vXTD/RnLX+D3T3UL
                                7HJYHJhAZD5L59VvjSPsZJHeDCUyWYrvPZesZDIRvhDD
                                52SKvbheeTJUm6EhkzytNN2SN96QRk8j/iI8ib";
};
*/

内部向けZone設定ファイル作成

内部向けZone設定ファイルを作成します。

[root@sl6 ~]# vi /var/named/chroot/var/named/sa-sa-ki.local.zones

zone "sa-sa-ki.jp" {
    type master;
    file "sa-sa-ki.local";
};
zone "0.168.192.in-addr.arpa" {
    type master;
    file "0.168.192.in-addr.arpa.db";
};
zone "11.168.192.in-addr.arpa" {
    type master;
    file "11.168.192.in-addr.arpa.db";
};

内部向け正引きゾーンデータベースファイル作成

内部向け正引きゾーンデータベースファイルを作成します。

[root@sl6 ~]# vi /var/named/chroot/var/named/sa-sa-ki.local

$TTL    86400
@       IN      SOA     sa-sa-ki.jp. root.sa-sa-ki.jp.  (
                                      20110050101 ; Serial
                                       3600      ; Refresh
                                        900      ; Retry
                                     604800      ; Expire
                                      86400 )    ; Minimum
                IN      NS      ns.sa-sa-ki.jp.
                IN      MX  10  mail.sa-sa-ki.jp.
@               IN      A       192.168.0.21
ns              IN      A       192.168.0.21
mail            IN      CNAME   ns
www             IN      CNAME   ns
centos          IN      A       192.168.0.20
win7            IN      A       192.168.11.101
snow            IN      A       192.168.11.102
ubuntu          IN      A       192.168.11.103
winxp           IN      A       192.168.11.104
nas             IN      A       192.168.11.105
winvista        IN      A       192.168.11.106

内部(192.168.0.0/24)向け逆引きゾーンデータベースファイル作成

内部向け正引きゾーンデータベースファイルを作成します。

[root@sl6 ~]# vi /var/named/chroot/var/named/0.168.192.in-addr.arpa.db

$TTL    86400
@       IN      SOA     sa-sa-ki.jp. root.sa-sa-ki.jp.  (
                                      2011050101 ; Serial
                                      3600       ; Refresh
                                      900        ; Retry
                                      604800     ; Expire
                                      86400 )    ; Minimum
        IN      NS      ns.sa-sa-ki.jp.
10      IN      PTR     centos.
11      IN      PTR     sa-sa-ki.jp.

内部(192.168.11.0/24)向け逆引きゾーンデータベースファイル作成

内部向け正引きゾーンデータベースファイルを作成します。

[root@sl6 ~]# vi /var/named/chroot/var/named/11.168.192.in-addr.arpa.db

$TTL    86400
@       IN      SOA     sa-sa-ki.jp. root.sa-sa-ki.jp.  (
                                      2011050101 ; Serial
                                      3600       ; Refresh
                                      900        ; Retry
                                      604800     ; Expire
                                      86400 )    ; Minimum
        IN      NS        ns.sa-sa-ki.jp.
101     IN      PTR       win7.
102     IN      PTR       snow.
103     IN      PTR       ubuntu.
104     IN      PTR       winxp.
105     IN      PTR       nas.
106     IN      PTR       winvista.

外部向けZone設定ファイル作成

外部向けZone設定ファイルを作成します。

[root@sl6 ~]# vi /var/named/chroot/var/named/sa-sa-ki.jp.zones

zone "sa-sa-ki.jp" {
    type master;
    file "sa-sa-ki.jp";
    allow-transfer { 210.172.129.81; }; ←お名前.comのセカンダリDNSサービスにゾーン情報を転送
    allow-query { any; };
};
zone "SUB7.138.177.183.in-addr.arpa" { ←Zone名の接頭区にSUB7が付いているのはGMOとくとくBBの逆引き設定の指示
    type master;
    file "138.177.183.in-addr.arpa.db";
    allow-query { any; };
};

外部向け正引きゾーンデータベースファイル作成

外部向け正引きゾーンデータベースファイルを作成します。

[root@sl6 ~]# vi /var/named/chroot/var/named/sa-sa-ki.jp

$TTL    86400
@       IN      SOA     sa-sa-ki.jp. root.sa-sa-ki.jp.  (
                                      2011050101 ; Serial
                                      3600       ; Refresh
                                      900        ; Retry
                                      604800     ; Expire
                                      86400 )    ; Minimum
        IN      NS      ns.sa-sa-ki.jp.
        IN      NS      2nd.dnsv.jp.
        IN      MX  10  mail.sa-sa-ki.jp.
@       IN      A       183.177.138.7
ns      IN      A       183.177.138.7
www     IN      CNAME   ns
mail    IN      CNAME   ns

外部向け逆引きゾーンデータベースファイル作成

外部向け逆引きゾーンデータベースファイルを作成します。

[root@sl6 ~]# vi /var/named/chroot/var/named/138.177.183.in-addr.arpa.db

$TTL    86400
@       IN      SOA     sa-sa-ki.jp. root.sa-sa-ki.jp.  (
                                      2011050101 ; Serial
                                      3600       ; Refresh
                                      900        ; Retry
                                      604800     ; Expire
                                      86400 )    ; Minimum
        IN      NS        ns.sa-sa-ki.jp.
7       IN      PTR       sa-sa-ki.jp.

named.confの設定チェック

named.confの設定に誤りがないかチェックします。

[root@sl6 ~]# named-checkconf -t /var/named/chroot
/etc/named.conf:149: open: /etc/named.rfc1912.zones: file not found

早速エラーが。
/etc/named.rfc1912.zonesファイルがないということで調べてみます。

# named.rfc1912.zonesファイルを検索します
[root@sl6 ~]# find / -name named.rfc1912.zones -print
/usr/share/doc/bind-9.7.0/sample/etc/named.rfc1912.zones
/etc/named.rfc1912.zones

/usr/share/doc/bind-9.7.0/sample/etcディレクトリと/etcディレクトリにありました。
/etcディレクトリのnamed.rfc1912.zonesをchrootのetc直下に移動します。

[root@sl6 ~]# mv /etc/named.rfc1912.zones /var/named/chroot/etc

named.confの設定に誤りがないか再度チェックします。

[root@sl6 ~]# named-checkconf -t /var/named/chroot

今度はエラーが表示されなかったので設定は問題ないということが確認できました。

移動してきたnamed.rfc1912.zonesの中身を確認します。

[root@sl6 ~]# cat /var/named/chroot/etc/named.rfc1912.zones

// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};

named.rfc1912.zoneの中で参照しているファイルとしてnamed.localhost、named.loopback、named.emptyの3つが必要です。
またnamed.confのlocalhost_resolverとinternalビューで指定されていたルートゾーン用ファイルnamed.caも必要なので全部コピーしてきます。

[root@sl6 ~]# mv /var/named/named.* /var/named/chroot/var/named

ルートゾーン自動更新設定

DNSサーバー構築(BIND) - CentOSで自宅サーバー構築のサイトを参考に(そのまま流用させてもらっていますが)毎月ルートゾーンを自動更新します。

[root@sl6 ~]# vi /etc/cron.monthly/named.root_update

#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 > $new 2> $errors

if [ $? -eq 0 ]; then
    sort_new=`mktemp`
    sort_old=`mktemp`
    diff_out=`mktemp`
    sort $new > $sort_new
    sort /var/named/chroot/var/named/named.ca > $sort_old
    diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
    if [ $? -ne 0 ]; then
        (
         echo '-------------------- old named.root --------------------'
         cat /var/named/chroot/var/named/named.ca
         echo
         echo '-------------------- new named.root --------------------'
         cat $new
         echo '---------------------- difference ----------------------'
         cat $diff_out
        ) | mail -s 'named.root updated' root
        cp -f $new /var/named/chroot/var/named/named.ca
        chown named. /var/named/chroot/var/named/named.ca
        chmod 644 /var/named/chroot/var/named/named.ca
        /etc/rc.d/init.d/named restart > /dev/null
    fi
    rm -f $sort_new $sort_old $diff_out
else
    cat $errors | mail -s 'named.root update check error' root
fi
rm -f $new $errors

[root@sl6 ~]# chmod 700 /etc/cron.monthly/named.root_update

ファイヤーウォールの設定

bindのサービスを許可します。

# iptablesの設定を変更します
[root@sl6 ~]# vi /etc/sysconfig/iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# bindで使うポートを許可します
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 123 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

# bindの自動起動を設定します
[root@sl6 ~]# chkconfig named on
[root@sl6 ~]# chkconfig --list | grep named
named 0:off 1:off 2:on 3:on 4:on 5:on 6:off

# bindを起動します
[root@sl6 ~]# /etc/rc.d/init.d/named start
named を起動中: [ OK ]

ルーターの設定

ルーター側の静的NATの設定をして外部からのTCPとUDPの53番ポートへのアクセスがサーバーへ変換されるよう設定を行います。
設定方法は各ルーターの設定手順に沿って実施して下さい。

サーバー自身の参照DNSサーバー変更

サーバーが参照しているDNSサーバーを自身のIPアドレスに変更します。

[root@sl6 ~]# vi /etc/resolv.conf
search sa-sa-ki.jp
# 以前参照指定いたDNSサーバーのIPアドレスをこのサーバー自身のIPアドレスに変更します
nameserver 192.168.0.21

[root@sl6 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.21
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.21
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

動作確認

名前解決、IP解決ができるようになっているか確認します。

# 名前からIPアドレスを解決します
[root@sl6 ~]# dig ns.sa-sa-ki.jp

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> ns.sa-sa-ki.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64099 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;ns.sa-sa-ki.jp. IN A ;; ANSWER SECTION: ns.sa-sa-ki.jp. 86400 IN A 192.168.0.21 ;; AUTHORITY SECTION: sa-sa-ki.jp. 86400 IN NS ns.sa-sa-ki.jp. ;; Query time: 0 msec ;; SERVER: 192.168.0.21#53(192.168.0.21) ;; WHEN: Fri May 20 15:25:52 2011 ;; MSG SIZE rcvd: 62 [root@sl6 ~]# dig win7.sa-sa-ki.jp

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> win7.sa-sa-ki.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36151 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;win7.sa-sa-ki.jp. IN A ;; ANSWER SECTION: win7.sa-sa-ki.jp. 86400 IN A 192.168.11.101 ;; AUTHORITY SECTION: sa-sa-ki.jp. 86400 IN NS ns.sa-sa-ki.jp. ;; ADDITIONAL SECTION: ns.sa-sa-ki.jp. 86400 IN A 192.168.0.21 ;; Query time: 0 msec ;; SERVER: 192.168.0.21#53(192.168.0.21) ;; WHEN: Fri May 20 15:27:04 2011 ;; MSG SIZE rcvd: 83 # IPアドレスから名前を解決します
[root@sl6 ~]# dig -x 192.168.0.21

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> -x 192.168.0.21
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10430 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;21.0.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 21.0.168.192.in-addr.arpa. 86400 IN PTR sa-sa-ki.jp. ;; AUTHORITY SECTION: 0.168.192.in-addr.arpa. 86400 IN NS ns.sa-sa-ki.jp. ;; ADDITIONAL SECTION: ns.sa-sa-ki.jp. 86400 IN A 192.168.0.21 ;; Query time: 0 msec ;; SERVER: 192.168.0.21#53(192.168.0.21) ;; WHEN: Fri May 20 15:28:16 2011 ;; MSG SIZE rcvd: 101 [root@sl6 ~]# dig -x 192.168.11.101

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> -x 192.168.11.101
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22009 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;101.11.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 101.11.168.192.in-addr.arpa. 86400 IN PTR win7. ;; AUTHORITY SECTION: 11.168.192.in-addr.arpa. 86400 IN NS ns.sa-sa-ki.jp. ;; ADDITIONAL SECTION: ns.sa-sa-ki.jp. 86400 IN A 192.168.0.21 ;; Query time: 0 msec ;; SERVER: 192.168.0.21#53(192.168.0.21) ;; WHEN: Fri May 20 15:29:48 2011 ;; MSG SIZE rcvd: 106 # Googleなど外部の名前からIPアドレスを解決します
[root@sl6 ~]# dig www.google.co.jp

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> www.google.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27851 ;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 4, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.co.jp. IN A ;; ANSWER SECTION: www.google.co.jp. 345600 IN CNAME www.google.com. www.google.com. 604800 IN CNAME www.l.google.com. www.l.google.com. 300 IN A 64.233.183.104 www.l.google.com. 300 IN A 64.233.183.105 www.l.google.com. 300 IN A 64.233.183.106 www.l.google.com. 300 IN A 64.233.183.147 www.l.google.com. 300 IN A 64.233.183.99 www.l.google.com. 300 IN A 64.233.183.103 ;; AUTHORITY SECTION: google.com. 172797 IN NS ns1.google.com. google.com. 172797 IN NS ns4.google.com. google.com. 172797 IN NS ns3.google.com. google.com. 172797 IN NS ns2.google.com. ;; Query time: 4293 msec ;; SERVER: 192.168.0.21#53(192.168.0.21) ;; WHEN: Fri May 20 15:31:29 2011 ;; MSG SIZE rcvd: 250 # Googleなど外部のIPアドレスから名前を解決します
[root@sl6 ~]# dig -x 64.233.183.104

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> -x 64.233.183.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33005 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0 ;; QUESTION SECTION: ;104.183.233.64.in-addr.arpa. IN PTR ;; ANSWER SECTION: 104.183.233.64.in-addr.arpa. 86400 IN PTR tz-in-f104.1e100.net. ;; AUTHORITY SECTION: 183.233.64.in-addr.arpa. 86393 IN NS ns1.google.com. 183.233.64.in-addr.arpa. 86393 IN NS ns3.google.com. 183.233.64.in-addr.arpa. 86393 IN NS ns2.google.com. 183.233.64.in-addr.arpa. 86393 IN NS ns4.google.com. ;; Query time: 3965 msec ;; SERVER: 192.168.0.21#53(192.168.0.21) ;; WHEN: Fri May 20 15:32:09 2011 ;; MSG SIZE rcvd: 161

DNSSECの設定

DNSキャッシュポイズニングなどの攻撃を回避するためにDNSSECの設定を行います。

DNSSEC対応キャッシュサーバー構築 - かーみーのだらだら雑記DNSSEC の設定を参考にさせていただきました。
DNSSECの詳しい説明はDNSSECチュートリアルを参考にしてみてください。

# ルートゾーンから公開キーをdigコマンドで取得します
[root@sl6 ~]# dig +noall +answer +multiline DNSKEY . > pubkey

# IANAからハッシュデータと署名データを入手します
[root@sl6 ~]# wget http://data.iana.org/root-anchors/root-anchors.xml
--2011-05-13 14:22:46-- http://data.iana.org/root-anchors/root-anchors.xml
data.iana.org をDNSに問いあわせています... 192.0.32.25, 2620:0:2d0:200::25
data.iana.org|192.0.32.25|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 418
`root-anchors.xml' に保存中

100%[==============================================================================>] 418 --.-K/s 時間 0s

2011-05-13 14:22:47 (49.1 MB/s) - `root-anchors.xml' へ保存完了 [418/418]

[root@sl6 ~]# wget http://data.iana.org/root-anchors/root-anchors.asc
--2011-05-13 14:22:54-- http://data.iana.org/root-anchors/root-anchors.asc
data.iana.org をDNSに問いあわせています... 192.0.32.25, 2620:0:2d0:200::25
data.iana.org|192.0.32.25|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 189
`root-anchors.asc' に保存中

100%[==============================================================================>] 189 --.-K/s 時間 0s

2011-05-13 14:22:54 (22.9 MB/s) - `root-anchors.asc' へ保存完了 [189/189]

# 署名データを使って ハッシュデータの正当性を確認します
[root@sl6 ~]# gpg --verify root-anchors.asc root-anchors.xml
gpg: ディレクトリー「/root/.gnupg」ができました
gpg: 新しい構成ファイル「/root/.gnupg/gpg.conf」ができました
gpg: 警告: 「/root/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「/root/.gnupg/pubring.gpg」ができました
gpg: 2010年07月07日 07時49分10秒 JSTにDSA鍵ID 0F6C91D2で施された署名
gpg: 署名を検査できません: No public key

# IANAから取得したハッシュデータの内容を確認します
[root@sl6 ~]# cat root-anchors.xml
<?xml version="1.0" encoding="UTF-8"?>
<TrustAnchor id="AD42165F-3B1A-4778-8F42-D34A1D41FD93" source="http://data.iana.org/root-anchors/root-anchors.xml">
<Zone>.</Zone>
<KeyDigest id="Kjqmt7v" validFrom="2010-07-15T00:00:00+00:00">
<KeyTag>19036</KeyTag>
<Algorithm>8</Algorithm>
<DigestType>2</DigestType>
<Digest>49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5</Digest>
</KeyDigest>
</TrustAnchor>

# ルートゾーンの公開キーを使ってDSを抽出します
[root@sl6 ~]# dnssec-dsfromkey -f pubkey .
. IN DS 19036 8 1 B256BD09DC8DD59F0E0F0D8541B8328DD986DF6E
. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32 F24E8FB5
※[. IN DS 19036 8 1 B256B・・・]となっているのはZSK、[. IN DS 19036 8 2 49AAC・・・]となっているのはKSKです

# ハッシュデータと抽出したDSのKSKを比較します。

# DSのKSKですが、ハッシュデータの内容と比較するのは下記部分です
 無視してよい→. IN DS
 KeyTag→19036
 Algorithm→8
 DigestType→2
 Digest→49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32 F24E8FB5 (途中のスペースはないものとして比較します)

# ハッシュデータと抽出したDSのKSKが一致していればルートゾーンの公開キーのKSKをnamed.confに登録するために取得したルートゾーン公開キーを確認します。
[root@sl6 ~]# cat pubkey

.                       11361 IN DNSKEY 257 3 8 (
                                AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
                                bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
                                /RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
                                JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
                                oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
                                LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
                                Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
                                LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
                                ) ; key id = 19036
.                       11361 IN DNSKEY 256 3 8 (
                                AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69Hf
                                UyuGBbRN0+HuTOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjE
                                g58sRr4ZQ6Iu6b1xTBKgc193zUARk4mmQ/PPGxn7Cn5V
                                EGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlFrXDW3tjt
                                ) ; key id = 34525

# named.confの一番下にルートゾーンの公開キー 257(KSK)の値を登録します。
[root@sl6 ~]# vi /var/named/chroot/etc/named.conf
~ 冒頭部分省略 ~

/* Trusted keys

  This statement contains DNSSEC keys. If you want DNSSEC aware resolver you
  have to configure at least one trusted key.

  Note that no key written below is valid. Especially root key because root zone
  is not signed yet.
*/
/*
trusted-keys {
// Root Key
"." 257 3 3 "BNY4wrWM1nCfJ+CXd0rVXyYmobt7sEEfK3clRbGaTwSJxrGkxJWoZu6I7PzJu/
             E9gx4UC1zGAHlXKdE4zYIpRhaBKnvcC2U9mZhkdUpd1Vso/HAdjNe8LmMlnzY3
             zy2Xy4klWOADTPzSv9eamj8V18PHGjBLaVtYvk/ln5ZApjYghf+6fElrmLkdaz
             MQ2OCnACR817DF4BBa7UR/beDHyp5iWTXWSi6XmoJLbG9Scqc7l70KDqlvXR3M
             /lUUVRbkeg1IPJSidmK3ZyCllh4XSKbje/45SKucHgnwU5jefMtq66gKodQj+M
             iA21AfUVe7u99WzTLzY3qlxDhxYQQ20FQ97S+LKUTpQcq27R7AT3/V5hRQxScI
             Nqwcz4jYqZD2fQdgxbcDTClU0CRBdiieyLMNzXG3";
// Key for forward zone
example.com. 257 3 5 "AwEAAaxPMcR2x0HbQV4WeZB6oEDX+r0QM65KbhTjrW1ZaARmPhEZZe
                      3Y9ifgEuq7vZ/zGZUdEGNWy+JZzus0lUptwgjGwhUS1558Hb4JKUbb
                      OTcM8pwXlj0EiX3oDFVmjHO444gLkBO UKUf/mC7HvfwYH/Be22GnC
                      lrinKJp1Og4ywzO9WglMk7jbfW33gUKvirTHr25GL7STQUzBb5Usxt
                      8lgnyTUHs1t3JwCY5hKZ6CqFxmAVZP20igTixin/1LcrgX/KMEGd/b
                      iuvF4qJCyduieHukuY3H4XMAcR+xia2 nIUPvm/oyWR8BW/hWdzOvn
                      SCThlHf3xiYleDbt/o1OTQ09A0=";
// Key for reverse zone.
2.0.192.IN-ADDRPA.NET. 257 3 5 "AQOnS4xn/IgOUpBPJ3bogzwcxOdNax071L18QqZnQQQA
                                VVr+iLhGTnNGp3HoWQLUIzKrJVZ3zggy3WwNT6kZo6c0
                                tszYqbtvchmgQC8CzKojM/W16i6MG/ea fGU3siaOdS0
                                yOI6BgPsw+YZdzlYMaIJGf4M4dyoKIhzdZyQ2bYQrjyQ
                                4LB0lC7aOnsMyYKHHYeRv PxjIQXmdqgOJGq+vsevG06
                                zW+1xgYJh9rCIfnm1GX/KMgxLPG2vXTD/RnLX+D3T3UL
                                7HJYHJhAZD5L59VvjSPsZJHeDCUyWYrvPZesZDIRvhDD
                                52SKvbheeTJUm6EhkzytNN2SN96QRk8j/iI8ib";
};
*/

trusted-keys {
"." 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
             bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
             /RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
             JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
             oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
             LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
             Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
             LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=";
};

# trusted-keys {}; の中にルートゾーン公開キーの257(KSK)をコピーして、[11361 IN DNSKEY]を削除し、.とキー値をダブルクォーテーションで囲います。

DNSSECの確認

DNSSECが正しく動いているか確認します。

# bindを再起動します
[root@sl6 ~]# /etc/rc.d/init.d/named restart
named を停止中: . [ OK ]
named を起動中: [ OK ]

[root@sl6 ~]# dig +dnssec .

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> +dnssec .
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38569 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;. IN A ;; AUTHORITY SECTION: . 10708 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2011051201 1800 900 604800 86400 . 10708 IN RRSIG SOA 8 0 86400 20110519000000 20110511230000 34525 . Y5DXaczOP6r0G46XTAyMtMqMo/F7rA6YgOZKw8W8Nb0aTz3TID2eOQn2 k4Q+S22tRp2b/jq5TMrI5tBQN8HdWwFZWuI+kDh/wLbp5QdoDHuCrC3P +8VjjtTGnpOlGLnaZdpepY6SqSMYDEZs/Ata/3+YGbtoBr7U/4H10L/c o38= . 10708 IN RRSIG NSEC 8 0 86400 20110519000000 20110511230000 34525 . TmdEwgwpIUurrZrohxk/rIjsmXj2xDobTSwgJpWZff6CShbAdQLZgzBX JKwMft17+yOxHlmkJNNR1UuUgo8WYzj76X7lEuvkCLJoLHJcvat70vLm XynjIztTULdPVs3JMP4jctEP6NiloHkJ4d97cYJ2aF6upanng+P6iWpb xVg= . 10708 IN NSEC ac. NS SOA RRSIG NSEC DNSKEY ;; Query time: 0 msec ;; SERVER: 192.168.0.21#53(192.168.0.21) ;; WHEN: Fri May 13 15:08:43 2011 ;; MSG SIZE rcvd: 443

digの結果のflagsの中にadフラグがあればDNSSECが正しく動いています。

■参考サイト
BINDのロギング機能
named.confファイル
強いBIND DNSサーバを構築する 第二回 - named.confの基本設定 - Eurotec Information Systems K.K. Web Site
DNSサーバー構築(BIND) - CentOSで自宅サーバー構築
DNSSEC対応キャッシュサーバー構築 - かーみーのだらだら雑記
DNSSEC の設定

自宅サーバー再構築 その12 CentOS 5.2 にDNSサーバーを導入して名前解決(確認編)

投稿者:yasu 更新日時:2009年3月27日 8時43分00秒
カテゴリbind, CentOS, Linux, 自宅サーバー
タグ

今回は外部公開まで完了したDNSサーバーの動作確認や脆弱性の確認を行っていきたいと思います。

名前解決を確認する

設定が完了したので名前解決の確認を行ってみます。

まずローカルネットワークから確認しますので、各クライアントの参照するDNSサーバーのアドレスを192.168.0.20に変更します。

Windowsで確認する場合、コマンドプロンプトから確認します。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:Documents and SettingsAdministrator>nslookup
Default Server: sa-sa-ki.jp
Address: 192.168.0.20←参照しているDNSサーバーのアドレスが192.168.0.20になっていること

正引きの確認
>winxp.sa-sa-ki.jp
Default Server: sa-sa-ki.jp
Address: 192.168.0.20

Name: winxp.sa-sa-ki.jp
Address: 192.168.0.101←正しいアドレスが返ってきている

逆引きの確認
>192.168.0.103

Default Server: sa-sa-ki.jp
Address: 192.168.0.20

Name: leopard←正しいホスト名が返ってきている
Address: 192.168.0.103

MacやUbuntuなどLinuxまたはUnixで確認する場合、ターミナルや端末を起動します。
※ここではubuntuで確認した結果を記載します。

正引きの確認
ubuntu@ubuntu:~$ dig winvista
; < <>> DiG 9.5.0-P2 < <>> winvista.sa-sa-ki.jp
;; global options: printcmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 1119 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;winvista.sa-sa-ki.jp. IN A ;; ANSWER SECTION: winvista.sa-sa-ki.jp. 86400 IN A 192.168.0.102←正しいアドレスが返ってきている

;; AUTHORITY SECTION:
sa-sa-ki.jp. 86400 IN NS ns.sa-sa-ki.jp.

;; Query time: 4 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: Tue Mar 24 23:05:36 2009
;; MSG SIZE rcvd: 69

逆引きの確認
ubuntu@ubuntu:~$ dig -x 192.168.0.104

; < <>> DiG 9.5.0-P2 < <>> -x 192.168.0.104
;; global options: printcmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 28966 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;104.0.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 104.0.168.192.in-addr.arpa. 86400 IN PTR ubuntu.←正しいホスト名が返ってきている

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 86400 IN NS ns.sa-sa-ki.jp.

;; Query time: 12 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: Tue Mar 24 23:10:47 2009
;; MSG SIZE rcvd: 91

続いて外部から確認します。
ローカルネットワーク以外のネットワークで試してください。(学校、職場、データ通信機など)
Windowsで確認する場合、コマンドプロンプトから確認します。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:Documents and SettingsAdministrator>nslookup
Default Server: xxxxxxxxxx
Address: xxx.xxx.xx.xx

参照DNSサーバー変更
>server ns.sa-sa-ki.jp
Default Server: ns.sa-sa-ki.jp
Address: 210.189.104.64

正引きの確認
>www.sa-sa-ki.jp
Default Server: ns.sa-sa-ki.jp
Address: 210.189.104.64

Name: www.sa-sa-ki.jp
Address: 210.189.104.64←正しいアドレスが返ってきている

逆引きの確認
>210.189.104.64

Default Server: ns.sa-sa-ki.jp
Address: 210.189.104.64

Name: sa-sa-ki.jp←正しいホスト名が返ってきている
Address: 210.189.104.64

MacやUbuntuなどLinuxまたはUnixで確認する場合、ターミナルや端末を起動します。
※ここではubuntuで確認した結果を記載します。

正引きの確認
ubuntu@ubuntu:~$ dig @ns.sa-sa-ki.jp mail.sa-sa-ki.jp

; < <>> DiG 9.5.0-P2 < <>> @ns.sa-sa-ki.jp mail.sa-sa-ki.jp
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 20680 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;mail.sa-sa-ki.jp. IN A ;; ANSWER SECTION: mail.sa-sa-ki.jp. 86400 IN A 210.189.104.64←正しいアドレスが返ってきている

;; AUTHORITY SECTION:
sa-sa-ki.jp. 86400 IN NS ns.sa-sa-ki.jp.

;; ADDITIONAL SECTION:
ns.sa-sa-ki.jp. 86400 IN A 210.189.104.64

;; Query time: 168 msec
;; SERVER: 210.189.104.64#53(210.189.104.64)
;; WHEN: Wed Mar 25 11:05:39 2009
;; MSG SIZE rcvd: 106

逆引きの確認
ubuntu@ubuntu:~$ dig @ns.sa-sa-ki.jp -x 210.189.104.64

; < <>> DiG 9.5.0-P2 < <>> @ns.sa-sa-ki.jp -x 210.189.104.64
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 4352 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;64.104.189.210.in-addr.arpa. IN PTR ;; ANSWER SECTION: 64.104.189.210.in-addr.arpa. 86400 IN PTR sa-sa-ki.jp.←正しいホスト名が返ってきている

;; AUTHORITY SECTION:
104.189.210.in-addr.arpa. 86400 IN NS ns.sa-sa-ki.jp.

;; ADDITIONAL SECTION:
ns.sa-sa-ki.jp. 86400 IN A 210.189.104.64

;; Query time: 417 msec
;; SERVER: 210.189.104.64#53(210.189.104.64)
;; WHEN: Wed Mar 25 11:10:03 2009
;; MSG SIZE rcvd: 103

bindのバージョン情報をチェックします。

bindのバージョン情報を隠蔽する設定をしたのでその確認をします。
※digコマンドを使った確認ですのでサーバーで操作します

[root@centos ~]# dig @ns.sa-sa-ki.jp chaos txt version.bind

; < <>> DiG 9.3.4-P1 < <>> @ns.sa-sa-ki.jp chaos txt version.bind
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 37449 ; ; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;version.bind. CH TXT ;; ANSWER SECTION: version.bind. 0 CH TXT "unknown"←バージョン情報が隠蔽されている

;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.

;; Query time: 28 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: Thu Mar 26 08:28:43 2009
;; MSG SIZE rcvd: 64

DNSキャッシュポイズニングの脆弱性をチェックします。

DNSキャッシュポイズニングと言うのは簡単に言うとドメイン情報を書き換えて不正なサイトへ遷移させるという攻撃なのですが、以下のサイトを参考に脆弱性のチェックを行います。
情報処理推進機構:情報セキュリティ:脆弱性対策:DNSキャッシュポイズニングの脆弱性に関する注意喚起
また情報処理推進機構のサイトにDNSキャッシュポイズニング対策について詳しい説明をまとめているPDFファイルがありました。
DNSキャッシュポイズニング対策(全50ページ、1.69MB)

DNS問い合わせに使用するポート番号がランダム化されているか確認します
[root@centos ~]# dig +short porttest.dns-oarc.net TXT
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"210.189.104.64 is GREAT: 43 queries in 9.0 seconds from 43 ports with std dev 19162"
結果、「GREAT」が表示されれば問題ありません

DNS問い合わせに使用するIDがランダム化されているか確認します
[root@centos ~]# dig +short txidtest.dns-oarc.net TXT
txidtest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"210.189.104.64 is GREAT: 123 queries in 24.7 seconds from 123 txids with std dev 19340"
結果、「GREAT」が表示されれば問題ありません

外部からの再帰的なDNS問い合わせに対して回答していないか確認します
※この確認はサーバー以外のPCのブラウザから確認します。

IANA — Cross-Pollination Scanへ遷移してチェックするDNSサーバーを入力します。
ここでは「ns.sa-sa-ki.jp」を指定して[実行]ボタンをクリックします。

結果、「Safe」が表示されれば問題ありません

DNSサーバーは構築が大変ですが今後のWebサーバーやメールサーバー公開時に必要になりますので、ぜひ頑張ってみてください。

■ 参考サイト ■
DNSサーバー構築(BIND) - CentOSで自宅サーバー構築
はじめての自宅サーバ構築 Fedora/CentOS - DNSサーバの構築(bind)
「BIND」の設定
@IT:DNS Tips:BINDのバージョンを調べる方法とは
DNSキャッシュ・ポイズニングとは 【DNS cache poisoning】 - 意味・解説 : IT用語辞典
情報処理推進機構:情報セキュリティ:脆弱性対策:DNSキャッシュポイズニングの脆弱性に関する注意喚起

■関連記事
自宅サーバー再構築 その1 導入を検討する
自宅サーバー再構築 その2 CentOS 5.2 をインストールする
自宅サーバー再構築 その3 インストールしたCentOS 5.2 にリモート接続準備
自宅サーバー再構築 その4 CentOS 5.2 インストール後の初期設定
自宅サーバー再構築 その5 CentOS 5.2 ファイル転送準備
自宅サーバー再構築 その6 CentOS 5.2 にアンチウィルスソフトを導入する
自宅サーバー再構築 その7 CentOS 5.2 にファイル改竄検知システムを導入する
自宅サーバー再構築 その8 CentOS 5.2 にrootkit検知ツールを導入する
自宅サーバー再構築 その9 CentOS 5.2 にバッファオーバーフロー攻撃対策を行う
自宅サーバー再構築 その10 CentOS 5.2 SSHサーバーを構築して外部からリモート接続&リモートファイル転送
自宅サーバー再構築 その11 CentOS 5.2 にDNSサーバーを導入して名前解決(設定編)
自宅サーバー再構築 その12 CentOS 5.2 にDNSサーバーを導入して名前解決(確認編)
自宅サーバー再構築 その13 CentOS 5.2 にLAMP環境構築(Apache、PHP編)
自宅サーバー再構築 その14 CentOS 5.2 にLAMP環境構築(MySQL編)
自宅サーバー再構築 その15 Apacheにサーバー証明書を導入する
自宅サーバー再構築 その16 CentOS 5.2 にWordPressを導入してブログサイトを構築する
自宅サーバー再構築 その17 WordPressのセキュリティ対策
自宅サーバー再構築 その18 CentOS 5.3 にNTPサーバーを導入して自動時間合わせ
自宅サーバー再構築 その19 CentOS 5.3 アンチウィルスソフトのバージョンアップ
自宅サーバー再構築 その20 CentOS 5.3 メールサーバー構築(Postfix設定編)
自宅サーバー再構築 その21 CentOS 5.3 メールサーバー構築(Dovecot設定編)
自宅サーバー再構築 その22 CentOS 5.3 メールサーバー構築(公開編)
自宅サーバー再構築 その23 CentOS 5.3 メールサーバー構築(SSL導入編)
自宅サーバー再構築 その24 CentOS 5.3 メールサーバー構築(メールアカウント作成編)
自宅サーバー再構築 その25 CentOS 5.3 メールサーバー構築(Thunderbird設定編)
自宅サーバー再構築 番外編その1 CentOS 5.3 のリリースと導入済みソフトウェアのアップデート

自宅サーバー再構築 その11 CentOS 5.2 にDNSサーバーを導入して名前解決(設定編)

投稿者:yasu 更新日時:2009年3月26日 20時19分00秒
カテゴリbind, CentOS, Linux, 自宅サーバー
タグ

今回はDNSサーバーを構築して外部から自宅サーバーの名前解決ができるようにしていきたいと思います。

DNSサーバーを構築する上でのyasuの自宅の環境ですが契約しているプロバイダの有償オプションで固定IPアドレスを利用しています。
またお名前.comでドメインを取得しています。
※固定IPアドレスの契約やドメインは取得は完了している前提での手順ご紹介になることをご了承ください。

あとノートPCが複数台あるのでローカルネットワーク内だけで名前解決ができるようにします。

我が家のドメイン名や固定IPアドレス、PCのIPアドレスをご紹介しますと
ドメイン名:sa-sa-ki.jp
グローバルIPアドレス:210.189.104.64

自宅サーバー
 ホスト名:centos
 IPアドレス:192.168.0.20
ノートPC1
 ホスト名:winxp
 IPアドレス:192.168.0.101
ノートPC2
 ホスト名:winvista
 IPアドレス:192.168.0.102
ノートPC3
 ホスト名:leopard
 IPアドレス:192.168.0.103
ノートPC4
 ホスト名:ubuntu
 IPアドレス:192.168.0.104

のようになっておりまして(プライベートIPアドレスはダミーのIPアドレスを記載しています)、この環境にあわせて構築していきますのでみなさまは各自の環境に振り替えてください。

それではDNSサーバーを構築していく為にbindとcaching-nameserverをインストールしていきます。
bindは名前解決する為に都度上位のネームサーバーに問い合わせを行います。
caching-nameserverを一緒にインストールする事により一度上位のネームサーバーに問い合わせを行うと名前解決する為の情報を一定時間保持(キャッシュ)しておけるので、上位のネームサーバーに都度検索しなくて済みます。

bindとcaching-nameserverをインストールします

ログイン後、rootユーザにスイッチします
[centos@centos ~]$ su -
パスワード: rootユーザーのパスワード

bindとcaching-nameserverをインストールします
[root@centos ~]# yum -y install bind caching-nameserver
Loading "priorities" plugin
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* base: rsync.atworks.co.jp
* updates: rsync.atworks.co.jp
* addons: rsync.atworks.co.jp
* extras: rsync.atworks.co.jp
0 packages excluded due to repository priority protections
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package caching-nameserver.i386 xx:x.x.x-x.x.x.xx.xxx_x set to be updated
---> Package bind.i386 xx:x.x.x-x.x.x.xx.xxx_x set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
caching-nameserver i386 xx:x.x.x-x.x.x.xx.xxx_x updates 58 k
Installing for dependencies:
bind i386 xx:x.x.x-x.x.x.xx.xxx_x updates 959 k

Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 1.0 M
Downloading Packages:
(1/2): bind-x.x.x-x.x.x.x 100% |=========================| 959 kB 00:00
(2/2): caching-nameserver 100% |=========================| 58 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: bind ######################### [1/2]
Installing: caching-nameserver ######################### [2/2]

Installed: caching-nameserver.i386 xx:x.x.x-x.x.x.xx.xxx_x
Dependency Installed: bind.i386 xx:x.x.x-x.x.x.xx.xxx_x
Complete!

bind設定ファイルを設定します。

named.confファイルがないのでnamed.caching-nameserver.confからコピーします
[root@centos ~]# cp -p /etc/named.caching-nameserver.conf /etc/named.conf

named.confファイルを編集します
[root@centos ~]# vi /etc/named.conf
viエディタが起動するので設定ファイルを変更します
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver 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.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//
options {
  名前解決の問い合わせに応えるインターフェイスおよびポートを指定する事ができます。ここでは問い合わせ元のIPアドレスを特に制限せずランダムなポートで待ち受け可としたいので先頭に//をつけてコメント化します(IPv4)
  //listen-on port 53 { 127.0.0.1; };
  
  名前解決の問い合わせに応えるインターフェイスおよびポートを指定する事ができます。ここでは問い合わせ元のIPアドレスを特に制限せずランダムなポートで待ち受け可としたいので先頭に//をつけてコメント化します(IPv6)
  //listen-on-v6 port 53 { ::1; };

  ※listen-on/listen-on-v6をコメント化する事で全ての問い合わせ元IPアドレスの制限がなくなり、かつランダムなポートで待ち受け可になりDNSキャッシュポイズニング対策になります。

  bindのバージョンを非表示化する為に追加します
  version "unknown";

  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";

  // Those options should be used carefully because they disable port
  // randomization
  // query-source port 53;
  // query-source-v6 port 53;

  名前解決の問い合わせ可能なホストを指定できます。ここではローカルホストおよびローカルネットワークからの問い合わせを許可します
  allow-query { localhost; localnets;};

  ゾーン転送可能なホスト(セカンダリサーバ)を指定できます。ここではスレーブサーバはありませんので全ホスト転送不許可とします
  allow-transfer { none; };

  外部のDNSサーバに問い合わせを転送する場合に指定します。契約しているプロバイダのプライマリDNSとセカンダリDNSのIPアドレスを指定します(IPアドレスは各自DNSサーバのIPアドレスを入力の事)
  forwarders { xxx.xxx.xxx.xxx; xxx.xxx.xxx.xxx; };
};

DNSサーバへrndcと呼ばれるツールでアクセスを行うための設定を行います。rndcを使うとbindの機動・停止などを行うことが可能です
controls {
  inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

include "/etc/rndc.key";

ログに関するオプションを指定できます。ここではログファイルに日時、メッセージのカテゴリ、メッセージの重要度を出力するよう設定を追加します
logging {
  channel default_debug {
    file "data/named.run";
    severity dynamic;
    print-severity yes;
    print-category yes;
    print-time yes;

  };
};

ローカルホストで有効なゾーンの設定を行います。
view localhost_resolver {
  match-clients { localhost; };
  match-destinations { localhost; };
  recursion yes;
  include "/etc/named.rfc1912.zones";
  include "/var/named/sa-sa-ki.local.zones";(※1)
};
ローカルネットワークで有効なゾーンの設定を行います。
view internal {
  match-clients { localnets; };
  match-destinations { localnets; };
  recursion yes;
(※2)
  include "/etc/named.rfc1912.zones";
  include "/var/named/sa-sa-ki.local.zones";
(※1)
};

外部から有効なゾーンの設定を行います。
view external {
  match-clients { any; };
  match-destinations { any; };
  recursion no;(※2)
  include "/var/named/sa-sa-ki.jp.zones";(※1)
};

内容を保存しviエディタを終了します

(※1 )この後の手順で作成するファイルですのでひとまず指定してください
(※2)再帰問い合わせの許可、不許可の設定します。ローカルホストやローカルネットワークでは許可を外部は不許可とします
「再帰問い合わせ」の説明はScanNetSecurity - 現役ペンテスト技術者が選ぶ 使えるセキュリティツール(19) 「dig」 を参照の事

ゾーンファイル指定用のファイルを作成します。

ローカルホスト・ローカルネットワークのゾーンファイル指定用のファイルを作成します
[root@centos ~]# vi /var/named/sa-sa-ki.local.zones
viエディタが起動するのでゾーンファイル指定用のファイルを作成します
//内部正引き
zone "sa-sa-ki.jp" {
  type master;
  file "sa-sa-ki.local";
};
//内部逆引き
zone "0.168.192.in-addr.arpa" {
  type master;
  file "0.168.192.in-addr.arpa.db";
};

内容を保存しviエディタを終了します

外部のゾーンファイル指定用のファイルを作成します
[root@centos ~]# vi /var/named/sa-sa-ki.jp.zones
viエディタが起動するのでゾーンファイル指定用のファイルを作成します
//外部正引き
zone "sa-sa-ki.jp" {
  type master;
  file "sa-sa-ki.jp";
  allow-query { any; };
};
//外部逆引き
zone "104.189.210.in-addr.arpa" {
  type master;
  file "104.189.210.in-addr.arpa.db";
  allow-query { any; };
};

内容を保存しviエディタを終了します

ゾーンファイルを作成します。

ローカルホスト・ローカルネットワークの正引き(ドメイン名→IPアドレス)ゾーンファイルをします
[root@centos ~]# vi /var/named/sa-sa-ki.local
viエディタが起動するのでゾーンファイルを作成します
$TTL 86400(※1)
@   IN   SOA   sa-sa-ki.jp.(※2) centos.sa-sa-ki.jp.(※3) (
                   2009032301
(※4) ; Serial
                   3600
(※5) ; Refresh
                   900
(※6) ; Retry
                   604800
(※7) ; Expire
                   86400
(※8) ) ; Minimum
      IN   NS    ns.sa-sa-ki.jp.
(※9)
      IN   MX  10 mail.sa-sa-ki.jp.(※10)
@      IN   A    192.168.0.20(※11)
winxp    IN   A    192.168.0.101
winvista  IN   A    192.168.0.102
leopard   IN   A    192.168.0.103
ubuntu   IN   A    192.168.0.104
centos   IN   CNAME  sa-sa-ki.jp.
(※12)
ns     IN   CNAME  sa-sa-ki.jp.
mail    IN   CNAME  sa-sa-ki.jp.
www    IN    CNAME  sa-sa-ki.jp.

内容を保存しviエディタを終了します
(※1)外部のネームサーバーが自分のドメイン情報を参照してキャッシュ可能な時間(単位は秒)
(※2)ネームサーバーの名前
(※3)ドメインの管理者のメールアドレス(@は.に置き換えて記載する)
(※4)バージョン番号で年月日+シーケンス番号(YYYYMMDDnn)を指定します。ゾーンファイルを変更する場合は変更した年月日+シーケンス番号を一つ繰り上げます
・(※5)〜(※7)の設定はセカンダリネームサーバーがプライマリネームサーバーから取得したゾーン情報の扱いについて指定します
(※5)ゾーン情報をリフレッシュするまでの時間(単位は秒)
(※6)Refreshでゾーン情報が更新できなかった場合のリトライする時間(単位は秒)
(※7)ゾーン情報がリフレッシュできない状態が続いた場合、セカンダリネームサーバーが持っているデータを利用する時間(単位は秒)
(※8)存在しないドメイン名をキャッシュする時間(単位は秒)
(※9)NSレコードといってDNSサーバーを指定します。名前の後ろには.を付けます
(※10)MXレコードといってメールの転送先を指定します
(※11)Aレコードといってホスト名からIPアドレスへ変換する為の指定をします。@の場合ネームサーバー(※2)とイコールになります。
(※12)CNAMEレコードといってホスト名からIPアドレスへ変換する為のエイリアスを指定します。

ローカルホスト・ローカルネットワークの逆引き(IPアドレス→ドメイン名)ゾーンファイルをします
[root@centos ~]# vi /var/named/0.168.192.in-addr.arpa.db
viエディタが起動するのでゾーンファイルを作成します
$TTL 86400
@   IN   SOA   sa-sa-ki.jp. centos.sa-sa-ki.jp. (
                   2009032301 ; Serial
                   3600 ; Refresh
                   900 ; Retry
                   604800 ; Expire
                   86400 ) ; Minimum
    IN   NS     ns.sa-sa-ki.jp.
20   IN   PTR     sa-sa-ki.jp.
(※1)
101   IN   PTR     winxp.
102   IN   PTR     winvista.
103   IN   PTR     leopard.
104   IN   PTR     ubuntu.

内容を保存しviエディタを終了します
(※11)PTRレコードといってIPアドレスからホスト名へ変換する為の指定をします。

外部の正引き(ドメイン名→IPアドレス)ゾーンファイルをします
[root@centos ~]# vi /var/named/sa-sa-ki.jp
viエディタが起動するのでゾーンファイルを作成します
$TTL 86400
@   IN   SOA   sa-sa-ki.jp. centos.sa-sa-ki.jp. (
                   2009032301 ; Serial
                   3600 ; Refresh
                   900 ; Retry
                   604800 ; Expire
                   86400 ) ; Minimum
    IN   NS    ns.sa-sa-ki.jp.
    IN   MX 10  sa-sa-ki.jp.
@    IN   A    210.189.104.64
ns    IN   A    210.189.104.64
www   IN    A    210.189.104.64
mail   IN   A    210.189.104.64

内容を保存しviエディタを終了します

外部の逆引き(IPアドレス→ドメイン名)ゾーンファイルをします
[root@centos ~]# vi /var/named/104.189.210.in-addr.arpa.db
viエディタが起動するのでゾーンファイルを作成します
$TTL 86400
@   IN   SOA   sa-sa-ki.jp. centos.sa-sa-ki.jp. (
                   2009032301 ; Serial
                   3600 ; Refresh
                   900 ; Retry
                   604800 ; Expire
                   86400 ) ; Minimum
    IN   NS     ns.sa-sa-ki.jp.
64   IN   PTR     sa-sa-ki.jp.

内容を保存しviエディタを終了します

設定ファイルの所有者を変更する
[root@centos ~]# chown named.named /var/named/*
[root@centos ~]# ls -l /var/named
合計 136
-rw-r----- 1 named named 611 3月 24 19:29 0.168.192.in-addr.arpa.db
-rw-r----- 1 named named 441 3月 24 19:29 104.189.210.in-addr.arpa.db
drwxr-x--- 4 named named 4096 1月 30 12:11 chroot
drwxrwx--- 2 named named 4096 2月 24 18:53 data
-rw-rw-r-- 1 named named 198 1月 9 11:40 localdomain.zone
-rw-rw-r-- 1 named named 195 1月 9 11:40 localhost.zone
-rw-rw-r-- 1 named named 427 1月 9 11:40 named.broadcast
-rw-r----- 1 named named 1593 3月 24 18:57 named.ca
-rw-rw-r-- 1 named named 424 1月 9 11:40 named.ip6.local
-rw-rw-r-- 1 named named 426 1月 9 11:40 named.local
-rw-r--r-- 1 named named 2878 3月 24 11:21 named.root
-rw-rw-r-- 1 named named 427 1月 9 11:40 named.zero
-rw-r----- 1 named named 619 3月 24 19:29 sa-sa-ki.jp
-rw-r--r-- 1 named named 320 3月 24 17:22 sa-sa-ki.jp.zones
-rw-r----- 1 named named 843 3月 24 19:29 sa-sa-ki.local
-rw-r--r-- 1 named named 175 3月 24 09:49 sa-sa-ki.local.zones
drwxrwx--- 2 named named 4096 1月 9 11:40 slaves

設定ファイルの所有者が[named]に変更されている事を確認する

ルートゾーンファイル(世界に13台しかないトップレベルドメインを管理するDNSサーバーのIPアドレスを管理している)を最新にする

[root@centos ~]# dig . ns @198.41.0.4 > /var/named/named.ca

参照DNSサーバーをサーバー自身に変更する

参照DNSサーバーを変更します
[root@centos ~]# vi /etc/resolv.conf
viエディタが起動するので設定を以下の様に変更します
search sa-sa-ki.jp
nameserver 192.168.0.20

内容を保存しviエディタを終了します

DNSサーバーを外部公開する為に、CentOSのファイアウォールの設定を行います。

[root@centos ~]# vi /etc/sysconfig/iptables
viエディタが起動するのでファイアウォールの設定をします
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
下記2行を追加してTCPとUDPの53番ポートを開放します
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
内容を保存しviエディタを終了します

設定内容を反映します
[root@centos ~]# /etc/rc.d/init.d/iptables restart
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter [ OK ]
iptables モジュールを取り外し中 [ OK ]
iptables ファイアウォールルールを適用中: [ OK ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns [ OK ]

DNSサーバーを外部公開する為に、ルータの設定を変更してTCPとUDPの53番ポートを開放します。

開放方法はルータの設定手順に従って実施してください。

サービスの起動と自動起動の設定をします。

bindを起動します
[root@centos ~]# /etc/rc.d/init.d/named start
named を起動中: [ OK ]

OS再起動時にbindを自動起動するようにします
[root@centos ~]# chkconfig named on
[root@centos ~]# chkconfig --list named
named 0:off 1:off 2:on 3:on 4:on 5:on 6:off

ひとまずDNSサーバーの外部公開まで完了しました。
次回は動作検証とDNSキャッシュポイズニングの脆弱性の検証を行いたいと思います。

■ 参考サイト ■
Manpage of NAMED.CONF
DNSサーバー構築(BIND) - CentOSで自宅サーバー構築
はじめての自宅サーバ構築 Fedora/CentOS - DNSサーバの構築(bind)
「BIND」の設定
CentOS 5.2でBIND - K blog
BINDサーバー(ネームサーバー)をインストールして、名前解決を行おう。
DNSサーバ -BIND-
@IT:DNS Tips:SOAレコードには何が記述されている?

■関連記事
自宅サーバー再構築 その1 導入を検討する
自宅サーバー再構築 その2 CentOS 5.2 をインストールする
自宅サーバー再構築 その3 インストールしたCentOS 5.2 にリモート接続準備
自宅サーバー再構築 その4 CentOS 5.2 インストール後の初期設定
自宅サーバー再構築 その5 CentOS 5.2 ファイル転送準備
自宅サーバー再構築 その6 CentOS 5.2 にアンチウィルスソフトを導入する
自宅サーバー再構築 その7 CentOS 5.2 にファイル改竄検知システムを導入する
自宅サーバー再構築 その8 CentOS 5.2 にrootkit検知ツールを導入する
自宅サーバー再構築 その9 CentOS 5.2 にバッファオーバーフロー攻撃対策を行う
自宅サーバー再構築 その10 CentOS 5.2 SSHサーバーを構築して外部からリモート接続&リモートファイル転送
自宅サーバー再構築 その11 CentOS 5.2 にDNSサーバーを導入して名前解決(設定編)
自宅サーバー再構築 その12 CentOS 5.2 にDNSサーバーを導入して名前解決(確認編)
自宅サーバー再構築 その13 CentOS 5.2 にLAMP環境構築(Apache、PHP編)
自宅サーバー再構築 その14 CentOS 5.2 にLAMP環境構築(MySQL編)
自宅サーバー再構築 その15 Apacheにサーバー証明書を導入する
自宅サーバー再構築 その16 CentOS 5.2 にWordPressを導入してブログサイトを構築する
自宅サーバー再構築 その17 WordPressのセキュリティ対策
自宅サーバー再構築 その18 CentOS 5.3 にNTPサーバーを導入して自動時間合わせ
自宅サーバー再構築 その19 CentOS 5.3 アンチウィルスソフトのバージョンアップ
自宅サーバー再構築 その20 CentOS 5.3 メールサーバー構築(Postfix設定編)
自宅サーバー再構築 その21 CentOS 5.3 メールサーバー構築(Dovecot設定編)
自宅サーバー再構築 その22 CentOS 5.3 メールサーバー構築(公開編)
自宅サーバー再構築 その23 CentOS 5.3 メールサーバー構築(SSL導入編)
自宅サーバー再構築 その24 CentOS 5.3 メールサーバー構築(メールアカウント作成編)
自宅サーバー再構築 その25 CentOS 5.3 メールサーバー構築(Thunderbird設定編)
自宅サーバー再構築 番外編その1 CentOS 5.3 のリリースと導入済みソフトウェアのアップデート