我在 OpenBSD 机器上的 PF 防火墙面临挑战。
我从客户端 (A) 使用目标 IP (SRV-IP-1) 连接到服务器 (B)。服务器正在回复我的请求,但回复来源是另一个 IP (SRV-IP-2)。
防火墙正在丢弃该答复,因为它无法理解该答复是来自内部网络的对话的一部分(它认为该答复是从外部开始的连接)。
有没有办法指示防火墙认为来自地址“池”而不是用作对话目标的地址 (SRV-IP-1) 的回复有效?例如,最好将指定地址与其他地址进行映射,以“链接”状态。
谢谢。
答案1
防火墙不知道服务器 B 有两个 IP 地址——它将每个 IP 地址视为不同的源/对象。下图显示了防火墙所看到的情况。
为了让防火墙允许来自这台“其他”计算机的流量通过,你需要添加明确的规则来允许绿色流量(从第二个 IP 到互联网上的任意主机) - 你可以使用单独的规则或地址表来执行此操作(请参阅pf 文档有关表格的更多信息)。
更好的解决方案可能是确定为什么您从与接收请求不同的地址发送回复 - 如果您可以让所有流量都发生在一个地址/来自一个地址,您将能够利用 pf 的自动状态跟踪,并且拥有一个更简单的环境来管理。
答案2
有许多方法可以允许来自地址池的流量。
您可以使用 CIDR 子网:
pass in on [interface] from 10.0.0.0/8
您可以使用宏:
allowed-reply = " {10.0.0.1, 10.0.0.3} "
pass in on [interface] from allowed-reply
另一种方法是使用锚点
这将允许您将规则“嵌套”在另一个规则中...有点...
OpenBSD 关于 PF 的文档如果非常有帮助的话Calomel 的网站