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

use*_*548 5 dns debian adblock rpz

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

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

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

但是 Unbound 似乎不支持任何正则表达式!

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

aaah.very.this.com

但是也

非常.this.com

这导致未绑定的错误尖叫,因为有一个区域重复。

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

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

[\w\.\-]+.com A 127.0.0.1
[\w\.\-]+.com AAAA ::1
Run Code Online (Sandbox Code Playgroud)

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

奖金

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

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

我可以去干嘛?Bind9、dnsmasq、未绑定、pdns-recursor...

Rui*_*iro 5

在 DNS 服务级别拦截域/请求或将 IP 网络块路由重定向到 127.0.0.1/null 路由是两件非常不同的事情。

在我看来,DNS 级别更高效,资源更轻。

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

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

我自己已经调查过通过 dnsmasq 或 BIND 列入黑名单。我将 DNS 黑名单用于广告、恶意软件并阻止我的智能电视呼叫回家(LG 站点)。

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

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

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

作为 my 几行的简短示例/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 .
Run Code Online (Sandbox Code Playgroud)

使用您的示例:

*.this.com CNAME .
*.biz CNAME .
Run Code Online (Sandbox Code Playgroud)

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

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

至于 RPZ 本身的设置,我会参考我在 Unix & Linux Large zone file for bind9上这个问题的回答:ad-blocking

对于使用raspberry 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
Run Code Online (Sandbox Code Playgroud)

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

如果在逐个域的基础上完成,则是设置代理 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
};
}
Run Code Online (Sandbox Code Playgroud)

虽然白名单拒绝所有方法肯定是疯狂的,但白名单可以用来豁免被黑名单更广泛匹配攻击的特定域。