通过 pf 根据域名重定向端口

通过 pf 根据域名重定向端口

我们在运行 pf 防火墙的机器 (machine1) 上有一个面向公众的 IP。局域网中该防火墙后面有多台机器。

在局域网中的 machine2 上,我们在端口 443 上运行一项服务。为了使该服务在局域网(互联网)之外可用,我们通过 machine1 上的 pf 进行重定向。

rdr on $ext_if proto tcp from any to $ext_addr port 443 -> SOMEIP port 443

现在我在局域网中有一台 machine3,并且也在端口 443 上运行一个服务。

我们设立了域名,如 machine2.example.com 和 machine3.example.com,均指向 machine1 上的面向公众的 IP。

有没有办法让 pf 具有“域名感知”功能,以便确定要将服务路由到哪台 443 上的机器?更改局域网中任何机器上的端口都不应该是一种选择。

答案1

根据 OpenBSD 的 PF 文档,支持完全限定域名。

文档中src_addr, dst_addr提到了这一点:

加载规则集时将通过 DNS 解析的完全限定域名。所有生成的 IP 地址都将替换到规则中。

来源:https://www.openbsd.org/faq/pf/filter.html

答案2

虽然我不认为 iptables 能够按域过滤请求,但这听起来像是 的完美工作nginx。如果您可以在 pfSense 上安装它,您可以根据各种域/IP 配置将其设置为其他服务器的代理。如果需要,它甚至可以充当负载平衡器,您无需配置防火墙。

或者,您可以在其中一台虚拟机中设置单独的 nginx 代理服务器。然后,您将让防火墙将所有流量重定向到该虚拟机的 80 和 443 端口,然后该虚拟机将使用 nginx 将请求代理到特定的虚拟机。它也可以在任何现有虚拟机上设置。

相关内容