2015年9月28日月曜日

bind-9.10.2-P4のソースビルドでハマる

今日は、Bindの話です。

最近、Bind周りでの脆弱性が発見されることが多くなり、厄介な事になってしまいました。

久々にソースビルドにチャレンジしたので、備忘録としてインストールの記録を残しておきます。


まずは、ダウンロードの場所ですが、

http://www.isc.org/downloads/

からダウンロードします。
対象のバージョンのファイルを探します。

STATUSがCurrent-Stableとなっているものが、安定版です。
今回は、9.10.2-P4を使います。 

すでに、Bindがインストールされている場合は、先にアンインストールしておきます。

rpm -e bind

手前の環境では、namedが作られている環境だったので、そのまま権限を書き換えていますが、
そうでない人は、bindを動かすためのグループとユーザーを作成しましょう。

groupadd named
useradd -g named

ファイルの取得はwgetで行っています。

cd /usr/local/src
wget ftp://ftp.isc.org/isc/bind9/9.10.2-P4/bind-9.10.2-P4.tar.gz
tar xvzf bind-9.10.2-P4.tar.gz
chown -R named:named ./bind-9.10.2-P4
cd bind-9.10.2-P4/

この時に、フォルダの権限を変更しておかないと、あとで意味不明なエラーでハマります。
続いてインストールですが、定例のコマンドを実行していきますが、いくつか注意するポイントがあります。

./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var  --sysconfdir=/etc --disable-openssl-version-check --disable-ipv6 --disable-threads --enable-chroot --with-openssl=no
make
bin/tests/system/ifconfig.sh up
make test
bin/tests/system/ifconfig.sh down
make install

まず、configureの実行ですが、オプションを指定しなくてもうまくいくかもしれません。
ただ、指定したほうが良いと思います。
特に、IPv6の設定やopensslの設定あたりは、今回は飛ばしています。
opensslを使う場合は、opensslを別途インストールして、実行すると良いでしょう。
また、ifconfig.shを実行しておかないと、テストが実行させてもらえません。
テスト時にエラーが1件出ます(reclimitのエラー)が、動いてしまったのでとりあえず無視しました。
手前の環境では、/usr/sbin/namedが新しく生成されています。

試しにバージョンを確認してみると。

named -v

無事にバージョンが上がっていることが確認できます。

これでやっとインストールは終わりですが、
設定ファイルを作っていきます。
設定ファイルは、/etc/named.confというファイルがあります。
手前の環境では、自動で作ってくれなかったので、自力で作ります。

named.confの作り方は以下のサイトを参照ください。
http://www.eis.co.jp/bind9_src_build_2/

起動しようとしても実行できなかったので、/var/log/messagesを確認すると、ルートヒントがないと言われます。

could not configure root hints from 'named.root' : file not found


named.confで設定したルートヒントファイルを作っていませんでした。
ルートヒントファイルは、またしてもwgetで拾ってきます。

wget http://www.internic.net/domain/named.root

digコマンドで作る方法もあるようです。
(参考)http://www.omakase.org/misc/dns_hint.html

dig @A.ROOT-SERVERS.NET. > /etc/namedb/named.root

作成したルートヒントファイルは、絶対パスで指定するか、/var/lib/named/配下に配置します。
この状態で、一旦動くかどうか試してみてくださいね。

/usr/sbin/named -u named -c /etc/named.conf

うまく動いているかどうかは、psコマンド等で調べてみてください。


サービス起動するために、
http://ryouto.jp/linux/linux_14.html


今回作成したバッチはこんな感じ。

#!/bin/sh

ARGS="-c /etc/named.conf -u named"
SBINDIR=/usr/sbin

[ -f ${SBINDIR}/named ] || exit 0

case "$1" in
    start)
        echo -n "Starting Bind ..."
        start-stop-daemon --start --quiet --exec ${SBINDIR}/named -- $ARGS
        touch /var/lock/subsys/named
        echo done.
        ;;
    stop)
        echo -n "Shutdown Bind ..."
        start-stop-daemon --stop --quiet --exec ${SBINDIR}/named -- $ARGS
        rm -f /var/lock/subsys/named
        echo done.
        ;;
    status)
        status named
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 { start | stop | restart }"
        exit 1
    ;;
esac
exit 0



RPMファイルを自力で作ることを思いつきましたが、力尽きたので、諦めています。

0 件のコメント:

コメントを投稿