如何使用 iptables 阻止 https facebook 网站

如何使用 iptables 阻止 https facebook 网站

可能的重复:
iptables 阻止 https 网站

我使用 Zentyal Os 作为防火墙,它工作得很好,就像阻止 http 站点一样,但我无法阻止 https facebook 站点。我唯一的目标是需要阻止 https facebook 网站,就像需要阻止 443 端口一样。

那么有没有机会使用 iptables 和透明模式进行控制。

答案1

注意:我是几个小时前写的,但我在桑迪的路上,所以我走开了,忘记按提交按钮

因此有两种方法可以实现这一点,并且都做不同的事情。真正阻止 Facebook 是不可能的,因为任何人都可以使用代理网站并绕过您的限制。他们还可以通过 SSH 隧道连接到不受限制的服务器。尽管如此,我们还是来了...

iptables

bash$ sudo iptables -A OUTPUT -p tcp -d 69.171.247.21 --dport 443 -j REJECT
bash$ sudo iptables -A OUTPUT -p tcp -d 66.220.149.88 --dport 443 -j REJECT
bash$ sudo iptables -A OUTPUT -p tcp -d 66.220.152.16 --dport 443 -j REJECT
bash$ sudo iptables -A OUTPUT -p tcp -d 69.171.234.21 --dport 443 -j REJECT
bash$ sudo iptables -A OUTPUT -p tcp -d 69.171.237.16 --dport 443 -j REJECT

缺点是这并不能阻止 Facebook 添加新的 IP 地址供 facebook.com 解析。您可以编写一个脚本来不断运行并获取最新的:

#!/bin/bash
for i in $(host facebook.com | grep "has address " | cut -d' ' -f4)
do iptables -A OUTPUT -p tcp -d $i --dport 443 -j REJECT
done

注意:这确实需要一点修改,因为它可能会产生错误

域名服务器

这个解决方案也不完美。 DNS只是命名系统的基础,直接命中IP地址即可获胜。如果您拥有网络的内部名称服务器,则可以为 facebook.com 设置一个条目以在其他地方进行解析。我会将其与上面的 iptables 结合使用。

安全带--根本不推荐

我们甚至可以更进一步。如果您拥有网络中想要阻止 facebook 的所有计算机,您可以生成根 CA 证书,在所有计算机上安装公钥。中间人所有 SSL 流量都会使用您的证书放弃所有网站,并主动终止 Facebook 连接。然而,这是一个危险的想法,并且会影响隐私(尤其是在企业环境中)。

答案2

由于我相信 zentyal 附带了对 snort IDS 的集成支持,因此您可以添加一个 snort 规则来检测并阻止包含基于包含 facebook.com 的通用名称的服务器证书的 SSL 数据包。这也可以解决通过代理的访问(只要与代理本身的连接未加密)。

另一种方法可能是强制所有 DNS 流量通过您的 DNS 服务器(阻止除 DNS 服务器之外的域流量),并针对任何 facebook.com 域的查询返回虚假内容(但不会停止通过代理进行访问)。

答案3

这条规则应该对你有用

iptables -A OUTPUT -d facebook.com -dport 443 -j REJECT --reject-with tcp-reset

编辑:如果您的 iptables 版本由于某种原因不喜欢用 url 代替地址,您可以执行以下操作,因为 facebook 可以解析为多个 ip:

 for blockip in `resolveip facebook.com | cut -d " " -f 6`; do
 iptables -A OUTPUT -o eth0 -p tcp -m tcp -d $blockip -j REJECT --reject-with tcp-reset
 done

相关内容