BINDのロギング機能を活用する事で、ネームサーバのログ出力から、より細かな情報を得ることができますので、BINDでDNSを運用している方はきちんとロギング機能を理解しておきましょう
|
|
■ロギング機能
BIND には、named.conf に logging ステートメントを記述しておくことでネームサーバのログ出力をより広範に制御することができるようになります。channel
で出力先を選択し、category で出力フォーマットとseverity(重要度)を指示しています。named.conf にはデフォルトでは logging
ステートメントが記述されていませんが、デフォルトでも logging の機能は設定されており、category と channel 共にデフォルト値が存在します。
まず、named.conf に何も設定しなかった時のデフォルトのログ設定を以下に記します。unmatched
は、どの view にもマッチしなかったメッセージのことで、デフォルトでは、null (ログを出力しない)が指定されています。
logging
category "unmatched"
{ "null"; };
category "default"
{ "default_syslog"; "default_debug";
};
}; |
|
以下は、標準で用意されているデフォルトの
channel 設定です。channel 指定には、file、syslog、stderr、null
のいずれかの指定が必要で、file は指定したファイルにログを出力し、syslog はsyslog に、stderr
は標準エラー出力にそれぞれ出力します。
//syslogデーモンに出力する
channel "default_syslog" {
syslog daemon;
severity info;
};
//named.runへ出力する
channel "default_debug" {
file "named.run";
severity dynamic;
};
//標準エラーに出力する
channel "default_stderr" {
stderr;
severity info;
};
//ログを出力しない
channel "null" {
null;
}; |
|
◎ロギングのカテゴリ設定
|
default |
チャンネルが割り当てられていない全てのカテゴリ。 |
|
general |
以下のカテゴリに分類されない、その他全てのメッセージ |
|
database |
named の内部データベースに関するメッセージ。 |
|
security |
要求の承認と拒否に関するメッセージ。 |
|
config |
設定ファイルの処理に関するメッセージ。 |
|
resolver |
名前解決に関するメッセージ。再帰的に問い合わせへの応答も含む。 |
|
xfer-in |
他サーバーから自ホストへのゾーン転送に関するメッセージ。 |
|
xfer-out |
自ホストから他サーバーへのゾーン転送に関するメッセージ。 |
|
notify |
非同期びゾーン更新通知に関するメッセージ。 |
|
client |
クライアントからの要求に関するメッセージ。 |
|
unmatched |
どのview にもマッチしなかったメッセージ。 |
|
network |
ネットワークに関するメッセージ。 |
|
upadate |
動的更新に関するメッセージ。 |
|
queries |
問い合わせのログ。 |
|
dnssec |
DNSSECとTSIGの処理に関するメッセージ。 |
|
lame-servers |
名前解決を試みようとして発見した、間違った設定のサーバーに関するメッセージ。 |
|
◎チャンネル設定の書式
|
file <ファイル名> [ versions <バージョン番号>
] [ size <サイズ指定> ] ;
syslog <機能分類>;
stderr;
null;
[ severity <重要度>;]
[ print-category <真偽値>;]
[ print-severity <真偽値>;]
[ print-time <真偽値>;] |
|
<機能分類> = kern、user、mail、daemon、auth、syslog、lpr、news、uucp、cron、
authpriv、ftp、local0~local7
<重要度> = critical、error、warning、notice、info、debug、dynamic
<真偽値> = yes | no
<サイズ指定> = <数値> [ K | M | G
} |
|
■ログを格納するディレクトリの作成
まず、BIND が出力するログを標準の/var/log/messages ではなく、専用のディレクトリを作成し、その中に格納していくこととします。
# mkdir /var/named/log
# chown named.named /var/named/log |
|
■ロギングの基礎
以下では、BINDに関するログを全て同一ファイルに記録するような設定をしてみます。まず、channel
でチャネル名を任意に定義します。ここでは、"default-log"という名前をつけ、そのファイルを、/var/named/log/default.log
に出力するように指定しています。"version" は、指定した数字の数だけログを保存するという意味で、named
を再起動したり、リロードしたりすることによってログファイルを自動的にローテーションします。ここでは、5
と指定しているのでログ数5つの中でローテーションされます。ログのサイズを指定した場合、ログサイズが最大サイズに達した時点でログの出力を停止します。注意したいのは、指定したサイズに達してもログのローテーションを行わないということです。
次にcategory の設定を行います。ロギングは、channel を定義したからといってログ機能が動作するわけではなく、category
が指定されてはじめてログ出力を行うようになります。以下の例では、"category default
"(上記表参照)の出力を、channel の default-log で定義したとおりにログを出力する、という設定になっています。
◎ログを一括して出力する例
logging {
channel "default-log" {
file "/var/named/log/default.log" versions 5 size 10M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
category default { "default-log"; };
};
|
|
最後に、print について解説します。print-time は、時刻を、severity は重要度を出力し、category
はログカテゴリの表示・非表示を切り替えます。
Jan 04 15:31:55.463
general: debug 1: zone_timer: zone version.bind/CH:
enter |
|
■ロギングの応用例
logging {
channel "default-log" {
file "/var/named/log/default.log" versions 3 size 5M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
channel "xfer-in-log" {
file "/var/named/log/xfer-in.log" versions 3 size 5M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
channel "xfer-out-log" {
file "/var/named/log/xfer-out.log" versions 3 size 5M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
channel "queries-log" {
file "/var/named/log/queries.log" versions 3 size 5M;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default {
"default-log";
"default_syslog";
"default_debug";
"default_stderr";
};
category xfer-in {
"xfer-in-log";
};
category xfer-out {
"xfer-out-log";
};
category queries { "queries-log"; };
category lame-servers { null; };
};
|
|
channel や category は複数指定できるため、上記のような設定にして、ログを役割ごとに分散させることもできます。まず、
category
default では、同じデフォルトでも、ログレベル(severity)の異なるログを出力しています。ひとつめとして、ログレベルがdebug
の default-all を指定し、
channel "default-log"で定義したログ出力方法に従います。default_syslog
とdefault_debug、default_stderr では、BINDの標準出力場所へ出力します。default_syslog
ならば、/var/log/messages に出力されます。けれども、default-all よりは詳細なログを出力しません。
次に、
category xfer-in と
category xfer-out です。category
xfer-in では、他サーバーから自ホストへのゾーン転送を行った際のログを出力し、その出力場所として、
channel
"xfer-in-log" で指定した場所に従います。同様に、自ホストから他サーバーへのゾーン転送に関するメッセージは、
channel
"xfer-out-log"に従ってログが出力されます。つまり、xfer-in.log
と xfer-out.log のふたつのログが作成されることになります。
category queries は、問い合わせに関するログを出力します。これを指定することで、攻撃元を容易に特定することもできるようになります。ただし、全クエリーを出力するため、指定する場合はサーバーのリソース消費にも気を配りましょう。
category lame-servers は誤った設定がなされたサーバーに関する逆引きエラーを出力しないように、null
を指定しています。