bind ゾーンファイル “already in use” エラーの対応方法

2016/01/20 オープンソース

oss-bind
このところネームサービスとして代表的なアプリケーションである”bind”のセキュリティホールが多いそれも緊急度の高い内容で、殆どがサービス停止してしまう可能性があるものばかり。

スポンサーリンク


ひと月の間に緊急レベルのセキュリティホール報告が二つもありました。通常だと、bindを利用しない方向へ動くことも考えますが、bind以外だと、ネームサービスというのは、殆ど選択肢がない。その為、bindを利用しているサーバーは多いはずです。実際にネームサービスでbind以外を利用している環境を見たことがありません。

今回は、恐らくレアケースですが、上記の脆弱性対応として、実際にbindをバージョンアップを行った際に発生した、bindが起動しない問題について紹介したいと思います。報告されたbindの脆弱性は、以下の2点

(緊急)BIND 9.xの脆弱性(DNSサービスの停止)(2015年7月31日更新)
(緊急)BIND 9.10.2/9.9.7の脆弱性(DNSサービスの停止)(2015年9月3日公開)

何れもサービス停止が発生する可能性が高い脆弱性です。

上記の問題を受け、9.9.6から9.9.7にバージョンアップした際の問題について記載していきます。何故、9.9.7なのか。というと、セキュリティ対策が完了しているバージョンが9.9.7以降になってしまい、それ以外のバージョンは、対策についてはベンダ次第という状況のためです。
RPMなどのパッケージからインストールしている環境では、OSベンダからマイナーリビジョンのパッケージがリリースされているようですので、ちゃっちゃっとアップデートして完了です。

今回の環境はbindはソースからコンパイルしてインストールを行っています。9.9.6だと、現状はP2が最新ですが、対策がされたP3はリリースされないようなので、ソースからbindをインストールしている場合は、9.9.7へのアップデートが必須となります。

1.bindがバージョンアップ後に起動しなくなった。

セキュリティホール対策として、bindをバージョンアップ。9.9.6から9.9.7-P3(2015/09時点での最新版)へ。これはbindを運用している環境なら、良く見かける風景。。

でも今回は、バージョンアップ後に大きな問題が発生。なんと、bindが起動しなくなりました。今までもリビジョンをアップしてのバージョンアップは何度も実施していますが、bindが起動しなくなるのは予想外。(昔にsolaris環境で一度だけ、起動しなくなったことがありました。nodファイルがないとか。)

それも全ての環境で起動しなくなるわけではなく、正常に起動する環境もあります。
bindが停止したままだと問題なので、一旦、バックアップから元の環境を復旧し、bindを起動させる。

その後、named.logを見ていたところ、一部のconfigを読み込んだところでエラーが出ていることを発見しました。configをload出来ずにbindの起動が停止していたところまでは分かりましたので、ログの詳細を確認することに。

2.bindのエラーログ

bindのログには以下のエラーが出力されていました。

slaveのファイルを読み込もうとして、失敗しています。
同様のログが、いくつか出力され、最終的に、以下のようにbindの起動に失敗しています。

バージョンアップしても問題がない、他の環境を見ると、上記のエラーは出力されていません。
9.9.6とconfigは変えていないことを考えると、bindの9.9.7で何等かの仕様変更があったと考えられます。
まずはエラーログを元に、調査を行いました。

3.エラーの内容

今回、全ての環境に発生している問題ではないせいか、思った以上に情報が少ない。
googleのフォーラムに該当すると思われる情報がありました。
BIND 9.9.7 complains and dies if you use same zonefile for multiple zones
この内容を見る限り、slaveゾーンやDDNSのゾーンファイルは、bindのmultiple(view)機能を利用している場合、異なるviewで同じファイルを参照するように設定すると、9.9.7からエラーが出ると記載されています。
named.confを参照すると、確かに異なるviewである “test”と”global”で同じconfigをincludeしています。
includeしているファイルは同じなので、結果として、同じゾーンファイルを参照していることになります。
※本環境では、named.confにゾーンファイル名を記載せず、別ファイルを作成して、includeしています。(複数のゾーンがあるため、整理をする意味でこのような運用になっている)

named.conf抜粋

test.conf内の、該当するゾーンファイルのエラー部分は以下のように設定されています。

