OpenLDAP slapd 作为透明代理,绑定总是失败

OpenLDAP slapd 作为透明代理,绑定总是失败

我有一台 Linux (4.1.12-61.1.34.el6uek.x86_64) 机器,上面有一个 slapd 服务 (slapd 2.4.40)。我想要实现的是将所有客户端 ldap 相关流量通过此 slapd 实例透明地代理到 Active Directory 服务器。我需要这样做的原因是流量需要通过 TLS 1.2 进行隧道传输,而我的客户端应用程序不支持它。不幸的是,我无法控制客户端,这是理所当然的。

客户端需要使用用户提供的用户名和密码对 AD 进行身份验证。然后获取此用户所属的组列表,相当简单。服务器需要使用绑定用户和纯文本密码进行简单绑定。当我尝试通过 slapd 实例查询 AD 服务器时,我总是得到以下错误(运行时slapd -f slapd.conf -d 4 -d 16 -d 32

send_ldap_result:错误=49 匹配=“”文本=“”

这实际上意味着身份验证失败。当我绕过 slapd 代理并使用 ldapsearch 直接连接到 AD 时,一切都运行正常。

通过 slapd 进行 ldapsearch(出现错误):

ldapsearch -H ldap://localhost -x -D cn=user,ou=bind,dc=domain,dc=com -W -s sub "(cn=VNA-*)" -v

ldapsearch direct(无错误,返回来自 AD 的结果):

ldapsearch -H ldaps://ad.domain.com:636 -x -D cn=user,ou=bind,dc=domain,dc=com -W -s sub "(cn=VNA-*)" -v

我尝试了各种选项,主要是 idassert-bind,但似乎都没有什么效果。如果能帮助我实现这个功能,我将不胜感激。

我的 slapd.conf

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/inetorgperson.schema


# Global options
loglevel 256
sizelimit unlimited
idletimeout             3600
writetimeout            600
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
allow bind_v2

# Modules
modulepath /usr/lib/openldap
modulepath /usr/lib64/openldap
moduleload back_ldap

TLSCACertificateFile    /etc/openldap/cacerts/cacert.pem

database ldap
readonly yes
uri "ldaps://ad.domain.com:636"
suffix "dc=domain,dc=com"
idassert-bind bindmethod=simple
        mode=self
        binddn="cn=user,ou=bind,dc=domain,dc=com"
        credentials=secret
        tls_reqcert=never
        tls_cacert=/etc/openldap/cacerts/cacert.pem
idassert-authzFrom      "*"

答案1

我最终放弃了这个,改用了 stunnel,效果很好。

相关内容