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




スマートフォン版で見る