上記だと、異なるviewで同じslaveファイルを読み込む形となり、既に読み込まれているというエラーが出力されたと思われます。
正常にbindが起動した環境では viewステートメントを利用していません。
viewステートメントを利用して、異なるviewで同じslaveのゾーンファイルを読み込んだ時に発生するエラーということが分かりました。

4.’writeable file’ ‘already in use’ エラーへの対策

writeable file~エラーへの対策として、slaveのゾーンファイル名を異なる名前で指定するか、別のフォルダに保存された同名のslaveファイルを、test.confで指定する以外になさそうです。
ゾーンファイルを整理して、viewステートメントを利用しない方法もあるかと思いますが、ここは別ベンダの作業分なので、余り変更したくない。
上記のような理由からslaveファイルを別フォルダに保存する形へ設定変更しました。
ちなみにslaveファイルは、named.confと同じパスにslaveフォルダがあり、その中に保存されています。
具体的には手順は以下のようになります。

4-1.named.confの変更

named.confに設定されているviewステートメントで、includeするファイル名を変更します。
global側のファイルには”global-“を追加しました。
(変更前)

(変更後)

4-2.global-test.confの作成

既存のファイルである、test.confをglobal-test.confという名前でコピーします。

作成したglobal-test.confを編集して、別のフォルダにゾーンファイルが作成されるようにします。
globa-test.confの抜粋

(変更前)

(変更後)

4-3.slave_globalフォルダの作成(又はシンボリックリンク)

global用のslaveゾーンファイルが保存されるように、slave_globalフォルダを作成します。
(フォルダ名は任意)
因みにシンボリックリンクで、既存のslaveフォルダにリンクを設定するだけでも大丈夫でした。

シンボリックリンクを利用する場合は以下のように設定します。

ここまでの作業で、bindは起動するようになります。

namedが起動していることを確認して、ログに問題がなければ、対応は完了です。

5.まとめ

リリースノートを見ていると、9.9.6以前でもこのようなチェックはあったが、bindは起動したようです。9.9.7以降からチェックに失敗すると、bindが起動しないように変更されたとのこと。

viewでこのような運用を行っている環境は余りないのかもしれませんが、バージョンアップ後にbindが起動しないと、心臓に悪い影響がありますので、備忘録として記載しておきます。
弊社ではbindなどオープンソースによるインターネットサービスの構築を行っております。
bind以外でもバージョンアップや運用でお悩みの方、お気軽にお問い合わせ下さい。

システムでお困りのお客様

もし、貴社で、

  • サポート切れのサーバやネットワーク機器の入れ替えをしたいが、どうしたらよいかわからない
  • サーバやネットワークの管理を行う社員がいないため困っている
  • 業務に利用している機器のセキュリティが大丈夫か心配
  • 機器の障害で、業務への影響が発生している
  • 社内の要望に対して、どのようなシステムを導入したらよいか解らない

など、サーバーやネットワーク、セキュリティでお悩みの方、新規のシステム導入を検討中の方。
多くのシステム構築を行い、成功させてきた実績をもつ弊社が、その問題を解決します。
お気軽にお問い合わせ頂き、貴社の問題解決にお役立てください。

お問い合わせ・ご相談はこちらから

Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

関連する情報

oss-awstats

シンプルなアクセス解析が出力できるオープンソースソフトウェア awstats

Webサイトのアクセス解析というと、今はGoogle Analytics を利用しているユーザー

oss-apache

攻撃を受ける前に! Apache インストール後に必要な8つの変更点

Apacheはウェブサーバーの代表的なアプリケーションで、現在、動作しているウェブサーバーでのシ

squid-ie6-problem

プロキシサーバー経由でファイルがダウンロード出来ない問題への対応

先日、弊社のお客様より、ブラウザを利用して大きい容量のファイルがダウンロードできないというお問い

450-smtp-error

SMTP 450 Client host rejected: cannot find your hostname エラー

SMTPのスパム対策はスパマーとブロックする側の鬩ぎあいが続いています。ブロックする側は当然スパ

postfix-security-01

5分間でPostfixのセキュリティを少し向上させる

一昔前はsendmailが良く利用されていました。メールを送信するためのサーバ側プログラム(通常

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク