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

473*_*469 5 openldap haproxy sasl

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

LDAP 服务器是 b1.dmz-int.example.org;它的密钥表包括:

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

Vno 类型主要别名
  7 arcfour-hmac-md5 b1$@MYEXAMPLE.ORG
  7 aes128-cts-hmac-sha1-96 b1$@MYEXAMPLE.ORG
  7 aes256-cts-hmac-sha1-96 b1$@MYEXAMPLE.ORG
  7 arcfour-hmac-md5 主机/b1.dmz-int.example.org@MYEXAMPLE.ORG
  7 aes128-cts-hmac-sha1-96 主机/b1.dmz-int.example.org@MYEXAMPLE.ORG
  7 aes256-cts-hmac-sha1-96 主机/b1.dmz-int.example.org@MYEXAMPLE.ORG
  7 arcfour-hmac-md5 ldap/b1.dmz-int.example.org@MYEXAMPLE.ORG
  7 aes128-cts-hmac-sha1-96 ldap/b1.dmz-int.example.org@MYEXAMPLE.ORG
  7 aes256-cts-hmac-sha1-96 ldap/b1.dmz-int.example.org@MYEXAMPLE.ORG
  7 arcfour-hmac-md5 ldap/ldap.dmz-int.example.org@MYEXAMPLE.ORG
  7 aes128-cts-hmac-sha1-96 ldap/ldap.dmz-int.example.org@MYEXAMPLE.ORG
  7 aes256-cts-hmac-sha1-96 ldap/ldap.dmz-int.example.org@MYEXAMPLE.ORG
  7 arcfour-hmac-md5 ldap/ldap.unimore.it@MYEXAMPLE.ORG
  7 aes128-cts-hmac-sha1-96 ldap/ldap.unimore.it@MYEXAMPLE.ORG
  7 aes256-cts-hmac-sha1-96 ldap/ldap.unimore.it@MYEXAMPLE.ORG

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

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

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

Issued                Expires               Principal
Sep  6 09:03:35 2016  Sep  6 19:03:32 2016  krbtgt/MYEXAMPLE.ORG@MYEXAMPLE.ORG
Sep  6 09:03:39 2016  Sep  6 19:03:32 2016  ldap/b1.dmz-int.example.org@MYEXAMPLE.ORG
Run Code Online (Sandbox Code Playgroud)

看起来不错。

现在是代理。

代理 A 记录是ldap.dmz-int.example.org,它有一个CNAMEas 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/ldap.dmz-int.example.org@DMZ-INT.EXAMPLE.ORG))
$ ldapsearch -h ldap.dmz-int.example.org 'uid=test'
SASL/GSSAPI 认证开始
ldap_sasl_interactive_bind_s:本地错误(-2)
        附加信息:SASL(-1):通用故障:GSSAPI 错误:杂项故障(见正文)(未找到匹配凭证(ldap/ldap.dmz-int.example.org@DMZ-INT.EXAMPLE.ORG))

现在SASL不起作用。SPN服务器密钥表中是否需要额外的东西?我需要一些 dns 修复吗?为什么代理查询查找:ldap/ldap.dmz-int.example.org@DMZ-INT.EXAMPLE.ORGprincipal 而不是ldap/ldap.dmz-int.example.org@MYEXAMPLE.ORG

作为参考,遵循haproxy conf文件:

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

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

        # 在启用 SSL 的侦听套接字上使用的默认密码。
        # 有关更多信息,请参阅密码(1SSL)。这份名单来自:
        # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        ssl-default-bind-ciphers 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-default-bind-options no-sslv3

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

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

841*_*104 3

您需要ignore_acceptor_hostname = true在 的任一[libdefaults]或适当的小节中[appdefaults]

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