Variáveis ​​e domínios

Variáveis ​​e domínios

meu sistema está configurado assim.

smtp -> postfix -> pombal (via LMTP) -> caixa de correio

A parte complicada é que a autenticação é contra LDAP.

Uma entrada LDAP típica é semelhante a esta:

CN=Jon Doe
uid=jond
[email protected]

O que acontece agora é que o postfix está enviando o correio para o pombal. O Dovecot está realizando uma pesquisa no userdb, mas com base no endereço de e-mail de destino que é "[e-mail protegido]".

Então o LDAP procura (uid=%u) que então é ([e-mail protegido]).

O Postfix está enviando isso através da pilha virtual, então a parte virtual é configurada assim:

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

O que eu esperava é que o postfix estivesse usando o virtual_mailbox_maps para pesquisar o usuário e passá-lo para o LMTP para que o dovecot possa fazer uma pesquisa no userdb. Como o postfix não sabe como fazer e não encontro um parâmetro virtual_map* que possa fazer isso, não sei qual seria o procedimento correto.

O postfix deve procurar o usuário via LDAP e enviá-lo para o LMTP? Ou o LMTP deveria fazer uma pesquisa com base no endereço de e-mail do destinatário?

EDIT: devo acrescentar que a parte IMAP do dovecot funciona bem quando me conecto a um cliente de e-mail para receber o e-mail. Ele procura tudo corretamente com base no meu nome de login, que é uid. É claro que isso é possível, pois quando eu faço login no IMAP eu passo meu uid para que seja fácil usá-lo no pombal.

De alguma forma, tenho que dizer ao dovecot para fazer diferente quando o postfix o estiver usando ...

/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))

Responder1

Não sei se deveria ser assim, mas alterei a configuração do ldap no dovecot assim:

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

A parte em que uid=%u preciso de autenticação de um cliente de email porque o cliente de email está efetuando login via UID (nome de usuário).

A parte onde mail=%u eu preciso para receber LMTP do postfix e do postfix apenas conhece o e-mail do destinatário.

Como uid nunca é um endereço de e-mail, acho que esta solução funcionará e não criará conflitos. Também faz sentido para mim, mas me pergunto por que Courier poderia lidar com isso de maneira mais elegante.

Não vou resolver a questão, pois acho que não é a maneira projetada.

Responder2

Você não deveria usar a variável %n em vez de %u?
Verifique isto:https://wiki.dovecot.org/Variáveis

E este é um extrato dehttps://wiki2.dovecot.org/AuthDatabase/LDAP/Userdb

Variáveis ​​e domínios

Nomes de usuários e domínios podem ser diferenciados usando as variáveis ​​%n e %d. Eles dividiram o nome de usuário anterior no caractere “@”. O nome de usuário anterior é:
- Para LMTP, será usuário@hostname, onde o nome do host depende, por exemplo, da configuração do Postfix. -Para IMAP, será qualquer senha que o banco de dados tenha designado como nome de usuário. Se o banco de dados de senhas (LDAP) tiver "user_attrs = =user=%n", a parte do domínio do nome de login será removida pelo banco de dados de senhas. O UserDB não verá nenhuma parte do domínio, ou seja, %n e %u são a mesma coisa para o UserDB.

Tomás

informação relacionada