web-dev-qa-db-ja.com

名前が一致しないHAPROXYの背後にあるLDAPへのSASL認証

MYEXAMPLE.ORGの私のKerberosドメインですが、サーバーはdmz-int.example.orgdnsゾーンにあります。

LDAPサーバーはb1.dmz-int.example.orgです。そのキータブは次のとおりです。

 udo ktutil -k /etc/krb5.keytab list 
/etc/krb5.keytab:
 
 Vno Type Principal Aliases 
 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 Host/b1.dmz-int.example.org @ MYEXAMPLE.ORG 
 7 aes128-cts-hmac-sha1-96 Host /b1.dmz-int。 [email protected] 
 7 aes256-cts-hmac-sha1-96 Host/b1.dmz-int.example.org @ MYEXAMPLE.ORG 
 7 arcfour-hmac-md5 ldap/[email protected] 
 7 aes128-cts-hmac-sha1-96 ldap/[email protected] 
 7 aes256 -cts-hmac-sha1-96 ldap/[email protected] 
 7 arcfour-hmac-md5 ldap/[email protected] 
 7 aes128-cts-hmac-sha1-96 ldap/[email protected] 
 7 aes256-cts-hmac-sha1-96 l dap/ldap.dmz-int.example.org @ MYEXAMPLE.ORG 
 7 arcfour-hmac-md5 ldap/ldap.unimore.it @ MYEXAMPLE.ORG 
 7 aes128-cts-hmac-sha1 -96 ldap/[email protected] 
 7 aes256-cts-hmac-sha1-96 ldap/[email protected] 

ldap2.myexample.orgb1.dmz-int.example.orgCNAMEです

これで、GSSAPIを使用してLDAPサーバーに接続できます。

$ 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であり、CNAMEldap.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/[email protected])が見つかりません)

そして今、SASLは機能しません。サーバーのキータブに追加のSPNが必要ですか? DNSの修正が必要ですか?プロキシクエリがldap/[email protected]ではなくldap/[email protected]プリンシパルを検索するのはなぜですか?

参考として、haproxyconfファイルに従います。

 $ cat/etc/haproxy/haproxy.cfg
global
log/ dev/log local0 
#log/dev/log local1notice 
 chroot /var/lib/haproxy
 stats socket /run/haproxy/admin.sock mode 660 level admin 
 stats timeout 30s 
 user haproxy 
 group 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-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 
 frontend ldap_service_front 
 log global 
 mode tcp 
バインド*:389 
説明LDAPサービス
オプションsocket-stats 
オプションtcpka 
オプションtcplog 
タイムアウトクライアント10秒
 default_backend ldap_service_back 
 
 backend ldap_service_back 
 log global 
 server ldap-1 b1.myexample.org:389 check fall 1 rise 1 inter 2s 
 server ldap-2 b2.myexample.org:389 check fall 1 rise 1 inter 2s 
 mo de tcp 
 balance lessconn 
 option tcpka 
 option ldap-check 
 timeout server 10s 
 timeout connect 1s 
5
473183469

ignore_acceptor_hostname = trueまたは[libdefaults]の適切なサブセクションに [appdefaults] が必要です。

ignore_acceptor_hostname
ホストベースのサービスプリンシパルのGSSAPIまたはkrb5セキュリティコンテキストを受け入れる場合、呼び出し元のアプリケーションから渡されたホスト名をすべて無視し、サービス名とレルム名(指定されている場合)に一致するキータブのサービスプリンシパルに対してクライアントが認証できるようにします。 )。このオプションは、マルチホームホスト上のサーバーアプリケーションの管理上の柔軟性を向上させることができますが、仮想ホスティング環境のセキュリティを損なう可能性があります。
デフォルト値はfalseです。リリース1.10の新機能。

3
84104