我想屏蔽一些 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.com
443,因为它已被加密。
您可以在本地机器上使用 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