Os e-mails são devolvidos com 'usuário desconhecido' ao usar o LDAP na configuração virtual do Postfix

1

Eu venho lidando com esse problema há vários dias e parece ter esgotado toda a solução de problemas, então pensei em procurar ajuda da comunidade.

Sem introduzir o OpenLDAP na infraestrutura de correio, o Postfix e o Dovecot estão operando bem. Nos últimos dias, o MTA do Postfix foi configurado com configurações LDAP virtuais, mas os e-mails estão exibindo um status devolvido, embora o Postfix possa ler e saber se esses usuários de e-mail reais, aliases de e-mail e domínios virtuais existem. Aqui estão as configurações virtuais pertinentes no meu postfix main.cf.

NOTA : Existem apenas 3 configurações de LDAP virtuais

virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_minimum_uid = 5000 virtual_mailbox_domains = ldap:/etc/postfix/ldap-virtual-domains.cf virtual_mailbox_maps = ldap:/etc/postfix/ldap-vmailbox.cf virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf virtual_mailbox_limit = 512000000 virtual_mailbox_base = /home/vmail transport_maps = hash:/etc/postfix/transport

Aqui está o conteúdo de cada arquivo LDAP virtual.

ldap-virtual-domains.cf

server_host = ldap://ldap.example.net/ search_base = ou=Domains,dc=example,dc=net version = 3 bind = no query_filter = (&(ObjectClass=dNSDomain)(dc=%s)) result_attribute = dc

ldap-vmailbox.cf

server_host = ldap://ldap.example.net/ search_base = ou=Mail,dc=example,dc=net version = 3 bind = no query_filter = (&(objectclass=inetOrgPerson)(mail=%s)) result_attribute = mail

ldap-aliases.cf

server_host = ldap://ldap.example.net/ search_base = ou=Mail,dc=example,dc=net version = 3 bind = no query_filter = (&(objectclass=inetLocalMailRecipient)(mailLocalAddress=%s)) result_attribute = mail

Verificar se o Postfix pode ler e processar todos os 3 arquivos virtuais do LDAP é bem-sucedido

ldap-virtual-domains.cf:

postmap -q example.net ldap:/etc/postfix/ldap-virtual-domains.cf example.net %código% example.org %código% example.com

ldap-vmailbox.cf:

postmap -q example.org ldap:/etc/postfix/ldap-virtual-domains.cf [email protected] %código% [email protected] %código% [email protected]

ldap-aliases.cf:

postmap -q example.com ldap:/etc/postfix/ldap-virtual-domains.cf [email protected] %código% [email protected]

Isso é o que eu vejo nos registros de e-mail:

Oct 26 16:54:17 example.net postfix/cleanup[2789]: 3D26A105CC: info: header Subject: testing virtual LDAP from [REDACTED]; [email protected] [email protected] proto=ESMTP helo=macbook-air.moon
Oct 26 16:54:17 example.net postfix/cleanup[2789]: 3D26A105CC: [email protected]
Oct 26 16:54:17 example.net opendkim[11877]: 3D26A105CC: [REDACTED] not internal
Oct 26 16:54:17 example.net opendkim[11877]: 3D26A105CC: not authenticated
Oct 26 16:54:17 example.net opendkim[11877]: 3D26A105CC: no signature data
Oct 26 16:54:17 example.net postfix/qmgr[26221]: 3D26A105CC: [email protected], size=571, nrcpt=1 (queue active)
Oct 26 16:54:17 example.net postfix/smtpd[2461]: disconnect from [REDACTED] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Oct 26 16:54:17 example.net postfix/pipe[2791]: 3D26A105CC: [email protected], relay=dovecot, delay=0.12, delays=0.08/0.01/0/0.02, dsn=5.1.1, status=bounced (user unknown)
Oct 26 16:54:17 example.net postfix/cleanup[2789]: 55F2B1080A: [email protected]
Oct 26 16:54:17 example.net postfix/qmgr[26221]: 55F2B1080A: from=, size=2460, nrcpt=1 (queue active)
Oct 26 16:54:17 example.net postfix/bounce[2793]: 3D26A105CC: sender non-delivery notification: 55F2B1080A
Oct 26 16:54:17 example.net postfix/qmgr[26221]: 3D26A105CC: removed
Oct 26 16:54:17 example.net postfix/smtp[2794]: 55F2B1080A: [email protected], relay=none, delay=0.02, delays=0/0.01/0/0, dsn=5.4.4, status=bounced (Host or domain name not found. Name service error for name=macbook-air.moon type=A: Host not found)

Contas de e-mail válidas existentes no LDAP mostram isso nos registros: postmap -q [email protected] ldap:/etc/postfix/ldap-vmailbox.cf

[email protected] é um endereço de e-mail real no LDAP e [email protected] é um verdadeiro alias no LDAP. O postfix não tem nenhum problema em encontrá-los ao validar com postmap -q [email protected] ldap:/etc/postfix/ldap-vmailbox.cf .

