对于使用 DNS over HTTPS 的浏览器,是否可以通过系统 Linux 防火墙阻止网站?

对于使用 DNS over HTTPS 的浏览器,是否可以通过系统 Linux 防火墙阻止网站?

操作系统:Fedora 34

浏览器:启用 DoH 的 Mozilla Firefox

我试图通过核心 Linux 设置(而不是网络浏览器扩展等)来阻止网站。问题出在我正在使用的 DoH 内部。如果我禁用 DoH,那么一切都可以与主机内的设置完美配合


# vi /etc/hosts


0.0.0.0 www.facebook.com

我试图编辑 iptables 但这也不起作用


# iptables -A OUTPUT -p tcp -d www.facebook.com --dport 443 -j DROP

# service iptables save

# service iptables restart

# iptables -L

据我所知,不可能在系统级别阻止我访问 web addr?

答案1

iptables 按主机名阻止,来自man iptables

-s, --source address Source specification. Address can be either a network name, a hostname, a network IP address (with /mask), or a plain IP address.

它对您不起作用的原因是您iptables使用本地配置的解析器来查找 Facebook IP 地址,而 Firefox 从不同的 DNS 提供商获取地址。由于 Facebook 使用云,其 IP 地址是不同的DNS 提供商和地理位置之间存在差异,这最终意味着iptables解决方案不太可能发挥作用。

相反,您可以使用 Firefox 的组策略来阻止网站,例如https://github.com/mozilla/policy-templates/blob/master/README.md#websitefilter https://github.com/mozilla/policy-templates/releases

例如,在这里检查这个答案:https://support.mozilla.org/en-US/questions/1260799

答案2

IMO,最好在两个都网络层和应用层。即iptables对网络层使用简单的规则,并使用代理来对允许的内容和不允许的内容进行复杂的精细控制。

设置代理(例如乌贼并阻止对端口 80 和 443 的直接访问(squid 除外)。

如果你的网关/防火墙是一台功能中等的Linux机器,squid可以在同一个机器上运行。您可以在VM或容器中运行squid,但为squid分配专用IP地址并让squid通过tcp_outgoing_address中的选项使用它可能更容易squid.conf。仅允许该 IP 地址连接到这些端口上的外部主机(在 OUTPUT 链中,或者在 NAT 链中,如果您的 LAN 使用私有地址)。

否则,如果您使用专用的基于 Linux 的路由器(例如运行开放WRT或类似),较老的CPU 功率不足和 RAM 不足的型号可能无法胜任,但过去 5 年左右生产的大多数现代型号都足够强大。过去 20 年左右生产的几乎所有服务器级计算机或重新设计的台式机都是如此。如果您需要在专用机器上运行,那么即使是树莓派或类似的设备也可以。

因为您正在配置一些东西,以便只有鱿鱼可以访问网站,所以您可以使用鱿鱼配置来允许或拒绝特定主机...可选地与其他程序结合使用,例如鱿鱼卫士

还运行您自己的缓存 DNS 解析器(例如不受约束的)并确保你的鱿鱼盒使用它 - 禁用任何混乱的东西/etc/resolv.conf(包括蹩脚的 systemd-resolved abomination)。请记住使用 DNS 解析器配置客户端计算机,无论是通过静态配置还是通过 DHCP。

相关内容