Dovecot IMAP-прокси для аутентификации с использованием Kerberos/GSSAPI
Я пытаюсь настроить Dovecot для аутентификации обратного прокси-сервера перед уже запущенным IMAP-сервером, чтобы выполнить следующее:
- Пусть Dovecot аутентифицирует пользователей, используя Kerberos/GSSAPI (чтобы разрешить единый вход).
- При правильной аутентификации используйте прокси-сервер Dovecot на существующем сервере IMAP с аутентифицированным именем пользователя, используя обычный метод AUTH=PLAIN, но со случайным / пустым паролем. Я хочу именно этого, так как внутренний сервер 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 Gateway, который, похоже, не поддерживает SSO, но это делает позвольте мне обойти аутентификацию по паролю.)
0 ответов
Установите атрибуты passdb для включения pass=
мастер-пароль. Dovecot нужен пароль, чтобы попытаться использовать прокси. С GSSAPI у него, очевидно, его нет, поэтому укажите свой мастер-пароль (или с помощью kopano вы можете положить что угодно, если у вас есть bypass_auth
установлен). См. Dovecot Docs, в частности, раздел "мастер-пароль".
В конце концов он начал работать с подсказками Алекса в другом ответе и некоторой окончательной помощью в списке рассылки Dovecot, на который ответил Тимо - первоначальный автор 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/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>