Aqui está a configuração completa do Postfix:

alias_database = $alias_maps
alias_maps = hash:/etc/postfix/aliases
append_dot_mydomain = no
broken_sasl_auth_clients = yes
command_directory = /usr/bin
compatibility_level = 2
daemon_directory = /usr/lib/postfix/bin
data_directory = /var/lib/postfix
debug_peer_level = 2
debug_peer_list = 127.0.0.1
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
header_checks = regexp:/etc/postfix/header_checks
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = ipv4
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailbox_command = /usr/lib/dovecot/deliver
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
message_size_limit = 20480000
meta_directory = /etc/postfix
milter_default_action = accept
milter_protocol = 2
mydestination =
mydomain = example.net
myhostname = mail.$mydomain
mynetworks = 127.0.0.0/8 10.8.0.0/24 192.168.128.0/17 [SERVER IP REDACTED] [::1]/128 [2600:3c01::]/64 [fe80::]/64
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases
non_smtpd_milters = inet:127.0.0.1:8891
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
sample_directory = /etc/postfix/sample
sendmail_path = /usr/bin/sendmail
setgid_group = postdrop
shlib_directory = /usr/lib/postfix
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3
smtp_tls_note_starttls_offer = yes
smtp_tls_protocols = !SSLv2,!SSLv3
smtp_tls_security_level = may
smtpd_error_sleep_time = 1s
smtpd_hard_error_limit = 20
smtpd_milters = inet:127.0.0.1:8891
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service inet:mail.example.net:12340
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain =
smtpd_soft_error_limit = 10
smtpd_tls_CAfile = /etc/postfix/ssl/PositiveSSL.ca-bundle
smtpd_tls_cert_file = /etc/postfix/ssl/STAR_example_net.crt
smtpd_tls_key_file = /etc/postfix/ssl/key.pem
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtpd_tls_protocols = !SSLv2,!SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
transport_maps = hash:/etc/postfix/transport
unknown_local_recipient_reject_code = 550
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = ldap:/etc/postfix/ldap-virtual-domains.cf
virtual_mailbox_limit = 512000000
virtual_mailbox_maps = ldap:/etc/postfix/ldap-vmailbox.cf
virtual_minimum_uid = 5000
virtual_transport = dovecot
virtual_uid_maps = static:5000

Exemplo de um usuário válido no LDAP com vários aliases

usuário LDAP

Parece que estou tão perto, mas talvez outro par de olhos possa fornecer algumas dicas para resolver esse problema. Qualquer entrada é muito apreciada.

UPDATE 1

Consegui resolver os erros postmap -q [email protected] ldap:/etc/postfix/ldap-vmailbox.cf alterando o valor de postmap -q [email protected] ldap:/etc/postfix/ldap-aliases.cf em main.cf de

postmap -q [email protected] ldap:/etc/postfix/ldap-aliases.cf

para

Oct 26 16:56:14 example.net postfix/pipe[3592]: 457871080A: [email protected], [email protected], relay=dovecot, delay=0.03, delays=0.01/0/0/0.02, dsn=5.1.1, status=bounced (user unknown)

Em master.cf eu mudei essa linha

postmap -q

para esta linha

status=bounced (user unknown)

Eu adicionei um novo usuário no LDAP chamado [email protected] e um rápido virtual_transport prova que o Postfix sabe sobre [email protected], mas eu vejo esse erro.

virtual_transport = dovecot

Após um pouco mais de pesquisa, comecei a olhar para a minha configuração LDAP do Dovecot, especificamente dovecot-ldap.conf.ext

virtual_transport = lmtp:unix:private/dovecot-lmtp

Eu não vejo mais dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient} nos registros de e-mail, mas vejo tentativas de login com falha. Eu não sei ao certo, mas acho que isso poderia ser do dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient} ou qualquer outro atributo LDAP do meu dovecot-ldap.conf.ext.

postmap -q

UPDATE 2

Eu criei uma conta de administrador no OpenLDAP chamada Dovecot e dei a ela Oct 26 23:46:46 example.net dovecot: quota-status([email protected]): Error: User initialization failed: Namespace '': stat(/home/vmail/postmaster/.Maildir) failed: Permission denied (euid=5003() egid=5000(vmail) missing +x perm: /home/vmail, dir owned by 5000:5000 mode=0700) Oct 26 23:46:46 example.net postfix/smtpd[25851]: NOQUEUE: reject: RCPT from[REDACTED]: 450 4.7.1 : Recipient address rejected: Invalid user settings. Refer to server log for more information.; from= to= proto=ESMTP helo= access com essa linha

