ここでは、ソースパッケージからBINDをインストールしていく方法を解説します。
|
|
■BINDのダウンロード
※追記 2005/8/8:bind-9.3.1.tar.gzでも以下の説明で動作確認OK
■chroot 環境で動作させるための準備
仮にサーバーに侵入されたとしても、被害の拡大を最小限に抑えるために、named 専用のアカウントを用意し、jail
環境で動作させる設定を行います。まず、/etc/group に重複しないグループIDでnamed というグループを作成します。
# vi /etc/group
named:x:98: |
|
次に、ユーザーの作成を行います。-d オプションをつけて、chroot させたいディレクトリを指定します。つまり、/var/named
以下が named の住居となり、これ以上、上位の階層へアクセスできなくなります。また、named ユーザーにシェルを提供しないよう、-s
オプションを指定し、/bin/false とでもしておきます。
# useradd -g named
-d /var/named -s /bin/false named |
|
chroot させるのに必要となるディレクトリを作成します。
# mkdir /var/named
# cd /var/named
# mkdir -p dev log etc slave var/run/named
|
|
既に、named.conf が用意してあればそれをchroot させるディレクトリに移動させておきます。また、/etc
以下にnamed.conf がないとブートに失敗してしまうので、空(ダミー)のnamed.conf もつくっておきましょう。
# mv /etc/named.conf
/var/named/etc
# chown -R named.named /var/named/
# chmod 700 /var/named/
# touch /etc/named.conf |
|
mknodコマンドを使用して jail の内部に必要とするデバイスファイルを作成します。ほとんどのLinux
では、以下コマンドを実行しておけば問題ありません。「c」はキャラクタデバイス、「1」はメジャー番号、「3」はマイナー番号を意味します。
# cd /var/named/dev
# mknod null c 1 3
# mknod random c 1 8
# chmod 666 * |
|
$jail/etc下に、localtimeファイルをコピーしておきます。/etc/localtimeは、namedプロセスがローカルなタイムゾーンを取得し、正しい時刻を得るのに必要となります。
# cp /etc/localtime
/chroot/named/etc/
|
|
■BIND9のインストール
$ cd /usr/local/src/
$ tar xzvf bind-9.2.4rc2
$ cd bind-9.2.4rc2
$ ./configure --with-openssl=/usr/local/ssl
--enable-threads
$ make
$ make test
$ su
# make install |
|
◎デフォルトのインストール先
|
■prefix |
/usr/local |
|
■named.conf |
/etc |
|
■named.conf [ SecondaryDNS用 ]
インストールし終えたら、named.conf を作成します。以下の例は、筆者の環境での内向けセカンダリDNS用に記述してあります。ゾーンファイルは、$jail/slave
ディレクトリに保存しておきます。
Controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
acl localnet {
172.16.50.0/27;
172.16.51.0/28;
127.0.0.1;
};
options {
directory "/slave";
allow-query { localnet; };
allow-transfer { localnet; };
version "no version";
recursion yes;
};
zone "." {
type hint;
file "named.ca";
};
zone "localhost" {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa"{
type master;
file "0.0.127.in-addr.arpa.zone";
};
zone "kororo.jp" {
type slave;
masters {
172.16.50.2;
};
file "in-kororo.jp.zone.bak";
allow-update { 172.16.50.2; };
};
zone "50.16.172.in-addr.arpa" {
type slave;
masters {
172.16.50.2;
};
file "50.16.172.in-addr.arpa.zone.bak";
allow-update { 172.16.50.2; };
};
zone "51.16.172.in-addr.arpa" {
type slave;
masters {
172.16.50.2;
};
file "51.16.172.in-addr.arpa.zone.bak";
allow-update { 172.16.50.2; };
};
include "/etc/rndc.key";
|
|
■BINDの起動
ブートファイルと、ゾーンデータファイルを適切な位置に配置させたら、BINDを -t オプションを付け加えて起動させてみましょう。
/usr/local/sbin/named
-u named -t /var/named |
|
◎named のオプション
|
-c |
conf ファイルの場所を指定する。デフォルトは、/etc/named.conf |
|
-p port |
ポート番号を指定する |
|
-t chrootdir |
chroot にするディレクトリを指定する。 |
|
-u username |
プロセスのユーザを指定する。 |
|
なお、起動した際に/var/log/message を見てエラーメッセージが表示されていないかどうか確認してください。また、ps
コマンドを実行し、named のプロセスがあるかどうか確認してください。以下のようなエラーメッセージが表示されていた場合は、/etc下に空の
named.conf を作成してください。
loading configuration from '/etc/named.conf'
none:0: open: /etc/named.conf: file not found
loading configuration: file not found
exiting (due to fatal error)
named.conf に
include "/etc/rndc.key"; の記述がある場合は、以下のようなエラーが表示されます。これはrndc.keyを作成していないためです。鍵の生成については後述します。
loading configuration from '/etc/named.conf'
/etc/named.conf:89: open: /etc/rndc.key: file not found
loading configuration: file not found
exiting (due to fatal error)
# ps aux | grep
named
root 11541 0.0 1.0 29396 2588 ? S 02:51
0:00 /usr/local/sbin/named
root 11553 0.0 0.2 4572 664 pts/1 S 02:58
0:00 grep named |
|
■rndc.key の作成
それでは、rndc.keyの作成を行います。rndc-confgenオプションは以下表を参考にしてください。詳細に関しては、rndc-confgen
--help を実行してください。
#/usr/local/sbin/rndc-confgen
-a -b 512 -k rndckey |
|
◎rndc-confge のオプション
|
-a |
鍵を生成し、/etc/rndc.key に書き込む |
|
-b bits |
暗号鍵の長さをビットで指定する。指定しない場合は128bit
で生成される。 |
|
-k keyname |
生成されるキーファイルの名前を指定することができる |
|
上記コマンドを実行したら、/etc/rndc.key というファイルが作成されているはずなので、開いてみてください。赤色で表示されているのがHMAC-MD5で生成された暗号鍵です。
# vi /etc/rndc.key
key "rndckey" {
algorithm hmac-md5;
secret "Ax0uW7BHQfuufQZWOVzphIolT+FVNDFRGGwrAOxKMT/ZTd/+vfP/V97vHb0g==";
}; |
|
上記で生成された暗号鍵をnamed.conf が読み込めるように、/etc/named.conf を開いて、以下の行を付け加えます。この行を加えることによってローカルホストがrndc
に接続ができるようになります。
# vi /etc/named.conf
controls {
inet 127.0.0.1 allow { localhost; } keys
{ rndckey; };
};
include "/etc/rndc.key";
|
|
/etc/rndc.conf を $jail/etc ディレクトリに移動させておきます。
# mv /etc/rndc.key
/var/named/etc/rndc.key
# chmod 700 /var/named/etc/rndc.key
# ls /var/named/etc/rndc.key
-rw------- 1 named named 140 Apr 26
00:51 /var/named/etc/rndc.key |
|
以上の作業を終えたら、rndc reload コマンドを実行します。まずは、named が起動していない状態でリロードを実行してみてください。named
が起動してたら、kill してプロセスを停止させてから実行してください。named が起動していないと、rndc:
connect failed: connection refused のように接続が拒否されます。
# ps aux | grep
named
root 13393 0.0 0.1 3504 372 pts/1 R 04:03
0:00 grep named
# rndc reload
rndc: connect failed: connection refused |
|
今度はnamed を起動してからrndc reload を実行してみます。/var/log/messages
を見て、以下のように表示されれば正常にリロードされたことが確認できます。
# /usr/local/sbin/named
-u named -t /var/named
# rndc reload
# tail /var/log/messages
Dec 31 04:09:11 ns named[13412]: loading
configuration from '/etc/named.conf' |
|
念のため、rndc が使用する953番のポートがアクティブな状態になっているかどうかも nestat コマンドで確認してください。
# netstat -ln
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN |
|
■BINDの自動起動設定
BINDの自動起動スクリプトを作成します。といっても、RedHat用の自動起動スクリプトがパスを変更するだけで使えそうだったので、このファイルを環境に合わせて編集しておきます。私の環境での自動起動スクリプトは
こちら を参照してください。最後に、chkconfig
--add してnamed を自動起動サービスに加えておきます。
# chkconfig --add
named
# chkconfig --level 35 named on |
|