Variables y dominios

Variables y dominios

mi sistema está configurado así.

smtp --> postfix --> palomar (a través de LMTP) --> buzón

La parte complicada es que la autenticación se realiza contra LDAP.

Una entrada LDAP típica tiene este aspecto:

CN=Jon Doe
uid=jond
[email protected]

Lo que pasa ahora es que Postfix está empujando el correo al palomar. Dovecot está realizando una búsqueda en la base de datos de usuario, pero en función de la dirección de correo electrónico de destino que es "[correo electrónico protegido]".

Entonces LDAP busca (uid=%u) que luego es ([correo electrónico protegido]).

Postfix envía esto a través de la pila virtual, por lo que la parte virtual se configura así:

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

Lo que esperaba es que postfix esté usando virtual_mailbox_maps para buscar al usuario y pasarlo al LMTP para que dovecot pueda realizar una búsqueda en la base de datos del usuario. Como postfix no sabe cómo hacerlo y no encuentro un parámetro virtual_map* que pueda hacerlo, no sé cuál sería el procedimiento correcto.

¿Postfix debería buscar al usuario a través de LDAP y enviarlo a LMTP? ¿O debería LMTP realizar una búsqueda en función de la dirección de correo electrónico del destinatario?

EDITAR: Debo agregar que la parte IMAP de dovecot funciona bien cuando me conecto con un cliente de correo para recibir el correo. Busca correctamente todo según mi nombre de inicio de sesión, que es uid. Por supuesto, esto es posible ya que cuando inicio sesión en IMAP paso mi uid, por lo que es fácil usarlo para dovecot.

De alguna manera tengo que decirle a dovecot que lo haga de manera diferente cuando postfix lo esté 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))

Respuesta1

No sé si se supone que esto es así, pero cambié la configuración de ldap en dovecot de esta manera:

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

La parte donde uid=%u necesito la autenticación de un cliente de correo porque el cliente de correo inicia sesión a través de UID (nombre de usuario).

La parte donde mail=%u necesito para recibir LMTP de postfix y postfix simplemente conoce el correo del destinatario.

Dado que uid nunca es una dirección de correo, supongo que esta solución funcionará y no creará ningún conflicto. Para mí también tiene sentido, pero me pregunto por qué Courier podría manejarlo de manera más elegante.

Sin embargo, no resolveré la pregunta porque creo que no es la forma diseñada.

Respuesta2

¿No deberías usar la variable %n en lugar de %u?
Mira esto :https://wiki.dovecot.org/Variables

Y este es un extracto dehttps://wiki2.dovecot.org/AuthDatabase/LDAP/Userdb

Variables y dominios

Los nombres de usuario y los dominios se pueden distinguir utilizando las variables %n y %d. Dividieron el nombre de usuario anterior en el carácter "@". El nombre de usuario anterior es:
- Para LMTP, será usuario@nombredehost, donde el nombre de host depende, por ejemplo, de la configuración de Postfix. -Para IMAP, será lo que la base de datos de contraseñas haya designado como nombre de usuario. Si la base de datos de contraseñas (LDAP) tiene "user_attrs = =user=%n", la base de datos de contraseñas eliminará la parte del dominio del nombre de inicio de sesión. UserDB no verá ninguna parte del dominio, es decir, %n y %u son lo mismo para UserDB.

tomás

información relacionada