SASL 身份验证到 HAPROXY 后面的 LDAP 时名称不匹配

SASL 身份验证到 HAPROXY 后面的 LDAP 时名称不匹配

我的 kerberos 域在 MYEXAMPLE.ORG 中,但服务器位于 dmz-int.example.org dns 区域。

LDAP 服务器是 b1.dmz-int.example.org;其 keytab 包括:

udo ktutil -k /etc/krb5.keytab 列表
/etc/krb5.keytab:

Vno 类型主要别名
  7 arcfour-hmac-md5         [电子邮件保护]
  7 aes128-cts-hmac-sha1-96  [电子邮件保护]
  7 aes256-cts-hmac-sha1-96  [电子邮件保护]
  7 arcfour-hmac-md5 主机/[电子邮件保护]
  7 aes128-cts-hmac-sha1-96 主机/[电子邮件保护]
  7 aes256-cts-hmac-sha1-96 主机/[电子邮件保护]
  7 arcfour-hmac-md5 ldap/[电子邮件保护]
  7 aes128-cts-hmac-sha1-96 ldap/[电子邮件保护]
  7 aes256-cts-hmac-sha1-96 ldap/[电子邮件保护]
  7 arcfour-hmac-md5 ldap/[电子邮件保护]
  7 aes128-cts-hmac-sha1-96 ldap/[电子邮件保护]
  7 aes256-cts-hmac-sha1-96 ldap/[电子邮件保护]
  7 arcfour-hmac-md5 ldap/[电子邮件保护]
  7 aes128-cts-hmac-sha1-96 ldap/[电子邮件保护]
  7 aes256-cts-hmac-sha1-96 ldap/[电子邮件保护]

ldap2.myexample.orgCNAMEb1.dmz-int.example.org

现在我可以连接到GSSAPILDAP 服务器:

$ kinit
$ ldapsearch -ZZ -h b1.dmz-int.example.org 'uid=test'
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 56
SASL data security layer installed.
[...]
$ ldapsearch -ZZ -h ldap2.myexample.org 'uid=test'
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 56
SASL data security layer installed.
[...]
$ klist
Credentials cache: FILE:/tmp/krb5cc_1000
    Principal: [email protected]

Issued                Expires               Principal
Sep  6 09:03:35 2016  Sep  6 19:03:32 2016  krbtgt/[email protected]
Sep  6 09:03:39 2016  Sep  6 19:03:32 2016  ldap/[email protected]

看起来不错。

现在来谈谈代理。

代理 A 记录为ldap.dmz-int.example.org,并且它CNAME具有ldap.myexample.org

代理是用于端口 389 和 636 的 HAPROXY 第 4 层。没有SASL它也可以正常工作。

$ ldapsearch -ZZ -h ldap.myexample.org'uid=test'
SASL/GSSAPI 身份验证已开始
ldap_sasl_interactive_bind_s:本地错误(-2)
        附加信息:SASL(-1):通用故障:GSSAPI 错误:其他故障(参见文本)(匹配凭据(ldap/[电子邮件保护]) 未找到)
$ ldapsearch -h ldap.dmz-int.example.org'uid=test'
SASL/GSSAPI 身份验证已开始
ldap_sasl_interactive_bind_s:本地错误(-2)
        附加信息:SASL(-1):通用故障:GSSAPI 错误:其他故障(参见文本)(匹配凭据(ldap/[电子邮件保护]) 未找到)

现在SASL不起作用。我需要SPN在服务器密钥表中添加一个额外内容吗?我需要一些 DNS 修复吗?为什么代理查询查找:主体而不是?ldap/[email protected]ldap/[email protected]

作为参考,以下是 haproxy conf 文件:

$ cat /etc/haproxy/haproxy.cfg
全球的
        日志/dev/log local0
# 记录 /dev/log local1 通知
        chroot /var/lib/haproxy
        统计套接字 /run/haproxy/admin.sock 模式 660 级别管理员
        统计超时 30 秒
        用户 haproxy
        组 haproxy
        守护进程

        # 默认 SSL 材料位置
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # 在启用 SSL 的监听套接字上使用的默认密码。
        # 有关更多信息,请参阅 ciphers(1SSL)。此列表来自:
        #https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        ssl 默认绑定密码 ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-默认绑定选项 no-sslv3

LDAP 和 LDAP/STARTTLS
前端 ldap_service_front
  记录全局
  模式 tcp
  绑定 *:389
  描述 LDAP 服务
  选项套接字统计
  选项 tcpka
  选项 tcplog
  客户端超时10秒
  默认后端 ldap_service_back

后端 ldap_service_back
  记录全局
  服务器 ldap-1 b1.myexample.org:389 检查下降 1 上升 1 间隔 2s
  服务器 ldap-2 b2.myexample.org:389 检查下降 1 上升 1 间 2s
  模式 tcp
  平衡最小连接数
  选项 tcpka
  选项 ldap-check
  服务器超时10秒
  超时连接1s

答案1

你会想要ignore_acceptor_hostname = true在 或[libdefaults]的相应小节中[appdefaults]

ignore_acceptor_hostname
当接受基于主机的服务主体的 GSSAPI 或 krb5 安全上下文时,忽略调用应用程序传递的任何主机名,并允许客户端向密钥表中与服务名称和领域名称(如果给定)匹配的任何服务主体进行身份验证。此选项可以提高多宿主主机上服务器应用程序的管理灵活性,但可能会损害虚拟托管环境的安全性。
默认值为 false。版本 1.10 中的新增功能。

相关内容