BIND
ネットワーク内のホストの名前解決を行うためにDNSサーバを導入する。
今回導入するDNSサーバを利用できるのは自宅のネットワークに属するホストのみで、このDNSサーバが名前解決の出来ないホストについてはISPが提供しているDNSサーバに問い合わせを行う。
$ wget ftp://ftp.isc.org/isc/bind9/9.3.2/bind-9.3.2.tar.gz $ tar xvzf bind-9.3.2.tar.gz $ cd bind-9.3.2 $ ./configure --disable-ipv6 --sysconfdir=/etc $ make # make installBINDを起動する専用ユーザを作成する。
# /usr/sbin/groupadd -g 204 named # /usr/sbin/useradd -u 204 -g 204 -s /sbin/nologin -d /var/named named
ゾーンファイルを準備する。
作成するゾーンファイルは以下のとおり。
・localhost.zone(ローカルホスト正引き)
・localhost.rev(ローカルホスト逆引き)
・kajukaju.net.zone(ローカルネットワーク逆引き)
・kajukaju.net.rev(ローカルネットワーク逆引き)
$TTL 259200
@ IN SOA ns.kajukaju.net. root.kajukaju.net. (
2005061901 ;Serial
28800 ;Refresh 8 hours
14400 ;Retry 4 hours
604800 ;Expire 1 week
86400 ;Minimum TTL 1 day
)
IN NS localhost.
IN A 127.0.0.1
/var/named/localhost.rev
$TTL 259200
@ IN SOA ns.kajukaju.net. root.kajukaju.net. (
2005061901 ;Serial
28800 ;Refresh 8 hours
14400 ;Retry 4 hours
604800 ;Expire 1 week
86400 ;Minimum TTL 1 day
)
IN NS localhost.
1 IN PTR localhost.
/var/named/kajukaju.net.zone
$TTL 259200
@ IN SOA ns.kajukaju.net. root.kajukaju.net. (
2005061901 ;Serial
28800 ;Refresh 8 hours
14400 ;Retry 4 hours
604800 ;Expire 1 week
86400 ;Minimum TTL 1 day
)
IN NS ns.kajukaju.net.
IN MX 10 postman.kajukaju.net.
ns IN A 192.168.1.xx
www IN A 192.168.1.yy
postman IN A 192.168.1.zz
/var/named/kajukaju.net.rev
$TTL 259200
@ IN SOA ns.kajukaju.net. root.kajukaju.net. (
2005061901 ;Serial
28800 ;Refresh 8 hours
14400 ;Retry 4 hours
604800 ;Expire 1 week
86400 ;Minimum TTL 1 day
)
IN NS ns.kajukaju.net.
xx IN PTR ns.kajukaju.net.
yy IN PTR www.kajukaju.net.
zz IN PTR postman.kajukaju.net.
BINDの設定ファイルを編集。
設定のポイント
・ゾーンファイルの保存先は[/var/named]
・ログファイルの出力先は[/var/log/named]
・PIDファイルの出力先は[var/run/named]
・名前解決できないアドレスはISPのDNSに問い合わせる
・バージョン情報の秘匿のためchaosクエリを禁止する
・ログは必要なもの(と思われるもの)をシスログに出力[local0.info]
・シスログ出力時に時刻は出力しない(シスログの時刻を使うため)
//logging
logging {
channel test {
syslog local0;
severity info;
print-category yes;
print-severity yes;
//print-time yes;
};
category default { default_syslog; default_debug; };
category general { test; };
category database { test; };
category security { test; };
category config { test; };
category resolver { test; };
category xfer-in { test; };
category xfer-out { test; };
category notify { test; };
category client { test; };
category unmatched { test; };
category network { test; };
category update { test; };
category update-security { test; };
//category queries { test; };
category dispatch { test; };
category dnssec { test; };
//category lame-servers { test; };
category delegation-only { test; };
};
//options
options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
recursion yes;
forward only;
forwarders { 211.9.226.5; };
version "9.3.2";
};
//controls
controls {};
view "in_request" in {
zone "." {
type hint;
file "root.cache";
};
zone "localhost" {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa";
type master;
file "localhost.rev";
};
zone "kajukaju.net" {
type master;
file "kajukaju.net.zone";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "kajukaju.net.rev";
};
};
//Chaos Refused
view "chaos_request" chaos {
match-clients { !localhost; };
allow-query { none; };
zone "." {
type hint;
file "/dev/null";
};
};
ルートDNSサーバの情報が入ったファイルを取得する。
# wget ftp://ftp.internic.net/domain/named.root # mv named.root /var/named/root.cacheログファイル出力先やPIDファイル出力先、BIND設定ファイルなどBINDから使えるようにパーミッションを変更する。
# mkdir /var/log/named # mkdir /var/run/named # chown -R named:named /var/log/named # chown -R named:named /var/run/named # chown -R named:named /var/named # chown named:named /etc/named.conf起動スクリプトを作成する。
/etc/rc.d/init.d/named
#!/bin/sh
#
# named This shell script takes care of starting and stopping
# named (BIND DNS server).
#
# chkconfig: 345 55 45
# description: named (BIND) is a Domain Name Server (DNS) \
# that is used to resolve host names to IP addresses.
#
# processname: named
#
# Source Redhat function library.
#
. /etc/rc.d/init.d/functions
# Source networking configuration.
[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
RETVAL=0
prog="named"
# Tack on path to syslog-ng if not already in PATH
NAMED_PATH=":/usr/local/sbin"
PATH=$PATH$NAMED_PATH
export PATH
# See how we were called.
start() {
# Start daemons.
if [ -n "`/sbin/pidof named`" ]; then
echo -n $"$prog: already running"
return 1
fi
echo -n $"Starting $prog: "
daemon named -u named -c /etc/named.conf
RETVAL=$?;
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/named
echo
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Stopping $prog: "
killproc named
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/named
echo
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status named
RETVAL=$?
;;
restart)
stop
start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 1
esac
exit $?
起動スクリプトを登録する。
# chmod 755 /etc/rc.d/init.d/named # /sbin/chkconfig --add named # /sbin/chkconfig --list |grep named named 0:off 1:off 2:off 3:on 4:on 5:on 6:offBINDを起動する。
# /sbin/service named start named を起動中: [ OK ] # /sbin/service named stop named を停止中: [ OK ] # ps aux |grep named named 22151 0.0 0.9 5896 2448 ? S Jun20 1:38 named -u named -c /etc/named.conf # netstat -an |grep 53 tcp 0 0 192.168.1.xx:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN udp 0 0 192.168.1.xx:53 0.0.0.0:* udp 0 0 127.0.0.1:53 0.0.0.0:*動作確認をする。
# dig @localhost any kajukaju.net # dig @localhost -x 192.168.1.xx # dig @localhost www.goo.ne.jp # dig @localhost -x 210.150.25.37サーバ稼働時のログ。
# tail -f /var/log/named/messages Jul 3 15:14:28 bruna named[13789]: loading configuration from '/etc/named.conf' Jul 3 15:14:28 bruna named[13789]: listening on IPv4 interface lo, 127.0.0.1#53 Jul 3 15:14:28 bruna named[13789]: listening on IPv4 interface eth0, 192.168.1.xx#53 # tail -f /var/log/named/debug.log Jul 3 15:14:28 bruna named[13789]: general: info: zone 0.0.127.in-addr.arpa/IN/in_request: loaded serial 2006070301 Jul 3 15:14:28 bruna named[13789]: general: info: zone 1.168.192.in-addr.arpa/IN/in_request: loaded serial 2006070301 Jul 3 15:14:28 bruna named[13789]: general: info: zone localhost/IN/in_request: loaded serial 2006070301 Jul 3 15:14:28 bruna named[13789]: general: info: zone kajukaju.net/IN/in_request: loaded serial 2006070301 Jul 3 15:14:28 bruna named[13789]: general: notice: running Jul 3 15:17:08 bruna named[13789]: general: info: shutting down Jul 3 15:17:08 bruna named[13789]: network: info: no longer listening on 127.0.0.1#53 Jul 3 15:17:08 bruna named[13789]: network: info: no longer listening on 192.168.1.xx#53 Jul 3 15:17:08 bruna named[13789]: general: notice: exiting許可していないネットワークからのゾーン転送要求、バージョン問い合わせ要求が来たときはログを出力するようにしている。
○ゾーン転送要求 # dig @ns.kajukaju.net axfr kajukaju.net ○バージョン情報取得要求 # dig @ns.kajukaju.net txt chaos version.bind/var/log/named/audit.log
21-Jul-2005 22:20:12.822 queries: info: client 192.168.1.xx#56748: view chaos_request: query: version.bind CH TXT + 21-Jul-2005 22:20:12.822 security: info: client 192.168.1.xx#56748: view chaos_request: query (cache) 'version.bind/TXT/CH' deniedログローテートの設定
/etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/mail.log /var/log/boot.log /var/log/cron.log /var/log/snmp.log /var/log/named.log {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` 2> /dev/null || true
endscript
}