変数とドメイン

変数とドメイン

私のシステムはこのように設定されています。

smtp --> postfix --> dovecot (LMTP 経由) --> メールボックス

難しいのは、認証が LDAP に対して行われることです。

典型的な LDAP エントリは次のようになります。

CN=Jon Doe
uid=jond
[email protected]

今起こっていることは、postfixがメールをdovecotにプッシュしているということです。dovecotはuserdb検索を実行しますが、宛先メールアドレスに基づいて「[メールアドレス]「」。

そこでLDAPは(uid=%u)を探し、それが([メールアドレス])。

Postfix はこれを仮想スタック経由で送信するため、仮想部分は次のように設定されます。

virtual_alias_maps = ldap:/etc/postfix/ldap/ldap-aliases.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /
virtual_mailbox_domains = ldap:/etc/postfix/ldap/virtual_domains.cf

virtual_mailbox_maps = ldap:/etc/postfix/ldap/ldap-accounts.cf
virtual_minimum_uid = 5000
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_uid_maps = static:5000

私が期待していたのは、postfix が virtual_mailbox_maps を使用してユーザーを検索し、そのユーザーを LMTP に渡して、dovecot が userdb 検索を実行できるようにすることです。postfix はそれを実行する方法を知らず、それを実行できる virtual_map* パラメータも見つからないため、正しい手順が何であるかはわかりません。

postfix は LDAP 経由でユーザーを検索し、それを LMTP に送信する必要がありますか? または、LMTP は受信者の電子メール アドレスに基づいて検索を行う必要がありますか?

編集: メール クライアントに接続してメールを受信すると、dovecot の IMAP 部分は正常に機能することを付け加えておきます。ログイン名 (uid) に基づいてすべてを正しく検索します。もちろん、IMAP にログインするときに uid を渡すので、dovecot で簡単に使用できるため、これが可能になります。

postfix がそれを使用しているときは、どういうわけか dovecot に別の方法で実行するように指示する必要があります...

ldap.conf は、次のファイルから構成されます。

hosts = localhost
dn = cn=linagent,ou=people,dc=example,dc=org
dnpass = SECRET
tls = no
auth_bind = yes
base = dc=example,dc=org
deref = never
scope = subtree
user_attrs = \
  =home=%{ldap:homeDirectory}, \
  =uid=5000, \
  =gid=5000, \
  =mail=maildir:%{ldap:mailMessageStore}
user_filter = (&(objectClass=inetOrgPerson)(uid=%u))
pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectClass=inetOrgPerson)(uid=%u))

答え1

これがそのようになっているかどうかはわかりませんが、dovecot の LDAP 構成を次のように変更しました。

user_filter = (&(objectClass=inetOrgPerson)(|(uid=%u)(mail=%u)))
pass_filter = (&(objectClass=inetOrgPerson)(|(uid=%u)(mail=%u)))

メール クライアントは UID (ユーザー名) 経由でログインするため、メール クライアントからの認証には uid=%u の部分が必要です。

mail=%u の部分は postfix からの LMTP 受信に必要であり、postfix は受信者のメールを知っているだけです。

uid はメール アドレスではないため、このソリューションは機能し、競合は発生しないと考えられます。これは私にとっても理にかなっていますが、なぜ Courier がこれをよりエレガントに処理できるのか疑問に思います。

ただし、これは設計された方法ではないと思うので、この質問は解決しません。

答え2

%u の代わりに %n 変数を使うべきではないでしょうか?
これを確認してください:https://wiki.dovecot.org/変数

これは抜粋ですhttps://wiki2.dovecot.org/AuthDatabase/LDAP/Userdb

変数とドメイン

ユーザー名とドメインは、変数 %n と %d を使用して区別できます。これらは、前のユーザー名を "@" 文字で分割します。前のユーザー名は次のとおりです。
- LMTP の場合、user@hostname になります。hostname は、Postfix の設定などによって異なります。 -IMAP の場合、パスワード データベースがユーザー名として指定したものになります。(LDAP) パスワード データベースに "user_attrs = =user=%n" がある場合、ログイン名のドメイン部分はパスワード データベースによって削除されます。UserDB はドメイン部分を認識しません。つまり、%n と %u は UserDB にとって同じものです。

トーマス

関連情報