用于将大量域名和一些 TLD 列入黑名单的 DNS 服务器

用于将大量域名和一些 TLD 列入黑名单的 DNS 服务器

我正在尝试为我的局域网设置一个基本的 DNS 服务器,该服务器能够放入 nullroute 或 127.0.0.1 多个域。

我想要阻止的域来自列表,但我还想使用正则表达式阻止一些域(这是我的设置必须的)。

我用于执行此业务的候选软件似乎是 Unbound,这是一个具有各种有用功能的递归缓存安全 DNS 服务器。

然而Unbound似乎不支持任何正则表达式!

此外,Unbound 在区域重复方面非常挑剔。我的域列表是由许多混合源构建的,因此我可以使用一些脚本过滤掉许多重复项,但也可以使用列表中的域来过滤掉,例如:

aaah.very.this.com

但是也

非常.this.com

这会导致 Unbound 因错误而尖叫,因为存在区域重复。

虽然这是一个小问题,我可以通过更好地清理域列表来删除它,但我的主要问题是缺乏用于处理域请求的正则表达式。

我可以以某种方式阻止所有 *.com 或 *.biz 或类似的东西吗?

[\w\.\-]+.com A 127.0.0.1
[\w\.\-]+.com AAAA ::1

我的正则表达式是一个例子,我可以使用更复杂的正则表达式......

奖金

我可以做一些更令人讨厌的事情吗?是否所有指向 nullroute 或 127.0.0.1 且只有域白名单的内容都可以通过转发到外部 DNS 来解析?

如果回复,请不要忘记这个额外的问题,因为我很想知道答案。

我可以去做什么? Bind9、dnsmasq、未绑定、pdns-recursor...

答案1

在 DNS 服务级别拦截域/请求或将 IP netblocks 路由重定向到 127.0.0.1/null 路由是两个截然不同的事情。

从我的角度来看,DNS 级别更高效,更节省资源。

在 IP 级别/空路由阻塞更有效,但管理起来更麻烦,并且在更广泛的范围内使用时,CPU 使用率稍高。

请记住,在 DNS 级别使用黑名单通常可以到达数十万范围内的名称,并且拥有如此大的路由表是不可行的。

我自己也研究过通过 dnsmasq 或 BIND 列入黑名单。我使用 DNS 黑名单来屏蔽广告、恶意软件,并阻止我的智能电视回拨(LG 网站)。

我最终在 BIND 中使用响应策略区域,因为它确实允许一些简单的正则表达式,即名称末尾的 *,这大大减少了黑名单的大小。DNS 响应策略区域

请记住,BIND 中的 RPZ 从 9.8+ BIND 开始受支持,任何现代 Linux 发行版都应该如此。

由于我配置了 RPZ 功能,因此 BIND DNS 服务器简单地回答与字符串/正则表达式匹配的域/DNS 名称不存在。所有其他不匹配的名称均通过常规流程解决。

作为我的几行的简短示例/etc/bind/rpz.db

*.ad.lgappstv.com CNAME .
*.yumenetworks.com CNAME .
*.smartclip.net CNAME .
*.smartshare.lgtvsdp.com CNAME .
*.ibis.lgappstv.com CNAME .
*.doubleclick.net CNAME .
*.l.doubleclick.net CNAME .
*.302br.net CNAME .
*.liveadvert.com CNAME .
*.easysuperdownload-1.com CNAME .
*.easysuperdownload-2.com CNAME .
*.itrackpop.com CNAME .

使用你的例子:

*.this.com CNAME .
*.biz CNAME .

请注意,阻止整个 TLD 可能不是最好的主意。

BIND 不像 Unbound 对重复那么挑剔。它将允许 aaaa.this.com 和 this.com;但是,它不允许 this.com 被定义多次。

至于RPZ本身的设置,我会参考我在Unix和Linux上这个问题的回答Bind9 的大区域文件:广告拦截

对于使用树莓派 PI 的现成类似项目,请参阅:Pi-Hole:互联网广告的黑洞该项目还将引导您访问一些已知的免费黑名单。

https://github.com/pi-hole/pi-hole/blob/master/adlists.default

https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

# Other lists we consider safe:
http://adblock.gjtech.net/?format=unix-hosts
http://mirror1.malwaredomains.com/files/justdomains
http://sysctl.org/cameleon/hosts
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt

# hosts-file.net list. Updated frequently, but has been known to block legitimate sites.
http://hosts-file.net/ad_servers.txt

# Mahakala list. Has been known to block legitimage domains including the entire .com range.
# Warning: Due to the sheer size of this list, the web admin console will be unresponsive.
#http://adblock.mahakala.is/

# ADZHOSTS list. Has been known to block legitimate domains
#http://optimate.dl.sourceforge.net/project/adzhosts/HOSTS.txt

# Windows 10 telemetry list - warning this one may block windows update
#https://raw.githubusercontent.com/crazy-max/HostsWindowsBlocker/master/hosts.txt

# Securemecca.com list - Also blocks "adult" sites (pornography/gambling etc)
#http://securemecca.com/Downloads/hosts.txt

# Quidsup's tracker list
https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt

至于白名单,显然是可以做到的。

如果在逐个域的基础上完成,则需要设置代理 BIND DNS 服务器,该服务器没有根名称服务器的提示。

但是,每个允许的域都必须使用转发器创建到与外部通信的 DNS。这篇理论文章很好地总结了这个想法。使用 DNS 白名单阻止恶意软件

再次使用 BIND 中的 RPZ 来拯救我们,配置可以变得更加简单,并且不需要设置代理 DNS 服务器。

作为此页面配置的一个变体,重新审视 RPZ,您将拥有一个正常配置的 BIND,带有 RPZ 白名单,然后您将正常 rpz 策略中的所有内容黑色(例如 * 或)。

options {
 ....
response-policy { 
   zone "rpz-white" policy PASSTHRU; // my own white list
   zone "rpz-foreign";    // obtained from producer
};
}

虽然白名单拒绝一切的方法肯定是疯狂的,但白名单可以用来免除受到黑名单更广泛匹配打击的特定域。

相关内容