iptables 阻止 https 网站

Dha*_*mit 9 iptables filter

我希望在我的组织中阻止一些也在 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
Run Code Online (Sandbox Code Playgroud)

但 https 仍然适用于本地机器以外的机器。

小智 12

不要根据 URL 进行匹配,而是尝试根据证书的内容进行匹配。

iptables -t nat -I INPUT --sport 443 -m string \
                 --string www.facebook.com --algo bm -j REJECT
Run Code Online (Sandbox Code Playgroud)

您也可以匹配指纹,但如果目的地更改或更新其证书,则会使您的规则无效。

  • 只有连接的第一个数据包进入 `nat` 表(并且 nat 表中没有 INPUT 链),我想你的意思是那里的 `filter`。此外,它有一个(非常)远程的机会匹配 443 是客户端端口的数据包 (3认同)

Gil*_*il' 11

防火墙无法控制客户端尝试访问的 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,这将允许您报告您已完成工作,无论多么无用)。


Nik*_*ley 4

我知道一种选择。

如果您有内部 DNS 服务器可供使用,请在 TLD 区域数据中放置一些静态引用,将域(您不希望建立外部连接)解析为仅 127.0.0.1。这样,网络中使用中央 DNS 的所有主机都会将( facebook.com/twitter.com 本身)域解析为环回地址,这将无处可去。

如果您对网络的客户端计算机解析器配置有完全的权威控制,那么这将起作用。如果工作站/客户端有权更改/编辑 /etc/hosts 或 /etc/resolv.conf 那么它们可能会绕过此选项。

  • 或者,对于更文明的解决方案,设置 DNS A 记录(或hosts/hosts.txt 条目)以引用具有网络服务器的 Intranet 主机,该服务器准确解释了用户未发送到 Facebook 等的原因。请注意,这会破坏HTTPS,因为预期的主机名(例如 www.facebook.com)与证书 CN 不匹配。 (2认同)