Solaris10:BIND-9.6.1-P1導入
目次 |
BIND 9.6.1-P1 インストール
BINDのセキュリティ脆弱性が見つかったため、早速バージョンアップを敢行。
http://itpro.nikkeibp.co.jp/article/NEWS/20090729/334734/?ST=security
BIND-9.6.0-P1 => BIND-9.6.1-P1へとあげる
設定概要は以下
- /var/namedでchroot
- named:namedで起動
- /usr/local/sbin/namedを起動
ユーザ追加
# groupadd -g 53 named # useradd -u 53 -g 53 -d /var/named -s /bin/false named
コンパイル
./configure時にsysconfdirを指定することで、/usr/local/etc/rndc.keyを読み取らせる。
# wget http://ftp.isc.org/isc/bind9/9.6.1-P1/bind-9.6.1-P1.tar.gz # gzip -dc bind-9.6.1-P1.tar.gz | tar xvfp - # cd bind-9.6.1-P1 # ./configure --sysconfdir=/usr/local/etc --disable-ipv6
chroot
Solarisの場合chroot環境下では/dev/pollに関するエラーが出る場合があります。
Jul 31 22:10:16 solaris named[21289]: [ID 873579 daemon.notice] starting BIND 9.6.1 -t /var/named/ -c /etc/named.conf Jul 31 22:10:16 solaris named[21289]: [ID 873579 daemon.notice] built with '--sysconfdir=/usr/local/etc' '--disable-ipv6' Jul 31 22:10:17 solaris named[21289]: [ID 873579 daemon.error] socket.c:3656: unexpected error: Jul 31 22:10:17 solaris named[21289]: [ID 873579 daemon.error] open(/dev/poll) failed: No such file or directory Jul 31 22:10:17 solaris named[21289]: [ID 873579 daemon.error] ./main.c:523: unexpected error: Jul 31 22:10:17 solaris named[21289]: [ID 873579 daemon.error] isc_socketmgr_create() failed: file not found Jul 31 22:10:17 solaris named[21289]: [ID 873579 daemon.crit] create_managers() failed: unexpected error Jul 31 22:10:17 solaris named[21289]: [ID 873579 daemon.crit] exiting (due to early fatal error)
この場合/dev/pollに対してのデバイスファイルをmknodする必要があります。
あるBINDのバージョン以降では、ネットワークの非同期I/O性能を向上させるため、select/pollではなくOSで用意された専用の方法(epoll(linux)・kqueue(bsd)・/dev/poll)を採用するようになりました。その結果solaris環境下でchrootする場合に/dev/pollデバイスを作る必要が出来ました。
solaris環境でchrootする場合、以下のBINDバージョンより古いソフトウェアからアップグレードする場合は注意してください。
- BIND 9.3.6b1未満
- BIND 9.4.3b3未満
- BIND 9.5.1b2未満
1. chrootディレクトリ作成
# mkdir -p /var/named/etc/namedb # mkdir -p /var/named/etc/namedb/master # mkdir -p /var/named/etc/namedb/slave # mkdir -p /var/named/var/log # mkdir -p /var/named/var/run # mkdir -p /var/named/var/dump # mkdir -p /var/named/var/stats # mkdir -p /var/named/usr/share/lib # mkdir /var/named/dev # chown -R named:named /var/named/etc/namedb # chown -R named:named /var/named/var/log # chown -R named:named /var/named/var/run # chown -R named:named /var/named/var/dump # chown -R named:named /var/named/var/stats
2. デバイス作成 デバイス番号はOSごとに異なるので調べた上で適宜設定してください
-bash-3.00# ls -lart /dev/poll lrwxrwxrwx 1 root root 29 Jul 27 22:54 /dev/poll -> ../devices/pseudo/poll@0:poll -bash-3.00# ls -lart /devices/pseudo/poll\@0\:poll crw-rw-rw- 1 root sys 135, 0 Jul 28 07:52 /devices/pseudo/poll@0:poll => /dev/pollはメジャー番号が135,マイナー番号が0とわかる
# cd /var/named/dev # mknod log c 21 5 # mknod null c 13 2 # mknod random c 149 0 # mknod poll c 135 0 # chmod 666 poll
3. timezone系のファイルをコピー
# cp -R /usr/share/lib/zoneinfo /var/named/usr/share/lib/
初期設定
rndcを利用可能とする
BINDのコントロールに利用するrndcコマンドを設定する
1. rndc.keyを作成する
# /usr/local/sbin/rndc-confgen > /usr/local/etc/rndc.key
# vi /usr/local/etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "xxxxxxxxxx";
};
2. rndc-confgenの設定をnamed.confに記載
rndc-confgenで表示されたコンフィグの中で、コメントアウトで表示された"key"・"controls"項目を/var/named/etc/named.confに転記する。このときコメントアウトは外す。
key "rndc-key" {
algorithm hmac-md5;
secret "xxxxxxxxxxx";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
named.conf設定
設定方針は以下の通り
- ゾーン提供およびキャッシュサーバとして動作させる。フォワーダーにはIIJ DNSを利用する
- secure bind templateおよびRFC, IANAの指針に基づき設定する
- chrootで動作させる
- ログファイルは/var/named/var/log/配下に出力する。ログファイルの保存は100m x 30世代とする。
- BINDのバージョン問い合わせは適当なバージョンを返すこととする
設定結果は以下を参照
ゾーンファイルを設置
詳細は以下ファイルを参照。すべて/var/named/etc/namedb/master配下に設置
自動起動設定
OS標準で導入されているBINDを以下の通り設定変更する
1. named/namedで起動させる設定を追加
# svccfg -s dns/server:default setprop start/user=named # svccfg -s dns/server:default setprop start/group=named
2. /usr/local/sbin/namedで起動させる
# svccfg -s dns/server:default setprop options/server = astring: \"/usr/local/sbin/named\"
3. chroot環境設定
# svccfg -s dns/server:default setprop options/chroot_dir = astring: \"/var/named\" # svccfg -s dns/server:default setprop options/configuration_file = astring: \"/etc/named.conf\"
4. manのPATHを修正
# svccfg -s dns/server setprop tm_man_named/manpath = astring: \"/usr/local/share/man\"
5. 権限修正。proc_setidを追加
# svccfg -s dns/server:default setprop start/privileges = astring: \ \"basic,\!proc_session,\!proc_info,\!file_link_any,net_privaddr,file_dac_read,file_dac_search,sys_resource,proc_chroot,proc_setid\"
6. 設定確認
# svccfg -s dns/server:default listprop # svccfg -s dns/server listprop
7. 設定反映
# svcadm refresh dns/server
8. サービス起動
# svcadm enable dns/server