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の設定を行います。
[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設定ファイルを作成します。
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"; };
内部向け正引きゾーンデータベースファイル作成
内部向け正引きゾーンデータベースファイルを作成します。
$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)向け逆引きゾーンデータベースファイル作成
内部向け正引きゾーンデータベースファイルを作成します。
$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)向け逆引きゾーンデータベースファイル作成
内部向け正引きゾーンデータベースファイルを作成します。
$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設定ファイルを作成します。
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; }; };
外部向け正引きゾーンデータベースファイル作成
外部向け正引きゾーンデータベースファイルを作成します。
$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
外部向け逆引きゾーンデータベースファイル作成
外部向け逆引きゾーンデータベースファイルを作成します。
$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の設定に誤りがないかチェックします。
/etc/named.conf:149: open: /etc/named.rfc1912.zones: file not found
早速エラーが。
/etc/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直下に移動します。
named.confの設定に誤りがないか再度チェックします。
今度はエラーが表示されなかったので設定は問題ないということが確認できました。
移動してきた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も必要なので全部コピーしてきます。
ルートゾーン自動更新設定
DNSサーバー構築(BIND) - CentOSで自宅サーバー構築のサイトを参考に(そのまま流用させてもらっていますが)毎月ルートゾーンを自動更新します。
#!/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のサービスを許可します。
[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アドレスに変更します。
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解決ができるようになっているか確認します。
[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チュートリアルを参考にしてみてください。
[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 [text/xml]
`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 [text/plain]
`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が正しく動いているか確認します。
[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で自宅サーバー構築 その1 サーバー機Express 5800 GT110bのオンボードRAIDでRAID1設定
Scientific Linux 6で自宅サーバー構築 その2 Scientific Linux 6をExpress5800/GT110bにインストール
Scientific Linux 6で自宅サーバー構築 その3 Scientific Linux 6インストール後の初期設定
Scientific Linux 6で自宅サーバー構築 番外編その1 Scientific Linux 6のcronについて
Scientific Linux 6で自宅サーバー構築 その4 Scientific Linux 6 にClamAVをインストールしてウィルス対策
Scientific Linux 6で自宅サーバー構築 その5 Scientific Linux 6 にTripwireをインストールしてファイル改ざんを検知する
Scientific Linux 6で自宅サーバー構築 その6 Scientific Linux 6 にchkrootkitをインストールしてrootkit感染を検知する
Scientific Linux 6で自宅サーバー構築 その7 NTPサーバーで自動時刻合わせ
Scientific Linux 6で自宅サーバー構築 その8 バッファオーバーフロー攻撃対策を行う
Scientific Linux 6で自宅サーバー構築 その9 logwatchでサーバー監視
Scientific Linux 6で自宅サーバー構築 その10 DNSサーバーを構築
Scientific Linux 6で自宅サーバー構築 番外編その2 Scientific Linuxを6.0から6.1にアップグレードする
Scientific Linux 6で自宅サーバー構築 その11 PostfixとDovecotとSMTP-AUTHでメールサーバーを構築する
Scientific Linux 6で自宅サーバー構築 その12 メールサーバーにSSLを導入する
Scientific Linux 6で自宅サーバー構築 その13 Apache PHP MySQLをインストール
Scientific Linux 6で自宅サーバー構築 その14 WebサーバーにSSLを導入する
Scientific Linux 6で自宅サーバー構築 その15 WordPressを導入する
Scientific Linux 6で自宅サーバー構築 その16 Piwikでアクセスログ集計
Scientific Linux 6で自宅サーバー構築 その17 Squidをインストール
Scientific Linux 6で自宅サーバー構築 その18 sshで鍵認証を導入
Scientific Linux 6で自宅サーバー構築 その19 WebDavの設定
Scientific Linux 6で自宅サーバー構築 その20 lm_sensorをインストール


