DNSサーバをbindで構築した際に、クエリログ(query log)を出力する設定をします。その際、ログに記録されている内容が理解できていないと設定した意味がなくなります。そこで、クエリログに出力されている情報を調査しましたので、その見方について参考にしてください。
bindのログを出力するための設定
bindでログを出力する設定については、こちらの記事にございます。具体的には、/etc/named.confに「logging」の「channel “query-log”」の部分が該当します。
設定ができていない人は、ログが出力されませんので、まずは設定を実施ください。
ログファイルの場所と記録されている内容
ここでは、上記のログ出力の設定を実施している前提で進めます。
うまく設定ができていれば、chroot環境では、/var/named/chroot/var/log/query.log にログが出力されています。query.logファイルを開いて中身を確認すると
18-May-2023 22:21:39.938 queries: info: client @0x7fd34c6e2710 192.168.0.23#33210 (vhost01.hogehoge.jp): view internal: query: vhost01.hogehoge.jp IN A +E(0)K (192.168.0.23)
といった内容のログが記録されています。
ログに出力される各パラメータの説明
では、上記のログを例に、少しずつ解説していきます。
18-May-2023 22:21:39.938 queries: info:
行の先頭から、年月日 時間 カテゴリ ログレベル と続きます。このあたりは知らなくても見てわかるレベルかと思います。
client @0x7fd34c6e2710 192.168.0.23#33210 (vhost01.hogehoge.jp)
次に、DNSサーバにクエリをしてきたクライアント(client)情報が記載されています。@で始まっているのは、クライアントオブジェクトの識別子を16進数で表示しています。特定のクライアントからのログを調べたい場合、こちらをキーに検索すれば良いです。
次に、DNSサーバにクエリをしてきたクライアントのIPアドレスと、#の次はポート番号になります。
その次のかっこの中身は、問い合わせしたクエリ情報です。
view internal: query: vhost01.hogehoge.jp IN A +E(0)K (192.168.0.23)
view internalは、named.confに設定しているview名が表示されており、問い合わせしたクエリ情報が再度記録されて、どのレコード(ここではAレコード)を問い合わせしたかが記録されています。
次が、このページで一番説明したかった部分になります。暗号のようですが意外とこの部分を知ることがログを解析するうえで重要になります。以下、詳細を記載します。
+ | 再帰問い合わせされたかどうか |
- | 反復問い合わせされたかどうか |
S | クエリが署名されているかどうか |
E | EDNS(512バイトよりも大きなメッセージサイズをUDPで扱う。DNSSECやIPv6に対応させる場合EDNS0の対応が必須)が使用されているかどうか。かっこ内の数字はEDNS バージョン番号 |
T | TCP が使用されたかどうか |
D | DO (DNSSEC Ok) が設定されたかどうか |
C | CD (Checking Disabled=DNSSEC検証を行わない) が設定されたかどうか |
V | 有効な DNS サーバー COOKIE が受信されたかどうか |
K | 有効なサーバー COOKIE のない DNS COOKIE オプションが存在したかどうか |
ここで、出てきた DNS COOKIE ですが、セキュリティーの仕組みです。 クライアントとサーバー間のリクエストとレスポンスに、軽微なデータ(COOKIE)を埋め込むことにより、DNSトランザクションの簡易的な認証を行います。 これを活用することで、DNSアンプ攻撃、DDoS攻撃、キャッシュポイズニング攻撃の対策になるとの事です。
一番最後のかっこの中身は、DNSサーバのIPアドレスが記載されています。
このあたりの具体的な実行例は、こちらに紹介しておりますので、もしよろしければ合わせて参照ください。
参考情報
私は、以下のbindのドキュメント(英語)から調査しました。具体的に、以下の部分が該当します。
The query log entry first reports a client object identifier in @0x<hexadecimal-number> format. Next, it reports the client’s IP address and port number, and the query name, class, and type. Next, it reports whether the Recursion Desired flag was set (+ if set, – if not set), whether the query was signed (S), whether EDNS was in use along with the EDNS version number (E(#)), whether TCP was used (T), whether DO (DNSSEC Ok) was set (D), whether CD (Checking Disabled) was set (C), whether a valid DNS Server COOKIE was received (V), and whether a DNS COOKIE option without a valid Server COOKIE was present (K). After this, the destination address the query was sent to is reported. Finally, if any CLIENT-SUBNET option was present in the client query, it is included in square brackets in the format [ECS address/source/scope].
英語が得意ではないので、解釈が誤っていたら申し訳ございません。
今回はここまでです。最後までお読みいただきありがとうございました。