无意中,我运行的 bind9 服务器是一个开放解析器。哎呀。
现在已经过去几个月了,但递归查询仍然在传入。如果我的查询看起来不像这样,isc.org
我不会介意:/var/log/syslog
Jul 6 01:10:23 servername last message repeated 6 times
Jul 6 01:10:23 servername named[2580]: client YYY.YY.YYY.YYY#25345: query (cache) 'isc.org/ANY/IN' denied
Jul 6 01:10:23 servername named[2580]: client ZZZ.ZZ.ZZZ.ZZ#25345: query (cache) 'isc.org/ANY/IN' denied
Jul 6 01:10:23 servername last message repeated 7 times
Jul 6 01:10:23 servername named[2580]: client AAA.AAA.A.AAA#25345: query (cache) 'isc.org/ANY/IN' denied
Jul 6 01:10:23 servername named[2580]: client BBB.BB.BB.BBB#25345: query (cache) 'isc.org/ANY/IN' denied
Jul 6 01:10:23 servername last message repeated 6 times
(有人可能会觉得上述消息都在一秒钟内出现很有趣......但我不再这么认为了。)
这确实使得捕捉系统上其他服务可能报告的任何实际错误变得非常困难。
我希望 bind9 不再记录这些消息。我祈祷能够实现仅有的这些消息从日志中消失。
我可以用什么方式来禁止递归消息出现在系统日志(或其他日志)中?
servername:/etc/bind9# named -V
BIND 9.8.4-rpz2+rl005.12-P1 built with '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc/bind' '--localstatedir=/var' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' '--with-geoip=/usr' '--enable-ipv6' 'CFLAGS=-fno-strict-aliasing -DDIG_SIGCHASE -O2'
using OpenSSL version: OpenSSL 1.0.1c 10 May 2012
using libxml2 version: 2.8.0
servernane:/etc/bind9# uname -a
Linux servername 3.2.0-4-686-pae #1 SMP Debian 3.2.35-2 i686 GNU/Linux
澄清:
我对......感兴趣更详细如何沉默的例子只是“拒绝递归”类型消息。
答案1
关于禁用所有递归查询的绑定错误日志记录,例如“查询(缓存)‘theswat.net/ANY/IN’被拒绝”
/etc/named.conf 中的以下内容将这些重定向到 /var/named/data/named.security,滚动日志的总大小限制为 15mbytes。请注意,安全类别仅为“批准和拒绝请求”。
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
// Redirect all of those 'denied' logs for non-existing domains or external ones (we are 'recursion no;')
// logs to /var/named/data/named.security, up to 3 files of 5mbytes each
// independent hack_detect processes can then scan for flooders and known abusers and block their IPs
channel hd_security {
file "data/named.security" versions 3 size 5m;
print-time yes;
print-severity yes;
print-category yes;
};
category security { hd_security; };
};
答案2
请参阅 BIND 管理员参考手册(又称“ARM”,包含在您的源代码分发中,或者查阅ISC知识库中的链接表找到特定于您的 BIND 版本的版本)并转到涵盖日志记录的第 6.2.10 节。
BIND 错误消息会以各种类别发出,您可以根据类别指定其目的地。虽然我不清楚,必须检查来源才能确切知道您想要抑制的错误消息属于哪个类别,但一旦您确定了类别(通过检查来源或反复试验),您就可以使用 ARM 中显示的示例语法抑制该类别的错误消息,即:
To discard all messages in a category, specify the null channel:
category xfer-out { null; };
category notify { null; };
我将从“解析器”类别开始,尽管因为它是一条拒绝消息,它可能属于“安全”——实际上您所描述的区域介于几种可能的类别之间(这就是为什么我不能脱口而出地说哪个是正确的..)如果您不尝试为客户端执行递归,“解析器”听起来像是您不希望发现有用的消息。
答案3
是的,可以静默绑定。检查您的配置以了解类别和频道定义。如果这出现在您的系统日志中,则找到提及系统日志的频道。还有一个内置的 default_syslog 频道。然后找到记录到这些频道的类别。注释掉该类别或将其重定向到其他频道。您可能希望在测试时重定向到日志。
更多详细信息请参见此处:http://www.zytrax.com/books/dns/ch7/logging.html
答案4
对于那些使用 syslog 并且不想丢弃所有内容的人来说。从技术上讲,您不想将所有内容都发送到 NULL。这里仍会记录 WARNING 和 CRITICAL。
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
channel syslog {
syslog;
severity warning;
print-severity yes;
print-category yes;
};
category default{
syslog;
};
};