広告

検索

RSS RSSフィード

カレンダー

2011年7月
« 6月   8月 »
 123
45678910
11121314151617
18192021222324
25262728293031

カテゴリー

最新のコメント

リンク

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 の設定


“Scientific Linux 6で自宅サーバー構築 その10 DNSサーバーを構築”にコメントはありません

コメントする