使用 Kerberos/GSSAPI 的 Dovecot IMAP 身份驗證代理
我正在嘗試將 Dovecot 設置為身份驗證反向代理,在已經執行的 IMAP 伺服器之前完成以下操作:
- 讓 Dovecot 使用 Kerberos/GSSAPI 對使用者進行身份驗證(以允許單點登錄)。
- 如果通過正確的身份驗證,使用正常 AUTH=PLAIN 方法使用經過身份驗證的使用者名將 Dovecot 代理到現有 IMAP 伺服器,但使用隨機/空密碼。我正是想要這樣,因為我會讓後端 IMAP 伺服器信任身份驗證代理,但它仍然需要使用虛擬密碼的 PLAIN IMAP 登錄。
我走了多遠?
- 我知道如何配置 Dovecot 以使用 Kerberos/GSSAPI 進行身份驗證:https ://wiki.dovecot.org/Authentication/Kerberos
- 我知道如何將 Dovecot 配置為代理到後端 IMAP 伺服器:https ://wiki.dovecot.org/PasswordDatabase/ExtraFields/Proxy
我正在處理的主要挑戰是兩者的結合。Kerberos/GSSAPI 身份驗證頁面從以下內容開始:
Kerberos 身份驗證機制不需要
passdb
,但您確實需要 ,userdb
以便 Dovecot 可以查找使用者特定的資訊,例如他們的郵箱儲存在哪裡。好吧,這對我來說就像一個雙重反特徵:我
passdb
首先需要一個代理,而且我不希望它知道“比如他們的郵箱儲存在哪裡”,因為它應該只是代理所有內容到後端伺服器。那麼,任何人都可以在這裡指出我正確的方向嗎?
(我剛開始使用 Dovecot,所以請多多包涵。另外,順便說一下,使用 Dovecot 不是必需的。我用作後端的 IMAP 伺服器是 Kopano 網關,它似乎缺乏 SSO 支持,但確實如此讓我繞過密碼驗證。)
最後通過 Alex 在另一個答案中的提示以及Dovecot 郵件列表中的一些最終幫助,Timo - Dovecot 原作者 - 回復了它。
下面的完整範例
dovecot.conf
。主要技巧是該部分的完整args
行passdb
。沒有password=something
ornopassword=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/mailhost.mydomain.tld@MY-REALM.DOMAIN.TLD # 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>
將 passdb attrs 設置為包含
pass=
主密碼。Dovecot 需要密碼才能嘗試使用代理。使用 GSSAPI 顯然沒有密碼,因此請提供您的主密碼(或者使用 kopano,如果您已bypass_auth
設置,您可以輸入任何內容)。請參閱Dovecot Docs,特別是“主密碼”部分。