我是一名专业软件开发人员,我想我可能错过了一个我不熟悉的重要功能。
在我的开发人员电脑上,我有一个应用程序,它使用由我的本地 IIS 服务器在端口 443 上托管的网站,即 https 网站。然后,我还有另一部分软件,它有一个 Java 进程在另一个端口 8443 上监听。它们都已启动并运行。
但在实际生产环境中,我面前的防火墙只允许通过端口 443 的流量,而端口 443 默认为 https 流量。我已经想出了一个办法,让我的 Java 应用程序发送/接收包装应用程序本机/默认流量类型的 https 流量,这样我就不必担心防火墙只允许某些类型的应用程序流量进出。
问题是,我该如何配置防火墙或我的电脑,以便它知道将流量从一个端口 (443) 转发到我电脑上的不同端口?因此,想象一下这种情况:所有流量都来自防火墙上的端口 443,但之后我希望它将流量定向到端口 443 IIS 服务器和 8443 myJavaAppListener,我应该怎么做才能启用此功能?
答案1
您无法在(常规/典型/iptables 或类似)防火墙中执行此操作,您需要某种代理/负载平衡器。“防火墙等效”设备实际上需要终止连接(并且在 HTTPS 的情况下具有所有域的适当证书),然后创建与真实服务器的连接并代理流量。
当然,这项工作不需要由路由器完成 - 您可以设置代理(使用 Apache + mod_proxy 是一种常见的方法),然后将所有经过路由器的端口 443 流量转发到代理,并让代理在内部进行管理。这是一种相当典型的安排。
根据要求额外提供
TCP 流具有源 IP 端口和目标 IP 端口。由于请求需要来自所有 IP 和任何端口,因此剩下需要区分的就是目标 IP(单个 IP)和端口(只有一个)。 这意味着检查数据包不会让我们知道目的地,因此 iptables 是不够的。
解决方案是终止连接,然后读取建议请求的资源的 HTTP 标头,包括(对于 HTTP/1.1 及更高版本),然后充当中间人。