Solaris10:BIND-9.6.1-P1導入

提供:KinusatiWiki
移動: 案内, 検索

目次

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/named.conf

ゾーンファイルを設置

詳細は以下ファイルを参照。すべて/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
個人用ツール