状況: フロントエンド サーバー 1 台で Dovecot を IMAP/POP3/ManageSieve プロキシとして実行し、バックエンドに複数の IMAP サーバー (Dovecot、Exchange など) が混在しています。Dovecot の passdb は、単純なユーザー/ホスト マッピングを含む MySQL に対して検索を実行し、実際の認証はバックエンドの IMAP サーバーで行われます。構成は、おおよそ次のようになります。http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy
ここで、フロント フェイス サーバーに Postfix インスタンスを追加し、送信ポートをリッスンして、ローカル Dovecot の UNIX ソケットを使用して SASL 経由でユーザーを認証したいと思います。その目的は、ユーザーはすべてのメール関連サービスに対して 1 つのホスト名、1 つのユーザー名、1 つのパスワードを覚えておくだけでよいというものです。
問題は、Dovecot がプロキシ モードで動作していることです。つまり、password_query はパスワードとして NULL を返し、明示的に「Y」を含むフィールド「nopasswd」を返します。したがって、ユーザーは UNIX ソケットに対して認証できません。
私がやりたいことは、Dovecot に、imap/pop3/managesieve サービス用に 1 つの passdb を使用し、"auth" サービス用に別の passdb を使用するように説得することです。
以下の構成スニペットは機能しませんが、私が達成したいことを示しているはずです。
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'
何かヒントはありますか?