我的 ISP 允许我运行 DNS 服务器,只要它不响应非授权查询即可。这意味着没有任何响应。我已将其配置为拒绝非授权查询,如下所示;
> tweakers.net
Server: my.server.net
Address: my.ip#53
** server can't find tweakers.net: REFUSED
但显然这已经不够了。它需要简单地不发送任何响应。这可能吗?
这是我当前的选项文件;
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { internal; };
allow-transfer { *secondary dns ip*; };
dnssec-enable yes;
dnssec-validation yes;
auth-nxdomain no; # conform to RFC1035
filter-aaaa-on-v4 yes;
};
我的内部 ACL
acl internal {
192.168.40.0/24;
127.0.0.1;
10.0.3.1/24;
};
也许我没有在谷歌上搜索正确的东西,但我找不到这样的选择。
答案1
您需要禁用递归。
这将阻止它响应非权威区域的查询。
但它仍会以 SERVFAIL 做出响应。
答案2
在这里找到了一个 iptables 解决方案。Serverfault 上发布了类似的问题。 https://serverfault.com/questions/438515/bind-blackhole-for-invalid-recursive-queries
没有办法使用 Bind 来实现这一点。但是,您可以使用 iptables 防火墙规则来阻止对所有递归查询的响应。
答案3
和你一样,我不喜欢我的服务器受到 DDOS 攻击,即使它只响应 30 字节的小数据包。此外,由于某些原因,我无法使用 iptables 来阻止欺骗请求。服务器漏洞在 3 个月前就已修复,但僵尸网络仍然会向服务器发送欺骗请求。
因此,您可以使用这个简单的补丁来不发送 REFUSED 响应(请求将被丢弃):
--- bind9-9.9.5.dfsg/bin/named/query.c.orig Thu Aug 6 21:56:57 2020
+++ bind9-9.9.5.dfsg/bin/named/query.c Thu Aug 6 22:08:15 2020
@@ -1038,7 +1038,7 @@
sizeof(msg));
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
NS_LOGMODULE_QUERY, ISC_LOG_INFO,
- "%s denied", msg);
+ "%s dropped", msg);
}
/*
* We've now evaluated the view's query ACL, and
@@ -5809,8 +5809,9 @@
} else
inc_stats(client, dns_nsstatscounter_authrej);
if (!PARTIALANSWER(client))
- QUERY_ERROR(DNS_R_REFUSED);
- } else
+ // QUERY_ERROR(DNS_R_REFUSED);
+ QUERY_ERROR(DNS_R_DROP);
+ } else
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
# diff -u query.c.orig query.c
...结果,你会得到像这样的漂亮日志:
Aug 6 21:39:29 topor named[2652]: client 78.180.51.241#43072 (.): query (cache) './ANY/IN' dropped
Aug 6 21:40:00 topor last message repeated 485 times
如果查询来自未经授权的网络/不受支持的域,则不会有“REFUSED”答复。