Dovecot

使用 Kerberos/GSSAPI 的 Dovecot IMAP 身份驗證代理

  • August 1, 2019

我正在嘗試將 Dovecot 設置為身份驗證反向代理,在已經執行的 IMAP 伺服器之前完成以下操作:

  • 讓 Dovecot 使用 Kerberos/GSSAPI 對使用者進行身份驗證(以允許單點登錄)。
  • 如果通過正確的身份驗證,使用正常 AUTH=PLAIN 方法使用經過身份驗證的使用者名將 Dovecot 代理到現有 IMAP 伺服器,但使用隨機/空密碼。我正是想要這樣,因為我會讓後端 IMAP 伺服器信任身份驗證代理,但它仍然需要使用虛擬密碼的 PLAIN IMAP 登錄。

我走了多遠?

我正在處理的主要挑戰是兩者的結合。Kerberos/GSSAPI 身份驗證頁面從以下內容開始:

Kerberos 身份驗證機制不需要passdb,但您確實需要 ,userdb以便 Dovecot 可以查找使用者特定的資訊,例如他們的郵箱儲存在哪裡。

好吧,這對我來說就像一個雙重反特徵:我passdb首先需要一個代理,而且我不希望它知道“比如他們的郵箱儲存在哪裡”,因為它應該只是代理所有內容到後端伺服器。

那麼,任何人都可以在這裡指出我正確的方向嗎?

(我剛開始使用 Dovecot,所以請多多包涵。另外,順便說一下,使用 Dovecot 不是必需的。我用作後端的 IMAP 伺服器是 Kopano 網關,它似乎缺乏 SSO 支持,但確實如此讓我繞過密碼驗證。)

最後通過 Alex 在另一個答案中的提示以及Dovecot 郵件列表中的一些最終幫助,Timo - Dovecot 原作者 - 回復了它。

下面的完整範例dovecot.conf。主要技巧是該部分的完整argspassdb。沒有password=something or 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/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,特別是“主密碼”部分。

引用自:https://serverfault.com/questions/951010