我希望在我的组织中屏蔽一些也在 https 上运行的网站,例如 facebook、twitter 和 gmail。根据高层管理人员的命令,这里不应该使用鱿鱼。我们可以使用 Untangle Lite Package 和iptables
.
除了 Squid 之外还有其他选择吗?此外,一些iptables
阻止此类流量的规则也会非常有帮助。
我找到了这个
iptables -t filter -I INPUT -m string --string facebook.com -j LOG --algo bm
iptables -t filter -I INPUT -m string --string facebook.com -j REJECT --algo bm
但 https 仍然可以在除本地机器之外的机器上运行。
答案1
不要根据 URL 进行匹配,而是尝试根据证书的内容进行匹配。
iptables -t nat -I INPUT --sport 443 -m string \
--string www.facebook.com --algo bm -j REJECT
您也可以通过指纹进行匹配,但如果目的地更改或更新其证书,则您的规则将无效。
答案2
防火墙无法控制客户端尝试访问哪些 HTTPS URL,因为 URL 已加密。防火墙只能使用 IP 地址控制客户端连接到哪些站点,但如果站点的 HTTP 和 HTTPS 版本位于同一 URL,则这无济于事(即使它们不是,您也会有维护大量的 IP 地址列表)。
阻止 HTTPS 的唯一现实方法是完全阻止它。坚持所有连接都必须是有效的 HTTP(即客户端通过发送一行来启动HTTP
,等等)。仅使用 IPtables 无法完成此操作,您需要一个实际的协议感知代理,例如 Squid。 (我不知道Untangle Lite有什么功能。)
您可以通过阻止到端口 443 的传出流量来阻止大多数 HTTPS 流量,因为几乎所有 HTTPS 服务器都位于该端口上。或者,采用白名单方法,仅允许传出流量到达端口 80(正常 HTTP 端口)。
另一种方法是代理所有 HTTP 和 HTTPS 连接。然后就可以通过URL进行匹配了。这需要对客户端进行中间人攻击。如果您将自己的证书颁发机构部署到所有客户端计算机并将其注册为信任根,则可以做到这一点。这可能被认为是不道德的。
无论您做什么,坚定的用户都会在您的环境之外设置代理并通过 HTTP 或类似的方式运行 IP。
你似乎要么试图用技术手段解决社会问题,但这种方法几乎不起作用,要么尽最大努力实现管理层的一个愚蠢的要求(在这种情况下,我会选择阻止端口 443,也许只是为了某些 IP,这将允许您报告您已完成工作,无论多么无用)。
答案3
我知道一种选择。
如果您有内部 DNS 服务器可供使用,请在 TLD 区域数据中放置一些静态引用,将域(您不希望建立外部连接)解析为仅 127.0.0.1。这样,网络中使用中央 DNS 的所有主机都会将( facebook.com/twitter.com 本身)域解析为环回地址,这将无处可去。
如果您对网络的客户端计算机解析器配置有完全的权威控制,那么这将起作用。如果工作站/客户端有权更改/编辑 /etc/hosts 或 /etc/resolv.conf 那么它们可能会绕过此选项。
答案4
你应该把它放在 FORWARD 链上,例如
iptables -I FORWARD -m string --string "facebook.com" \
--algo bm --from 1 --to 600 -j REJECT
它将影响网络上除防火墙之外的其他系统。