如何使用 iptables 封锁 https 网站

如何使用 iptables 封锁 https 网站

我想屏蔽一些 https 网站,比如 youtube.com、facebook.com。

我知道我们无法使用 url 规则来阻止它。因为 url 是加密的。

因此,我尝试阻止所有包含我想要过滤的域的 DNS 查询。因此,我添加了以下规则:

iptables -A OUTPUT -p udp --dport 53 -m string --domain yahoo.com -j DROP

但 YouTube 仍在运行。但一段时间不活动后(约 15 分钟),YouTube 被屏蔽。

有什么解释吗?

我怎样才能强制立即封锁 YouTube?

答案1

你的做法会产生效果,但是存在几个问题:

  • 浏览器和操作系统会缓存 DNS 查找。它们并不一定在每次加载网站时都进行完整的 DNS 查找。

  • 如果 DNS 被阻止,某些浏览器可能会尝试其他方法(例如联系其自己的 DNS 服务器),因为它们认为存在网络问题。Google Chrome 可能会这样做。

  • Google Chrome 和其他浏览器可能很快就会实现“DNS over HTTPS”,这意味着对端口 53 执行任何操作都不会产生任何影响,因为它根本不会将其用于 DNS。

  • 通过 IP 地址进行阻止将会持续一段时间,直到 Youtube 的 IP 地址因某种原因发生变化。

  • 精明的用户可能会更改 DNS 服务器,除非您在系统上以管理方式阻止了该功能。

我怎样才能强制立即封锁 YouTube?

实现这一目标的“正确”方式是建立一个可以过滤 HTTPS 流量的“中间人”透明 HTTPS 拦截代理。然后告诉代理阻止其中的任何 URL youtube.com

您可能已经猜到了,您不能仅仅简单地查找youtube.com443,因为它已被加密。

您可以在本地机器上使用 Burp Proxy 来了解其工作原理 - 它用于测试,而不是管理许多用户的流量。但它可以让您学习相关概念。

您必须在每台使用代理的机器上安装代理的 SSL 证书,以避免安全警告。

答案2

你的命令是:

iptables -A OUTPUT -p udp --dport 53 -m string --domain yahoo.com -j DROP

首先你只阻止 udp 和端口 53

iptables -I INPUT 1 -s 172.217.0.0/16 -j DROP
iptables -I FORWARD 1 -s 172.217.0.0/16 -j DROP

iptables -I INPUT 2 -s 157.240.0.0/16 -j DROP
iptables -I FORWARD 2 -s 157.240.0.0/16 -j DROP

首先,您需要阻止 INPUT 链,因为数据就是从那里进入的。FORWARD 链可能不是您的必需品。然后,我在 youtube 上执行了 ping,然后我在该 IP 上执行了 whois,以查看他们拥有哪些块。

最后,我阻止了所有 IP,这样我们就不需要费心进行 DNS 查找了。

答案3

#nslookup youtube.com

Non-authoritative answer:
Name:   youtube.com
Address: 172.217.16.46
Name:   youtube.com
Address: 172.217.20.206

iptables -t filter -A FORWARD -p tcp -s 192.168.1.0/24 -d 172.217.16.46 --dport 80 -j DROP
iptables -t filter -A FORWARD -p tcp -s 192.168.1.0/24 -d 172.217.20.206 --dport 80 -j DROP

来源:http://forum.oszone.net/post-692775-5.html

或者

iptables -I FORWARD -s 10.0.0.0/24 -p tcp -m string --algo bm --string ".youtube.com" -j DROP

来源:http://moshelpers.ru/?q=node/71

或者第一个例子,我们有一个用于本地网络的机器网关,我们在那里创建一个规则来阻止例如资源 youtube.com,它看起来像这样的代码:

iptables -A FORWARD -m string --string "youtube.com" --algo kmp --to 65535 -j DROP

要在 Linux 机器上阻止地址,请编辑规则中的一些代码:

iptables -A INPUT -m string --string "youtube.com" --algo kmp --to 65535 -j DROP

来源:http://sudouser.com/blokirovka-nezhelatelnyx-url-s-pomoshhyu-iptables.html

这将立即断开 TCP 连接,并且不会超时,-p tcp您可以尝试以下操作

-j REJECT --reject-with tcp-reset

来源:http://forum.ixbt.com/topic.cgi?id=76:10833

抱歉,所有来源都是俄罗斯网站:)

答案4

正如@djsmiley2k 在评论中所说,您肯定会遇到 DNS 缓存。这意味着如果您的计算机最近解析了给定域,则不会再次请求该域的 DNS 服务器。

要强制立即阻止域,您应该强制 DNS 缓存刷新。根据您的操作系统,命令会有所不同。您可以找到示例这里

总而言之,添加 iptables 规则后,您可以立即尝试以下任一操作:

$ service nscd reload

或者

$ service dnsmasq restart

或者

$ rndc restart

相关内容