web-dev-qa-db-ja.com

Kerberos / GSSAPIを使用したDovecotIMAP認証プロキシ

すでに実行中のIMAPサーバーの前で、Dovecotを認証リバースプロキシとして設定して、次のことを実行しようとしています。

  • DovecotにKerberos/GSSAPIを使用してユーザーを認証させます(シングルサインオンを許可するため)。
  • 適切に認証されている場合は、通常のAUTH = PLAINメソッドを使用して、認証されたユーザー名で既存のIMAPサーバーにDovecotプロキシを使用しますが、パスワードはランダム/空です。バックエンドIMAPサーバーに認証プロキシを信頼させるので、まさにそれが必要ですが、それでもダミーのパスワードを使用したPLAINIMAPログインが必要です。

どこまでたどり着きましたか?

私が取り組んでいる主な課題は、2つの組み合わせです。 Kerberos/GSSAPI認証ページは次のように始まります。

Kerberos認証メカニズムではpassdbは必要ありませんが、Dovecotがメールボックスの保存場所などのユーザー固有の情報を検索できるように、userdbが必要です。

まあ、これは私には二重の反機能のように読めます。そもそもプロキシするためにpassdbが必要であり、「メールボックスがどこに保存されているかなど」を認識させたくありません。すべてをバックエンドサーバーにプロキシする必要があるためです。

だから、誰かが私をここで正しい方向に向けることができますか?

(私はDovecotを始めたばかりなので、ご容赦ください。また、Dovecotを使用する必要はありません。バックエンドとして使用するIMAPサーバーはKopanoGatewayです。 SSOサポートがない のようですが、 パスワード認証をバイパスする 。)

1
gertvdijk

Passdbattrsを設定してpass=マスターパスワードを含めます。 Dovecotは、プロキシに対して試行するためにパスワードが必要です。 GSSAPIには明らかにパスワードがないので、マスターパスワードを入力します(または、kopanoでは、bypass_authが設定されている場合は何でも入力できます)。 Dovecot Docs 、特に「マスターパスワード」のセクションを参照してください。

2
Alex

最後に、Dovecotメーリングリストの 他の回答のAlexによるヒント および いくつかの最終的なヘルプ で動作するようになりました。Timo(Dovecotの元の作成者)が応答しました。

以下の_dovecot.conf_の完全な例。主なトリックは、argsセクションの完全なpassdb行です。 _password=something_または_nopassword=y_がないと、メールはローカルに保存され、プロキシがオンになっていないと見なされ、エラーError: mail_location not set and autodetection failed: Mail storage autodetection failed with home=(not set)。コメントには、より小さな警告がインラインで含まれています。

_protocols = imap

passdb {
  driver = static
  args = proxy=y Host=127.0.0.1 port=1143 pass=masterpass nopassword=y
}

# Deliberately omitted userdb, because this is a proxy.

# Kerberos authentication settings
auth_mechanisms = gssapi
auth_gssapi_hostname = mailhost.mydomain.tld
auth_realms = MY-REALM.DOMAIN.TLD
auth_default_realm = MY-REALM.DOMAIN.TLD
# This keytab file contains keys for principal imap/[email protected]
# Unlike SSL keys/certs, do not use '= <', but plain '=' to path of file.
auth_krb5_keytab = /etc/dovecot/imap.keytab
# Pass only local username part to the backend.
auth_username_format = %n

# Logging to foreground with some verbose logging for authentication.
log_path = /dev/stderr
auth_verbose = yes

# Require StartTLS or plain TLS for any interaction.
ssl = required
ssl_cert = </path/to/cert.crt
ssl_key = </path/to/key.pem
ssl_prefer_server_ciphers = yes
ssl_min_protocol = TLSv1.2
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
_

ログには次のように表示されます。

_imap-login: Info: proxy(username): started proxying to 127.0.0.1:1143: user=<username>, method=GSSAPI, rip=1.2.3.4, lip=9.9.9.9, TLS, session=<iJvnvg6P8KEKAAYE>
_
1
gertvdijk