はじめに
CentOS 6.6サーバにソースからBIND 9.10.1-P1をインストールし、内部向けの権威DNSサーバを構築する手順です。
BINDはyumでインストールできますが、BIND脆弱性対応等により、yumのパッケージが提供されるより早く最新バージョンのBINDをインストールしたいといった事があるかと思います。
今回の例では、新しく構築したCentOS 6.6サーバ(BINDがインストールされていないサーバ)に対して、ソースファイルからBIND 9.10.1-P1をインストールする手順について記載致します。
構築するBINDサーバには例示用として「test.example.com」ゾーンを作成し、digコマンドで、本ゾーンの名前解決(正引き)を行うところまで記載致します。
↓
構築するBINDサーバには例示用として「test.example.com」と「100.51.192.in-addr.arpa」ゾーンを作成し、digコマンドで、本ゾーンに対する名前解決(正引きと逆引き)を行うところまで記載致します。
今回構築するDNSサーバの用途
今回の例で、BIND 9.10.1-P1をインストールするCentOS 6.6サーバは、プライベートなネットワーク内のマシンやサーバからの名前解決でのみ利用する内部向け権威DNSサーバとして構築します。
なお、プライベートなネットワーク内のマシンやサーバから、digやnslookupコマンドを使用せずに内部向けゾーンの名前解決を行えるようにする為には、DNSフォワーダや再帰検索を担う内部向けのDNSフルサービスリゾルバサーバが必要になります。
今回はDNSフルサービスリゾルバ構築手順については割愛しますが、フルサービスリゾルバ(DNSキャッシュサーバ)構築例としては、以下が参考になるかもしれません。
unbound 1.5.1によるDNSキャッシュサーバ構築例
http://qiita.com/na0AaooQ/items/ac0e2f0588c70a12f0c5
BIND 9.10.1-P1によるDNSキャッシュサーバ構築例
http://qiita.com/na0AaooQ/items/8fe5fca279449d96e277
参考サイト
BINDのソースインストール手順については、以下のページを参考にさせて頂きました。
http://etcsysconfig.hatenadiary.jp/entry/2013/03/15/155149
http://www.eis.co.jp/bind9_src_build_1/
http://www.geocities.jp/yasasikukaitou/bind_install.html
http://centossrv.com/bind.shtml
named.confの設定については、http://qiita.com/dumpty-alma@github 様の以下のページを参考にさせて頂きました。
http://qiita.com/dumpty-alma@github/items/536f21de67d0ed2c8e85
digコマンドの詳細については、以下のページを参考にさせて頂きました。
http://d.hatena.ne.jp/japanrock_pg/20090410/1239355230
make testでFAILが出る場合の対応については、以下のページを参考にさせて頂きました。
http://cathand.info/?p=85
http://diary.bis5.net/2013/07/27/302.html
BINDサーバで不要サービスを停止する際、 http://qiita.com/RentalCat__ 様の以下のページを参考にさせて頂きました。
http://qiita.com/RentalCat__/items/862d0ec075e97ae52b52
BIND 9.10.1-P1のソースファイル
今回の例では、ISCから以下のソースファイルをダウンロードして、BINDをインストールします。
ftp://ftp.isc.org/isc/bind9/9.10.1-P1/bind-9.10.1-P1.tar.gz
BIND 9.10.1-P1インストールする環境
BIND 9.10.1-P1をインストールするOSは以下になります。
・CentOS release 6.6 (2.6.32-504.3.3.el6.x86_64)
BIND 9.10.1-P1ソースインストール手順 (事前準備)
・BIND 9.10.1-P1をインストールしたいCentOS 6.6サーバにrootユーザでログインします。
・ホスト名を変更します。
# cp -p /etc/sysconfig/network /etc/sysconfig/network.ORG
#
# sed -i 's/^HOSTNAME=localhost.localdomain/HOSTNAME=dns-bind-server/' /etc/sysconfig/network
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=dns-bind-server
NOZEROCONF=yes
#
・CentOS 6.6サーバのカーネルやパッケージ類をアップデートします。
# yum update
・BINDインストールに最低限必要なパッケージをインストールします。
configure実行時に必要なgccやperl(perl-Net-DNS)やmakeをインストールします。
BINDでDNSSECを利用する場合は、OpenSSLもインストールします。
# yum -y install gcc
# yum -y install make
# yum -y install perl-Net-DNS
# yum -y install openssl-devel
・その他あると便利なパッケージ類をインストールします。
wgetはBINDソースのダウンロードに利用します。
sysstatはsarコマンドでBINDサーバの負荷を見るときに便利なのでインストールします。
ntpdateはBINDサーバの時刻同期の為にインストールします。
# yum -y install wget
# yum -y install sysstat
# yum -y install ntpdate
・パッケージ版のBINDはインストールされていない事を確認します。
# rpm -qa | grep bind
#
・サーバをリブートします。
# reboot
BIND 9.10.1-P1ソースインストール手順 (BINDインストール)
・CentOS 6.6サーバが起動したら、rootユーザでログインします。
[root@dns-bind-server ~]# hostname
dns-bind-server
[root@dns-bind-server ~]# uname -a
Linux dns-bind-server 2.6.32-504.3.3.el6.x86_64 #1 SMP Wed Dec 17 01:55:02 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@dns-bind-server ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@dns-bind-server ~]#
・BINDソースファイルをダウンロードします。
[root@dns-bind-server ~]# cd /usr/local/src
[root@dns-bind-server src]# pwd
/usr/local/src
[root@dns-bind-server src]# ls -lrta /usr/local/src
total 8
drwxr-xr-x. 2 root root 4096 Sep 23 2011 .
drwxr-xr-x. 12 root root 4096 Sep 30 07:18 ..
[root@dns-bind-server src]#
[root@dns-bind-server src]# wget ftp://ftp.isc.org/isc/bind9/9.10.1-P1/bind-9.10.1-P1.tar.gz
[root@dns-bind-server src]# ls -lrta /usr/local/src/bind-9.10.1-P1.tar.gz
-rw-r--r--. 1 root root 8356463 Jan 28 23:50 /usr/local/src/bind-9.10.1-P1.tar.gz
[root@dns-bind-server src]#
・ダウンロードしたBINDソースファイルを展開します。
[root@dns-bind-server src]# pwd
/usr/local/src
[root@dns-bind-server src]# tar zxvf /usr/local/src/bind-9.10.1-P1.tar.gz
[root@dns-bind-server src]# cd /usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]#
・展開したBINDソースファイルをコンパイルします。
[root@dns-bind-server bind-9.10.1-P1]# ll /var/named
ls: cannot access /var/named: No such file or directory
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# pwd
/usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]# ./configure --prefix=/var/named/chroot --enable-threads --with-openssl=yes --enable-openssl-version-check --disable-ipv6
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# pwd
/usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]# make
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# pwd
/usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]# ll bin/tests/system/ifconfig.sh
-rwxr-xr-x. 1 10292 9901 5760 Nov 21 08:56 bin/tests/system/ifconfig.sh
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# bin/tests/system/ifconfig.sh up
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# pwd
/usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]# make test
(長いので途中省略)
I:System test result summary:
I: 44 FAIL
I: X PASS
I: X SKIPPED
・make testでFAILが出た場合の対応。
以下サイトを見ますと、make testでFAILが出る場合、BINDソースディレクトリのオーナーをrootに変更する必要があります。
正確にはソースディレクトリのオーナーをmake testを実行するユーザ(今回の例ではrootユーザ)に合わせておく必要があるそうです。
http://cathand.info/?p=85
http://diary.bis5.net/2013/07/27/302.html
[root@dns-bind-server bind-9.10.1-P1]# chown -R root /usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]#
再度make testを実行し、FAILがなくなった事を確認します。
[root@dns-bind-server bind-9.10.1-P1]# pwd
/usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]# make test
(長いので途中省略)
I:exit status: 0
R:PASS
E:zonechecks:Fri Jan 29 XX:XX:XX JST 2015
I:System test result summary:
I: 63 PASS
I: 6 SKIPPED
make[3]: Leaving directory `/usr/local/src/bind-9.10.1-P1/bin/tests/system'
make[2]: Leaving directory `/usr/local/src/bind-9.10.1-P1/bin/tests'
make[1]: Leaving directory `/usr/local/src/bind-9.10.1-P1'
[root@dns-bind-server bind-9.10.1-P1]#
・make installを実行してコンパイルしたBINDをインストールします。
[root@dns-bind-server bind-9.10.1-P1]# pwd
/usr/local/src/bind-9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]# make install
(長いので途中省略)
ln /var/named/chroot/share/man/man1/isc-config.sh.1 /var/named/chroot/share/man/man1/bind9-config.1
/usr/bin/install -c -m 644 ./bind.keys /var/named/chroot/etc
[root@dns-bind-server bind-9.10.1-P1]#
・BINDがインストールされた事を確認します。
[root@dns-bind-server bind-9.10.1-P1]# ls -lrta /var/named/
total 12
drwxr-xr-x. 18 root root 4096 Jan 29 01:06 ..
drwxr-xr-x. 3 root root 4096 Jan 29 01:06 .
drwxr-xr-x. 9 root root 4096 Jan 29 01:22 chroot
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# ls -lrta /var/named/chroot/
total 36
drwxr-xr-x. 3 root root 4096 Jan 29 01:06 var
drwxr-xr-x. 3 root root 4096 Jan 29 01:06 ..
drwxr-xr-x. 3 root root 4096 Jan 29 01:22 share
drwxr-xr-x. 12 root root 4096 Jan 29 01:22 include
drwxr-xr-x. 2 root root 4096 Jan 29 01:22 lib
drwxr-xr-x. 2 root root 4096 Jan 29 01:22 sbin
drwxr-xr-x. 9 root root 4096 Jan 29 01:22 .
drwxr-xr-x. 2 root root 4096 Jan 29 01:22 bin
drwxr-xr-x. 2 root root 4096 Jan 29 01:22 etc
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# ls -lrta /var/named/chroot/sbin/named
-rwxr-xr-x. 2 root root 9974284 Jan 29 01:22 /var/named/chroot/sbin/named
[root@dns-bind-server bind-9.10.1-P1]#
[root@dns-bind-server bind-9.10.1-P1]# /var/named/chroot/sbin/named -v
BIND 9.10.1-P1
[root@dns-bind-server bind-9.10.1-P1]#
・bindユーザとbindグループを作成します。
bindグループを作成します。
[root@dns-bind-server bind-9.10.1-P1]# cd ~
[root@dns-bind-server ~]#
[root@dns-bind-server ~]# cp -p /etc/group /etc/group.ORG
[root@dns-bind-server ~]# cp -p /etc/passwd /etc/passwd.ORG
[root@dns-bind-server ~]# cp -p /etc/shadow /etc/shadow.ORG
[root@dns-bind-server ~]#
[root@dns-bind-server ~]# groupadd -g 25 bind
[root@dns-bind-server ~]#
bindユーザを作成します。
先のBINDインストールで/var/namedディレクトリが既に作成されている為、以下のようなメッセージが表示されますが、問題ありません。
[root@dns-bind-server ~]# useradd -u 25 -g bind -d /var/named -c "DNS BIND Named User" -s /sbin/nologin bind
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@dns-bind-server ~]#
・bindユーザにスイッチできない事を確認します。
[root@dns-bind-server ~]# id bind
uid=25(bind) gid=25(bind) groups=25(bind)
[root@dns-bind-server ~]# su - bind
This account is currently not available.
[root@dns-bind-server ~]#
・chroot配下にデバイスファイルを作成します。
[root@dns-bind-server ~]# mkdir /var/named/chroot/dev
[root@dns-bind-server ~]# ls -lrta /var/named/chroot/dev/
total 8
drwxr-xr-x. 10 root root 4096 Jan 29 01:39 ..
drwxr-xr-x. 2 root root 4096 Jan 29 01:39 .
[root@dns-bind-server ~]#
[root@dns-bind-server ~]# mknod -m 666 /var/named/chroot/dev/null c 1 3
[root@dns-bind-server ~]#
[root@dns-bind-server ~]# ls -lrta /var/named/chroot/dev/null
crw-rw-rw-. 1 root root 1, 3 Jan 29 01:40 /var/named/chroot/dev/null
[root@dns-bind-server ~]#
[root@dns-bind-server ~]# mknod -m 666 /var/named/chroot/dev/random c 1 8
[root@dns-bind-server ~]#
・rndcキーを作成します。
[root@dns-bind-server ~]# /var/named/chroot/sbin/rndc-confgen -a
wrote key file "/var/named/chroot/etc/rndc.key"
[root@dns-bind-server ~]#
・以下のようにrndcキーファイルが作成された事を確認します。
[root@dns-bind-server ~]# cat /var/named/chroot/etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "XXXXXXXXXXXXXXXXXXXXX";
};
[root@dns-bind-server ~]#
・/usr/locals/sbin/配下にrndcコマンド等のシンボリックリンクを作成します。
[root@dns-bind-server ~]# ls -lrta /var/named/chroot/sbin/rndc
-rwxr-xr-x. 1 root root 1452030 Jan 29 01:22 /var/named/chroot/sbin/rndc
[root@dns