bindサーバを安全に運用するためのノウハウ集

ここでは、bindでDNSサーバを運用する際に、気を付けなければいけない点や動作確認の方法などミスなく安全に運用するためのノウハウを紹介します。ご利用の環境によって、使えるノウハウになるか不明ですが、こちらで構築したDNSサーバをベースに紹介いたします。

セカンダリサーバのnamed.conf

セカンダリサーバのnamed.confは以下の通り設定します。

設定が終わったら、サービスを再起動して設定を反映させます。

セカンダリサーバの動作確認はゾーンファイルのコピーが存在するか

セカンダリサーバが問題なく設定できているのかは、ゾーンファイルがプライマリサーバからコピーされていることを確認すればよいです。

具体的には、セカンダリサーバにあるゾーンファイルを一旦削除して、bindのサービスを再起動すると、プライマリサーバよりコピーされ、ファイルが存在することが確認できればOKです。初回はゾーンファイルは無いと思いますので、サービス再起動後に生成されていればOKです。

IPv4のみ対応するオプションの設定

のファイルに、

OPTIONS="-4"

を追記します。

bindのログファイルのリンク作成

実体は、 /var/named/chroot/var/log/ にありますが、/var/log/named にシンボリックリンクを作成し、他のログと同じ場所にあるように設定しておきます。

rndcコマンドによるゾーンファイルの修正反映

今回作成した環境は、viewでinternalとexternalを分けているので、それぞれを指定する必要があります。

「in external」がないと、internalとどっちのゾーンファイルを更新するのか不明なためエラーがでますので、ご注意ください。

その他トラブルシューティング

rndc コマンドでサービスの再読み込みをしたのち、名前解決が出来ない!
namedからSERVFAILが帰ってきまして、ログを見たら以下のログが出ていました。
(この時は、zoneファイルのパスを変更した後)

22-Nov-2022 18:09:08.210 security: info: client @0x7ff0500a2600 192.168.0.23#47989 (dnstest.example.jp): view external: query ‘dnstest.example.jp/A/IN’ denied
22-Nov-2022 18:09:08.210 query-errors: info: client @0x7ff0500a2600 192.168.0.23#47989 (dnstest.example.jp): view external: query failed (REFUSED) for dnstest.example.jp/IN/A at ../../../bin/named/query.c:7311

ZONEファイルのジャーナルファイル(.jnl)があって、そいつと編集したZONEとの関係がおかしくなってしまったようなのです。

サービスの再起動、

# systecctl stop named-chroot
# systecctl start named-chroot

で問題が解消された。

パッチ適応時にも同じような現象が再現した。その時、よりセキュアにしようと、

named.confファイル内で、
  allow-query { none; } 
にしていたが、こちらを
  allow-query { any; } 
に戻すと問題が解消された。

上記再起動を実施しても解消せず、焦ったが、どうも allow-query { none; } ということ自体がイレギュラーな設定値になると思われる。

今回はここまでです。最後までお読みいただきありがとうございました。