HTTPS 防火墙规则

信息安全 防火墙
2021-08-19 13:20:47

在基本无状态包过滤防火墙上为 HTTPS 网站设置防火墙规则

这似乎是一个愚蠢的问题,但是如何设置防火墙规则在基本数据包过滤防火墙上允许HTTPS?目的是我希望能够浏览到https://twitter.com网站并加载所有图像等。我该如何设置此规则?

我的规则是这样设置的:

yourPC-[highport] --> SSLserver:443

src ip      any
dest ip     any
src port    any
dst port    443
inbound     block
outbound    allow

SSLServer:443 -->YourPC-[highport]

src ip      any
dest ip     any
src port    443
dst port    any
inbound     allow
outbound    block

出站流量似乎没问题,但我正在丢弃这样的数据包(此示例正在加载 twitter 页面,即 akamai 内容):

23.9.229.210:443 > XXX.XXX.XXX.XXX:62712, AS Seq=###, Ack=-### -Black List Defense
  • 我应该如何设置规则以允许加载 https 网站?(是否因为防火墙读取规则的顺序而不起作用?)

其他详情:

  • 这些规则适用于我的路由器中内置的数据包过滤器
  • 这不是状态防火墙

非常感谢

4个回答

假设您正在设置防火墙以允许您访问 SSL 网站,那么您如何配置防火墙取决于防火墙是否有状态。

正如@TerryChia 所说,您本地计算机上的端口是短暂的,因此连接是

yourPC-[highport] --> SSLserver:443

并且返回路径是

SSLServer:443 -->YourPC-[highport]

因此,如果您的防火墙非常老派,那么设置它的方法是允许从源端口 443 到您机器上所有高端口的所有流量。

然而,如今几乎所有的防火墙都是有状态的,这意味着它们可以识别数据包何时是已建立连接的一部分。

因此,您只需要允许您的 PC 连接到 443 出站,然后对于入站,您允许所有与已建立连接相关的流量

例如对于 iptables

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

您是在服务器还是客户端上设置此防火墙?您的规则(仅限出站,目的地受限)建议客户端设置 [并且看起来正确 BTW],但您质疑和评论建议服务器设置。

我对防火墙知之甚少,前段时间在 SF 上问了这个问题,以解决我的一个基本疑问。根据我得到的答案,我可能会说您的服务器防火墙应该具有:

src ip (any)
src port (443)
inbound allow

禁止任何人尝试通过除443警告:您也应该启用 SSH/etc 端口,否则您将被锁定在服务器之外)以外的端口连接到它如果您关心的是保护服务器,请执行此操作outbound 和 dest 规则将限制从您的服务器到其他地方的请求可用,因此请根据您的需要进行设置。

如果您关心的是保护客户端,那么您应该将目标端口(甚至更好的是 ip)限制为443并禁止入站连接(假设您的客户端不期望它们)。所以你的客户端防火墙应该有:

dest ip (any [or your server's])
dstn port (443)
inbound block
outbound allow

注意:在另一个问题中也解释过,有状态防火墙将允许接收到请求的机器向相同的 ip/port 发送响应,而不管出站设置如何,反之亦然,这就是为什么您的配置不需要担心临时端口。例如:客户端向服务器发送数据包(src:55680,dest:443),客户端防火墙接受(outbound ok,dstn ok),发送数据包;响应谈到同55680端口,但是防火墙让它通过-规则来阻止入站并不适用于这里,因为它是该请求的响应在客户机发起

这就是为什么,与直觉相反,您使用出站规则来保护客户端,即使您担心传入的数据包同时还阻止所有入站数据包,并且仍然有重要的数据包 - 对您的请求的响应 - 正常到达。

您在日志中看到的任意端口称为临时端口

这不是 HTTPS 特有的情况。与服务器的任何通信都将涉及您的客户端使用临时端口与服务器端定义的端口进行通信。

如果您想限制对侦听端口 443 的 Web 服务器的访问,只需指示您的防火墙丢弃源端口为 443 的数据包。为什么要这样做对我来说是个谜。

这似乎是一个愚蠢的问题,但是如何设置防火墙规则以在基本数据包过滤防火墙上允许 HTTPS?

通常没有愚蠢的问题,这是一个相当合理的问题,因此无需道歉。让我尝试尽可能清楚地解释这一点,而不必牺牲清晰度和正确性。

注意:当您寻求解决方案时,我将为您提供一些背景信息,说明您可能不想做您正在尝试的事情。如果您完全了解您的问题的后果以及它所包含的所有内容,我怀疑我的答案可能不是您所寻求的答案。但是,如果您想了解为什么配置不是那么好,请继续阅读。

已经解释过,您看到的是所谓的临时端口。这些是由操作系统中的网络堆栈动态分配的。您可能会问,为什么我的操作系统使用这些高编号端口而不是 443?

有几个原因,请允许我强调一些可以帮助您理解为什么这不一定是问题的原因。

  1. 浏览(网络)效率
  2. 安全性(权限)

如果您要强制您的操作系统(和客户端软件)仅使用端口 443,您将显着减少操作系统和浏览器使用网络并行性的机会,这是用于提高页面加载速度的东西。您会看到,HTTP 作为协议的工作方式存在许多限制,例如一次单个请求。使用多个连接下载内容是帮助克服此限制的一种方法;就像 HTTP 流水线一样。

上面提到的第二个原因是关于安全性。大多数操作系统认为 1024 (0-1023) 以下的端口具有特权。为了让用户级应用程序绑定(使用)这些端口之一,应用程序需要额外的权限(例如以管理权限运行,或使用 Linux 中的特定功能,请参阅此。)。

您所确定的通常不被认为是现代操作系统的问题(对于 HTTP),因为它们各自的网络堆栈将知道哪些数据包与哪些数据包相关。

如果您仍然担心并且根本不相信为您的问题提供的任何一个答案,您可以尝试以下操作。调查您的浏览器是否可以限制在特定范围的临时端口,例如 51000-51100。然后创建一个规则,只允许将这些端口用作 src-port 与 dst-port 443 结合使用。

但是,请注意,将您的操作系统和客户端软件限制在这些端口上可能会产生无法预料的后果,因为可能有其他应用程序使用您刚刚分配的这些临时端口。

TL;DR - 不要担心浏览时使用的临时端口,相信操作系统正确处理相关和相关的数据包。强制执行 dst-port 并对此感到满意。:-)