我可以在 Bind 9 上记录特定查询吗?

我可以在 Bind 9 上记录特定查询吗?

我想知道哪些主机在什么时间发出了特定的 DNS 查询。有没有办法在 Bind 9 上获取如此具体的日志?

例如,我可能想要记录所有A查询xyzzy.net

答案1

将正确类型的通道节放入 named.conf 中的 logs{} 块中。

        channel "client" {
            file "/var/log/client_named.log";
            severity info;
            print-time yes;
        };

可能会奏效。这将为您提供以下类型的数据:

22-Apr-2011 12:06:53.294 client xxx.xxx.xxx.xxx#56202: view external-in: query: st.in.multi.surbl.org IN A +

编辑:警告 - 启用此类日志记录将会非常快速地生成非常大的日志文件,并且很容易在没有某种日志轮换/压缩的情况下填满您的磁盘,并且可能最适合简短的数据收集会话,而不是永久配置。

如果这(以及对生成的日志文件进行后处理)太多了,您可以使用 tcpdump 之类的工具来执行此操作。

tcpdump -i eth0 dst port 53 | egrep 'A' | egrep 'xyyzyy.com'

或者更好的是,编写一个过滤器来匹配你想要过滤的 DNS 数据包的正确位(在本例中为 A? 类型)

不过,更简单的办法可能是使用像 dnstop 这样的工具。 dnstop 网页将为您完成所有协议解码,并且IIRC您可以使用-n过滤其输出以将其捕获的内容限制在单个域中。

答案2

不,日志记录语句不支持过滤器。您可以将绑定日志发送到 syslog,然后仅过滤 syslog 规则中的客户端 IP 和 A 记录。这可能是最简单的方法。

相关内容