BIND9 による DNSサーバの構築
目次
BINDって何?
「Berkeley Internet Name Domain」の略でDNSの機能を提供してくれるソフトウェア。DNSのソフトウェアの標準セットアップ手順
1. ユーザの作成
rootユーザでBINDを実行しない。なぜなら仮にBINDに脆弱性が見つかって、root権限とか奪われるとだめだから。
そこで一般的によく行われているように named ユーザを作成してnamedユーザでBINDを起動させる
sudo useradd -c 'bind' -s /bin/false -g named -u 1052 -d /var/bind_root/named named
adduserっていうコマンドもあるが、こちらは対話形式でユーザの作成を行う。今回はuseraddでアカウントを追加。
1-1. chroot
namedユーザのホームディレクトリは/var/bind_root/namedとしたのはchrootを使うため。
chrootとはあるプロセスをルートディレクトリを変更して実行させるコマンド。
chrootを使うことでそのプロセスはその指定されたディレクトリより上の階層のファイルにアクセスできなくなるのでセキュリティが向上する
bindでは起動時に -t オプションでルートディレクトリを変更できる。
ディレクトリを作成してアクセス権限を指定しておく
chown -R named:named /var/bind_root/
2. BIND9 インストール
2-1. BINDのダウンロード
以下からダウンロード。とりあえずversion 9.2.3 を使うftp://ftp.isc.org/isc/bind9/
2-2. makefile作成
$ ./configure --prefix=/usr/local/named --sysconfdir=/etc --with-openssl=no --enable-ipv6=no
エラーがでた
configure: error: ar program not found. Please fix your PATH to include the directory in which ar resides, or set AR in the environment with the full path to ar.
ar なんてコマンドない。パッケージを入れてみる
sudo aptitude install binutils
(arコマンド: ファイルをまとめて保管しておくためのユーティリティ。tarと同じ用途。ただし一般ユーザはほとんど使わない)
またエラーがでた
configure: error: no acceptable C compiler found in $PATH
C compiler がない。パッケージを入れてみる
sudo aptitude install gcc
2-3. コンパイル,インストール
コンパイル
$ make
インストール
# make install
3. 起動
3-1. 起動スクリプト作成
#!/bin/sh
#
# named This init.d script is used to start apache2.
# that is used to resolve host name to IP addresses.
#
set -e
. /lib/lsb/init-functions
test -x /usr/local/named/sbin/named || exit 0
test -f /var/bind_root/named/etc/named.conf || exit 0
case "$1" in
start)
# start deamons.
log_begin_msg "Starting dns server (bind9)..."
start-stop-daemon --start --quiet --pidfile /var/bind_root/named/run/named/named.pid --exec /usr/local/named/sbin/named -- \
-u named \
-c /etc/named.conf \
-t /var/bind_root/named \
-g
touch /var/bind_root/named/var/run/named
echo
;;
stop)
# stop deamons.
log_begin_msg "Stopping dns server (bind9)..."
start-stop-daemon --stop --quiet --oknodo --pidfile /var/bind_root/named/run/named/named.pid
killproc /usr/local/named/sbin/named
rm -f /var/bind_root/named/run/named/named.pid
echo
;;
status)
status named
exit $?
;;
restart)
$0 stop
$0 start
exit $?
;;
*)
log_success_msg "Usage: named {start|stop|status|restart}"
exit 1
;;
esac
exit 0
こいつを /etc/init.d/の直下に置く。以下を実行してランレベル2で実行されるように配置
# cd /etc/rc2.d ; sudo ln -s ../init.d/named S89named
3-2. named.conf
named.confで設定されるルートディレクトリは -t で指定したパスに置き換わるので注意が必要
ここがうまく設定されていないと、named.conf が見つからない(file not found)とエラーがでる
options {
directory "/";
pid-file "/var/run/named/named.pid";
dump-file "/dump/named_dump.db";
version "";
recursion yes;
allow-recursion {
localnet;
};
};
3-3. 起動
# /etc/init.d/named start &
3-4. プロセス確認
以下のようになっていればOK/usr/local/named/sbin/named -u named -c /etc/named.conf -t /var/bind_root/named -g
メモ
コマンド
useradd, adduser
コマンド | 説明 | 使用例 |
useradd | オプションで項目を指定してユーザの作成 | sudo useradd -c 'bind' -s /bin/false -g named -u 1052 -d /var/bind_root/named name |
adduser | 対話形式でのユーザの作成 | adduser |
useradd オプションの意味はそれぞれ以下
-c | ユーザの説明 comment的なもの |
-s | login shell |
-u | uid |
-d | homeディレクトリ |
-g | group |
adduserではホームディレクトリの作成や.loginrc, .bashrc などの作成も行ってくれる
(OSによっては多少異なる)
mknod
mknodコマンド: コンピュータに接続されたデバイスへの接続に必要なデバイスファイルを作成するときに使う
書式:
mknod name [c|b] major minorオプション:
b | ブロック型のデバイス(テープやディスク:CD,DVD)のようなデバイスの接続用(ただしこれらの型はキャラクタ型のデバイスも必要) |
c | キャラクタ型デバイス ttyとかの仮想端末など |
major | カーネルがデバイスに関するドライバ(デバイスを扱えるようにするもの)を識別するのに使う(USB=180とか決まっていたりもする) |
minor | ドライバ内で識別するのに使われる番号 |
使用例:chrootユーザの/dev/null /dev/rondomを作成する
# mknod null c 1 3 ; mknod rondom c 1 8
参考
http://www.atmarkit.co.jp/flinux/rensai/bind909/bi...
2008年07月13日(日) 21:33:33 Modified by monpoke