변수 및 도메인

변수 및 도메인

내 시스템은 이렇게 구성되어 있어요.

smtp --> 접미사 --> 비둘기장(LMTP를 통해) --> 사서함

까다로운 부분은 인증이 LDAP에 대한 것이라는 점입니다.

일반적인 LDAP 항목은 다음과 같습니다.

CN=Jon Doe
uid=jond
[email protected]

이제 일어나는 일은 postfix가 메일을 비둘기장으로 밀어넣는 것입니다. 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를 전달하여 비둘기장에 사용하기 쉽기 때문에 가능합니다.

postfix가 그것을 사용할 때 어떻게든 비둘기장에게 다르게 하라고 지시해야 합니다...

/etc/dovecot/dovecot-ldap.conf.ext

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

이것이 그렇게 되어 있는지는 모르겠지만 비둘기장에서 LDAP 구성을 다음과 같이 변경했습니다.

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

uid=%u인 부분 메일 클라이언트는 UID(사용자 이름)를 통해 로그인하기 때문에 메일 클라이언트에서 인증이 필요합니다.

postfix와 postfix로부터 LMTP 수신을 위해 mail=%u 필요한 부분은 수신자 메일만 알 수 있습니다.

uid는 메일 주소가 아니기 때문에 이 솔루션이 작동하고 충돌이 발생하지 않을 것이라고 생각합니다. 나에게도 이해가 되지만 Courier가 왜 더 우아하게 처리할 수 있었는지 궁금합니다.

나는 그것이 설계된 방식이 아니라고 생각하기 때문에 질문을 해결하지 않을 것입니다.

답변2

%u 대신 %n 변수를 사용하지 않으셨나요?
이것을 확인하십시오 :https://wiki.dovecot.org/Variables

그리고 이것은 다음의 추출물입니다.https://wiki2.dovecot.org/AuthDatabase/LDAP/Userdb

변수 및 도메인

사용자 이름과 도메인은 변수 %n과 %d를 사용하여 구별할 수 있습니다. 이전 사용자 이름은 "@" 문자로 분할됩니다. 이전 사용자 이름은 다음과 같습니다.
- LMTP의 경우 user@hostname이 됩니다. 여기서 호스트 이름은 예를 들어 Postfix 구성에 따라 달라집니다. -IMAP의 경우 비밀번호 데이터베이스가 사용자 이름으로 지정한 것이 무엇이든 됩니다. (LDAP) 비밀번호 데이터베이스에 "user_attrs = =user=%n"이 있으면 로그인 이름의 도메인 부분이 비밀번호 데이터베이스에 의해 제거됩니다. UserDB에는 도메인 부분이 표시되지 않습니다. 즉, %n과 %u는 UserDB에서 동일합니다.

도마

관련 정보