めっちゃ物騒なやつ見つけたから対策開始・・・ / (緊急)BIND 9.xの脆弱性(DNSサービスの停止)について(2013年7月27日公開) http://t.co/a66DtRpog6
— /home/maru.TA (@pg_bis5) July 27, 2013
最新バージョンで対策されてるっていうのに、CentOSのパッケージが無いなんて・・・orz
ってなわけで、急遽最新版(9.9.3-P2)のソースを調達してインストールしました。

By: Luc De Leeuw – CC BY-NC-SA 2.0
今回インストールする環境は、BIND 9.8.2のパッケージをインストールしている環境です。
自分の備忘録として、移行方法もあわせて記載しておきます。
ハマるかもしれないポイントは、make test時点のソースファイル群のパーミッションと、Chroot環境です。
ソースのダウンロード
ISCのウェブサイトからBIND 9.9.3-P2のtarballをダウンロードします。
久々にアクセスしたらデザインが一新されていて驚きましたが、メールマガジン?に登録しなくてもダウンロードできるようです。
展開、コンパイル (configure, make)
configureのオプションについては、./configure --help
で確認できる親切設計です。某HTTPDとは違いますね。
今回は、パッケージとしてインストールされているBINDを置き換えるので、prefixを設定しています。
./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var --sysconfdir=/etc --enable-ipv6 --enable-threads --enable-chroot --enable-largefile --with-make-clean |
--with-make-clean
オプションをつけると、configure
実行後にmake clean
が走ります。
Chrootを有効にして運用していた環境なので、--enable-croot
オプションも指定します。
make test
make
が終わった直後にmake test
を実行すると、エラーメッセージが表示されテストが走りません。
$ make test I: NOTE: The tests were not run because they require that I: the IP addresses 10.53.0.1 through 10.53.0.8 are configured I: as alias addresses on the loopback interface. Please run I: 'bin/tests/system/ifconfig.sh up' as root to configure I: them, then rerun the tests. Run make force-test to run the I: tests anyway. make: *** [test] エラー 1
メッセージに書いてあるとおり、rootで# BINDのソースディレクトリ/bin/tests/system/ifconfig.sh up
を実行すると、10.53.0.1~8のループバックインタフェースが生成されます。
今回一番ハマった点は、make test
で大量のFAILが出たことです。make test
のログを眺めてみると、
A:System test acl
I:Couldn’t start server ns2 (pid=436)
R:FAIL
S:additional:2013年 7月 27日 土曜日 14:51:59 JST
このように、Couldn't start server ns* (pid=***)
というエラーでFAILとなる項目が多数ありました。
どうやらファイル/ディレクトリの所有者と異なるユーザーでmake test
を実行していると発生するようです。(このあたり日本語の情報はかなり少ないです)
chown
で直してあげると通るようになります。
make installの前に
パッケージとしてインストールしたBINDを置き換えるために、既存の設定ファイル等で動作するかどうか確認します。
まず、稼働中のBINDのコマンドライン引数を確認します。
$ ps -ef | grep named named 12712 1 1 15:02 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot hogehoge 12864 31215 0 15:02 pts/41 00:00:00 grep named |
この場合は -u named -t /var/named/chroot
が引数ですね。
続いて、稼働中のBINDを一旦停止させ、先ほど確認した引数を用いて新しいバージョンのBINDを起動します。
ここからはrootで、ソースのトップディレクトリから作業してください。
# service named stop Stopping named: . [ OK ] # ./bin/named/named -u named -t /var/named/chroot ### 先ほど確認した引数で新しいBINDを起動します # tail /var/log/messages ### エラーが発生していないかどうか確認します # ./bin/dig/dig @localhost www.google.com a +rec ### 新しいBIND付属のdigコマンドで、正常に名前解決できるか確認します # ./bin/dig/dig @localhost gmo.bis5.net a +norec ### 権威サーバーであれば、このような確認も必要でしょう # ./bin/rndc/rndc ### 新しいBIND付属のrndcが動作するか確認します # ./bin/rndc/rndc status ### rndcでBINDのステータスが取得できるか確認します # ./bin/rndc/rndc reload ### rndc reloadが出来ることも確認しておきます # service named stop ### 確認が終わったら、一旦停止させます |
動作に問題がありましたか?Chroot環境下にファイルが存在しないなどの問題があると正常に起動しません。
make installと動作確認
ここまで確認できたら、make install
でインストールし、動作を確認できればOKです。
パッケージ版のBINDをアンインストールする場合は、/etc/named*, /etc/rndc.key, /etc/init.d/named, /var/namedを念のためバックアップしておきましょう。
# make install # service named start Starting named: [ OK ] # named -v BIND 9.9.3-P2 (Extended Support Version) # dig -v DiG 9.9.3-P2 # rndc status version: 9.9.3-P2 CPUs found: 3 worker threads: 3 UDP listeners per interface: 3 number of zones: 8 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running |
なるほど。DNSは重要ですからね。最後の部分は、ソースで直接インストールするより、checkinstallでRPMを作成するとよいでしょう。
32/64bitの両方の環境があるので、パッケージを作成せずpacoを使って管理しています。checkinstallも便利そうですね!
ピンバック: BIND9は動いているけどtestでエラーがでる | ワインと電子な日々
I read your posnitg and was jealous