Назад | Перейти на главную страницу

Dovecot: использование отдельной passdb для каждой службы

Ситуация: один фронтальный сервер, на котором Dovecot работает как прокси IMAP / POP3 / ManageSieve, а в бэкенде - смесь серверов IMAP (Dovecot, Exchange, ...). Passdb Dovecot выполняет поиск в MySQL, который содержит простое сопоставление пользователя и хоста, фактическая аутентификация происходит на внутренних серверах IMAP. Конфигурация более или менее описана здесь: http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy

Теперь я хотел бы добавить экземпляр Postfix на внешний сервер, который прослушивает порт отправки и аутентифицирует пользователей через SASL, используя локальный сокет UNIX Dovecot. Идея состоит в том, что пользователю нужно запомнить только одно имя хоста, одно имя пользователя и один пароль для всех почтовых служб.

Проблема в том, что Dovecot работает в режиме прокси, что означает, что password_query возвращает NULL в качестве пароля и явно возвращает поле «nopasswd», содержащее «Y». Таким образом, пользователи не могут аутентифицироваться через сокет UNIX.

Думаю, я хочу убедить Dovecot использовать одну passdb для служб imap / pop3 / managesieve и другую для службы auth.

Приведенный ниже фрагмент конфигурации не работает, но он должен проиллюстрировать, чего я хочу достичь:

protocols = imap pop3 sieve

service auth {
    passdb sql {
        driver = sql
        args = /etc/dovecot/mysql-auth-sasl.conf.ext
    }

    unix_listener /var/spool/postfix/private/auth {
        user = postfix
        group = postfix
        mode = 0666
    }
}

# IMAP/POP3/ManageSieve auth against MySQL
passdb sql {
    driver = sql
    args = /etc/dovecot/mysql-auth-default.conf.ext
}

Пример mysql-auth-sasl.conf.ext

driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT password AS password FROM users WHERE login = '%u'

Пример mysql-auth-default.conf.ext:

driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT NULL AS password, 'Y' as nopassword, host, 'Y' AS proxy FROM users WHERE login = '%u'

Есть указатели?