hosts = ldap.example.net auth_bind = no ldap_version = 3 base = ou=Mail,dc=example,dc=net deref = never scope = subtree user_attrs = uidNumber=uid,gidNumber=gid,mailHomeDirectory=home,quotaBytes=quota_rule=*:bytes=%$ user_filter = (&(objectclass=inetOrgPerson)(mail=%u)) pass_attrs = mail=user,userPassword=password pass_filter = (&(objectClass=posixAccount)(uid=%u)) default_pass_scheme = SSHA

Agora, o Dovecot obtém sucesso na leitura do atributo userPassword. Veja como user unknown se parece com a vinculação ativada.

user_attrs

Ao tentar fazer login na conta do vmail, vejo que o Dovecot não conseguiu encontrar o usuário no userdb

Oct 27 00:01:19 example.net dovecot: imap-login: Disconnected (auth failed, 1 attempts in 2 secs): user=<[email protected]>, method=PLAIN, rip=192.168.176.128, lip=192.168.176.128, TLS: Disconnected, session=<w/r1pBAj0YjAqLCA>

Se eu alterar o atributo read para a linha abaixo I pode fazer login com êxito.

by dn="uid=dovecot,ou=System,dc=example,dc=net" read

Mas as mensagens começam a saltar novamente.

dovecot-ldap.conf.ext

hosts = ldap.example.net auth_bind = yes auth_bind_userdn = uid=%u,ou=Mail,dc=example,dc=net dn = uid=dovecot,ou=System,dc=example,dc=net dnpass = password ldap_version = 3 base = ou=Mail,dc=example,dc=net deref = never scope = subtree user_filter = (&(objectclass=inetOrgPerson)(mail=%u)) pass_filter = (&(objectclass=inetOrgPerson)(mail=%u)) default_pass_scheme = SSHA user_attrs = uidNumber=uid,gidNumber=gid,mailHomeDirectory=,quotaBytes=quota_rule=*:bytes=%$ pass_attrs = mail=uid,userPassword=password

Neste ponto, acho que o problema pode ser o usuário e passar filtros, mas eu realmente não sei mais. Esta é a configuração atual do Dovecot de Oct 27 20:42:47 example.net dovecot: auth: Error: ldap(vmail,192.168.176.128,<8C7h/CEjo5DAqLCA>): user not found from userdb Oct 27 20:42:47 example.net dovecot: imap: Error: Authenticated user not found from userdb, auth lookup id=4111597569 (client-pid=26724 client-id=1) Oct 27 20:42:47 example.net dovecot: imap-login: Internal login failure (pid=26724 id=1) (internal failure, 1 successful auths): user=<vmail>, method=PLAIN, rip=192.168.176.128, lip=192.168.176.128, mpid=26726, secured, session=<8C7h/CEjo5DAqLCA> e a parte LDAP do Dovecot: link

Espero que todos possam fornecer pistas sobre o que pode estar faltando ou bagunça para que os logins de usuários e o envio / recebimento de e-mails sejam bem-sucedidos.

    
por rootfiltered 27.10.2015 / 02:30

2 respostas

0

Isso foi resolvido. Em dovecot-ldap.conf.ext alterei os seguintes filtros.

user_attrs = user_filter = (&(objectclass=inetOrgPerson)(uid=%n)(mailEnabled=TRUE))

Usado para pesquisa de dn

pass_attrs = mail=user,userPassword=password pass_filter = (&(objectclass=inetOrgPerson)(uid=%n))

Configuração completa do dovecot-ldap.conf.ext

hosts = ldap.example.net auth_bind = yes dn = uid=dovecot,ou=System,dc=example,dc=net dnpass = PASS ldap_version = 3 base = ou=Mail,dc=example,dc=net deref = never scope = subtree default_pass_scheme = SSHA user_attrs = user_filter = (&(objectclass=inetOrgPerson)(uid=%n)) pass_attrs = mail=user,userPassword=password pass_filter = (&(objectclass=inetOrgPerson)(uid=%n))

Eu também tive que atualizar o mail_location em /etc/dovecot/conf.d/10-mail.conf para

mail_location = maildir:%Lh/Maildir/:INDEX=%Lh/Maildir/

Verificações finais de permissão

  • verified /home/vmail/* tem permissões de usuário / grupo adequadas como vmail:vmail
  • uidNumber e gidNumber verificados são 5000

O Dovecot Local Delivery Agent agora pode processar e-mails e armazená-los em /home/vmail/user@domain diretórios.

    
por 01.11.2015 / 07:43
1
pass_attrs = mail=user,userPassword=password

está provavelmente errado. Isso significa "usar email como nome de atributo do usuário ldap e userPassword como nome do atributo de senha".

Eu acredito que deveria ler:

pass_attrs = mail=uid,userPassword=password

Você pode ver os logs do OpenLDAP.

Eu também suspeito:

user_attrs = mailHomeDirectory=home

porque há um confronto semântico. Atributo LDAP home é usado para o diretório inicial Unix, mas agora é usado como o local maildir. Você poderia verificar isso também?

    
por 27.10.2015 / 08:31