我在 AWS/EC2 中有几个应用服务器,客户可以使用他们的 LDAP 实现来对我们的产品进行身份验证。
我们的一些客户无法通过 FQDN 将我们列入白名单。
应用服务器将使用 iptables/NAT 将 LDAP 流量(端口因客户而异)发送到“代理机器”,然后代理机器将该流量转发到目的地。
iptables -t nat -A OUTPUT -p tcp --dport 389 -j DNAT --to-destination x.x.x.x:3128
iptables -A FORWARD -p tcp -d x.x.x.x --dport 3128 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
您可能已经从端口猜到了 - 最初此代理安装了 Squid。我可以通过 tcpdump 验证 LDAP 流量是否通过该端口到达该框,但 Squid 永远不会接收它或对其进行任何操作。
由于在网上找不到任何可行的示例,我转而使用 HAProxy - 效果大致相同。我也找不到任何关于以这种方式使用 HAProxy 的文档 - 其中大部分是反向代理或负载平衡器。
我也尝试过设置基于 iptables 的路由器,但是 AWS 阻止了具有 2 个以太网接口的机器上使用公共 IP。
答案1
在 HAProxy 中,这非常简单。你忽略的是,在此配置中,HAProxy仍然扮演着反向代理的角色。 “后端”是客户的 LDAP 服务器,前端只有您可以访问。
listen label_for_the_proxy
bind 0.0.0.0:389
mode tcp
server label_for_the_server 203.0.113.111:389 check rise 1 fall 2 inter 60000 fastinter 5000 downinter 2000 on-error sudden-death
这是前端和后端的组合配置。
连接到此实例上的端口 389,您将发现自己正在与客户的 LDAP 服务器通信。请注意,此示例取自与您描述的工作环境类似的环境,但如图所示,此配置不能被认为足够安全。
您不想在 Internet 上以明文形式传输 LDAP。在我使用此应用程序的环境中,它与您的应用程序非常相似,只是 HAProxy 位于几个 IPSec 隧道的中间,这就是没有 TLS 的原因。但这对配置原则没有影响。