Apache mod_proxy + xinetd 重定向到防火墙主机 + 期望 JNLP 返回到客户端

Apache mod_proxy + xinetd 重定向到防火墙主机 + 期望 JNLP 返回到客户端

我的目标相当典型,所以我希望其他人可能之前已经实现过类似的设置。

外部客户端 Foo 将连接到 Bar,这是一台具有适当防火墙例外的服务器,因此可以看到应用服务器 Baz (192.168.1.5) 所在的内部网络 192.168.1.0/24。Baz 通过 JNLP 提供 Java 应用。

当前设置

xinetd 在 Bar 的 8080 端口上运行,它通过防火墙重定向到内部系统 Baz 的 443 端口,JNLP 在该端口启动,并反馈到客户端 Foo,Java 应用程序在该端口启动正常,一切正常。Foo 客户端与 JNLP 文件的交互确实使用了由 xinetd“路由”的相同连接,因此此设置不会发生非对称路由或任何令人讨厌的事情。只是没有对应用程序的保护,这是不太理想的。

xinetd 配置:

service baz-app {
    disable = no
    type            = UNLISTED
    flag            = IPv4
    socket_type     = stream
    wait            = no
    user            = root
    port            = 80
    #Not functional yet.
    #only_from      = 127.0.0.1
    redirect        = 192.168.1.5 443
    log_on_failure  += USERID
    }

所需设置

一些身份验证来保护应用程序。我们已成功实施以下操作:

Apache + mod_ssl + mod_proxy + mod_authz_ldap 带有 Kerberos 主体。它在端口 443 上运行,身份验证工作正常。然后,配置应代理到内部系统 Baz 的端口 443,JNLP 应从该端口传回。

以下是相关的 Apache 配置:

SSLProxyEngine         on
ProxyPreserveHost      on
<Location />
    ProxyPass          https://192.168.1.5/   # Baz's internal address.
    ProxyPassReverse   https://192.168.1.5/
    .... all authentication options follow ....
</Location>

问题

使用前面提到的“所需设置”,JNLP 确实被传回,尽管由于 ProxyPreserveHost 选项设置为开启,Foo 的 WebStart 启动的 JNLP 文件希望在端口 443 上连接回 Bar 的主机名(然后只是一个循环),但不幸的是,如果没有 ProxyPreserveHost 选项,Foo 的 WebStart 会尝试连接到 Baz 的内部地址(防火墙阻止除 Bar 以外的任何主机访问该地址)。我的困境如此绝望,真是令人惊叹。

我已尝试对上述配置进行许多次排列,甚至通过添加另一个重定向级别来引入 xinetd 来停止循环,(这导致了奇怪的、未记录的(可能)怪异的情况,我甚至无法开始理解)。

此时,我发现很难只见树木不见森林,而且似乎无法摆脱这种奇怪的“第 22 条军规”。

欢迎任何建议。

干杯

sc.

相关内容