我使用自己的BIND DNScaching运行一个networking爬虫。 我们的代码使用我们的DNScaching解决,并使用Python的请求库进行GET请求。
问题是许多FQDNconfiguration错误,并指向RFC1918 IP地址或环回IP,如127.0.0.1或10.0.0.0/8 。 因此,我们的抓取工具正试图连接这些IP,并以来自数据中心的扫描报告结束。
我们对爬虫进行了更改,现在它首先parsing了FQDN的IP,如果IP处于私有/回送/保留范围内,则跳过它。
在用tcpdump嗅探之后,我发现仍然有stream量进入私有IP地址。 我想这是因为HTTPredirect,因为我们检查原始的FQDN,但是我们不检查redirect的主机,因为这部分发生在Python的请求库中。
有没有BIND的选项来阻止解决专用,回送或保留的IP地址? 我可以设置它返回某种“未解决”的错误?
编辑:我试图转储BINDcaching文件,并检查它,现在我确定这是因为HTTPredirect,但它不是很容易改变代码,我正在寻找一个快捷方式configurationBIND或我会阻止他们在防火墙。
使用BIND,您可以使用响应策略区域(RPZ)function来阻止指向某些地址的地址logging( A / AAAA )的parsing。
具体而言, RPZ-IPtypes的条目是相关的:
RPZ-IP
IP触发器是响应的“答案”部分中的A或AAAAlogging中的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.
关于手册中概述的configuration的总体思路是:
例如,你可以使用这个选项语句
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区域内相当具体的语义! (它有正常的区域语法,但你可以看到一些特殊的名字有非常具体的含义。)
我想这是因为HTTPredirect,因为我们检查原始的FQDN,但是我们不检查redirect的主机,因为这部分发生在Python的请求库中。
我希望看到你改变你的代码后,刷新了BIND的DNScaching。 继续…
杀手在说“我想”。 你需要确定。 首先,用rndc dumpdb检查BINDcaching中是否有私有IP地址。 通过该文件查找罪犯。
如果有:刷新caching。 看看他们是否回来。 我不确定私人IP地址是否会作为HTTPredirect的结果存在于您的caching中。 对于一个可公开访问的网站来说,有很多HTTPredirect实例将访问者带入一个parsing为RFC 1918 IP地址的主机名,这是非常罕见的。 在公共区域私人IP地址… 不寒而栗 。
如果没有:那么到私有IP地址的stream量正在进入其他地方的应用程序。 也许是某种应用程序caching。 记忆中的东西,你不知道。 也许是一个完全不同的过程,毕竟这不是你的应用程序。
有没有BIND的选项来阻止解决专用,回送或保留的IP地址? 我可以设置它返回某种“未解决”的错误?
号码BIND解决,所以在你的情况下,你有一个理论上的竞争条件在哪里:你不需要IP地址,但要找出它是否是你不想要的IP地址,你必须得到它。 你想要的是一个反向的DNS RPZ,它不存在。
我错了。 是的,你可能会使用RPZ-IP作为杰出的HåkanLindqvist指出的。 看看这个: http : //ftp.isc.org/isc/bind9/cur/9.10/doc/arm/Bv9ARM.ch06.html#id2589969也upvote他的答案 。
在这种情况下,您需要将逻辑拉入应用程序,并更仔细地检查每个主机名,以防止本地caching,并且不允许抓取工具转到RFC 1918地址。
让我们来分解一下你所说的话:
…我们不检查redirect的主机…
所以检查redirect的主机,解决问题没有任何过度的工程。 =)