阻止 BIND DNS 缓存上配置错误的 DNS 条目

阻止 BIND DNS 缓存上配置错误的 DNS 条目

我正在运行一个带有自己的 BIND DNS 缓存的网络爬虫。我们的代码使用我们的 DNS 缓存进行解析,并使用 Python 的请求库发出 GET 请求。

问题在于许多 FQDN 配置错误,它们指向 RFC1918 IP 地址或环回 IP,例如127.0.0.110.0.0.0/8。结果我们的爬虫尝试连接这些 IP,最后得到了来自我们数据中心的扫描报告。

我们对爬虫进行了更改,现在它首先解析 FQDN 的 IP,如果 IP 位于私有/环回/保留范围内,则跳过它。

使用 tcpdump 嗅探后,我发现仍有流量流向私有 IP 地址。我猜想这是由于 HTTP 重定向而发生的,因为我们检查原始 FQDN,但我们不检查重定向的主机,因为这部分发生在 Python 的请求库中。

BIND 是否有任何选项可以阻止解析私有、环回或保留 IP 地址?我可以将其设置为返回某种“未解析”错误吗?

编辑:我尝试将 BIND 缓存转储到文件并检查它,现在我确定这是由于 HTTP 重定向而发生的,但更改代码并不容易,而且我正在寻找像配置 BIND 这样的快捷方式,否则我会在防火墙上阻止它们。

答案1

使用 BIND 您可以使用响应政策区 (RPZ)阻止解析指向特定地址的地址记录( A/ )的功能。AAAA

具体来说反渗透条目类型相关:

反渗透

IP 触发器是响应的 ANSWER 部分中的 A 或 AAAA 记录中的 IP 地址。它们的编码方式与客户端 IP 触发器类似,只是作为rpz-ip

作为示例用例,手册使用了以下内容:

; IP policy records that rewrite all responses containing A records in 127/8
;       except 127.0.0.1
8.0.0.0.127.rpz-ip      CNAME   .
32.1.0.0.127.rpz-ip     CNAME   rpz-passthru.

关于配置的总体思路在手册中总结如下:

例如,您可以使用此选项语句

response-policy { zone "badlist"; };

和这个区域声明

zone "badlist" {type master; file "master/badlist"; allow-query {none;}; };

使用这个区域文件

$TTL 1H 
@                       SOA LOCALHOST. named-mgr.example.com    (1 1h 15m 30d 2h)
                        NS  LOCALHOST.
; [snip]

; IP policy records that rewrite all responses containing A records in 127/8
;       except 127.0.0.1
8.0.0.0.127.rpz-ip      CNAME   .
32.1.0.0.127.rpz-ip     CNAME   rpz-passthru.

; [snip]


请仔细阅读详细信息以了解整体设置以及 RPZ 区域内相当具体的语义!(它具有正常的区域语法,但正如您所见,一些特殊名称具有非常具体的含义。)

答案2

我认为它们的发生是因为 HTTP 重定向,因为我们检查了原始 FQDN,但我们没有检查重定向的主机,因为这部分发生在 Python 的请求库中。

我希望您在更改代码后清除了 BIND 的 DNS 缓存。继续...

杀手在于说“我以为”。你需要确认一下。首先,使用 检查 BIND 缓存中是否有任何私有 IP 地址rndc dumpdb。查看该文件以查找违规者。

如果有:刷新缓存。看看它们是否会恢复。我不确定私有 IP 地址是否会因为 HTTP 重定向而出现在缓存中。对于一个可公开访问的网站来说,出现许多 HTTP 重定向实例是非常不寻常的,这些重定向会将访问者带到解析为 RFC 1918 IP 地址的主机名。公共区域中的私有 IP 地址...不寒而栗

如果没有:然后,发往私有 IP 地址的流量会从其他地方进入应用程序。可能是某种应用程序缓存。可能是内存中您不知道的某些东西。可能是完全不同的进程,也许根本不是您的应用程序。

BIND 是否有任何选项可以阻止解析私有、环回或保留 IP 地址?我可以将其设置为返回某种“未解析”错误吗?

不会。BIND 会解析,因此在您的场景中,您有一个理论上的竞争条件:您不需要该 IP 地址,但要找出它是否是您不想要的 IP 地址,您必须获取它。您想要的是某种反向 DNS RPZ,但它并不存在。

我错了。是的,正如杰出的 Håkan Lindqvist 指出的那样,您可能能够使用 RPZ-IP。看看这个:http://ftp.isc.org/isc/bind9/cur/9.10/doc/arm/Bv9ARM.ch06.html#id2589969赞同他的回答

在这种情况下,您需要将逻辑拉入应用程序,并根据本地缓存更仔细地检查每个主机名,并禁止爬虫程序访问 RFC 1918 地址。

让我们更深入地分析一下你所说的内容:

...我们不检查重定向的主机...

因此,检查重定向的主机,问题就得到了解决,无需过度工程。=)

相关内容