如何屏蔽 Facebook

如何屏蔽 Facebook

我想尝试在我的计算机上屏蔽 Facebook。

我开始使用 /etc/hosts,但它不能捕获所有子域名,因此我进行了一些研究,发现(以及许多类似的解决方案)导致了这样的陈述

/usr/bin/whois -h whois.radb.net '!gAS32934' | head -n -1 | tail -n -1 | /usr/bin/xargs --max-args=1 | /usr/bin/xargs -I {} --max-args=1 iptables -A OUTPUT -d {} -j REJECT

[编辑] 我在这里做的是,我首先使用

whois -h whois.radb.net '!gAS32934'

获取 Facebook 注册的所有 IP 范围,如建议的那样这篇文章。然后我进行一些修剪,以删除结果开头和结尾处不需要的字符。这给了我一个 ip 范围列表,以空格分隔。然后使用 xarg,我将这些 ip 范围分开,并为每个 ip 范围构建一个语句,例如

iptables -A OUTPUT -d {} -j REJECT

其中{}被实际范围替换。我使用REJECT,而不是DROP因为 1. 它要快得多 2. 因为我确实想禁止连接,所以这对我来说似乎是正确的。[/编辑]

现在如果我尝试,ping facebook.com我会得到

From myname (xxx.xxx.xxx.xxx) icmp_seq=1 Destination Port Unreachable

这正是我所期望的。但如果我使用浏览器 (Firefox) 打开 facebook.com,网站仍然会打开,这不是我所期望的。我尝试重新加载并打开另一个我以前没有尝试过的 Facebook 域名 (facebook.de),以排除浏览器缓存的问题,但这没有帮助。

因为我经常看到DROP而不是REJECT我也尝试过,但结果并没有改变。

现在的问题是,如果相应的 IP 被阻止,浏览器为什么可以加载网页?如果 ping 被阻止,浏览器如何通过?很明显,我遗漏了一些东西,但我不知道那是什么。

答案1

获取主机ip:

host -t a facebook.com

查找 CIDR

whois 173.252.120.68 | grep CIDR

并阻止子网

iptables -A OUTPUT -p tcp -d 173.252.120.68/18 -j DROP

并阻止域名:

iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP

iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP

相关内容