Eu tenho um sistema Unix onde as contas de usuário existem somente no LDAP. Estou usando libnss-ldapd com nscd para fazer isso e funciona muito bem. O postfix entrega emails como esperado em circunstâncias normais.
No entanto, no caso de o servidor LDAP estar inativo e o mapa do usuário não estar totalmente armazenado em cache no nscd, os usuários parecem não existir (ou seja, getent passwd username
não retorna nenhum resultado), portanto o local (8) rígido envia e-mails com um Erro "usuário desconhecido". Isso é muito ruim .
A configuração atual inclui:
smtpd_smtpd_reject_unlisted_recipient = yes
local_recipient_maps = $alias_maps, ldap:/etc/postfix/ldap-passwd.cf
mailbox_transport_maps = ldap:/etc/postfix/ldap-passwd.cf
O correio proveniente de SMTP é tempfails corretamente quando o serviço LDAP não está disponível. No entanto, os e-mails originados neste host (por exemplo, usando o mail (1)) não.
Apr 25 15:25:33 testmail postfix/local[5972]: warning: dict_ldap_lookup: Search error -1: Can't contact LDAP server
Apr 25 15:25:33 testmail postfix/local[5972]: 29B4847DB: to=<ENVELOPE_TO_ADDRESS>, orig_to=<ENVELOPE_FROM_ADDRESS>, relay=local, delay=0.12, delays=0.01/0/0/0.11, dsn=5.1.1, status=bounced (unknown user: "ENVELOPE_TO_ADDRESS_LOCALPART")
Tenho quase certeza de que o mapa está configurado corretamente porque tudo funciona se o serviço LDAP estiver disponível, incluindo o caso em que o NSS não consegue ver o mapa LDAP porque o nslcd está parado. Deixar mailbox_transport_maps como padrão (vazio) produz os mesmos resultados, exceto sem o erro de conexão LDAP. Não há melhorias se o proxymap (8) for usado.
Como faço o Postfix adiar (em vez de rejeitar) as mensagens recebidas quando o LDAP está inativo?
Esta questão foi editada significativamente desde que foi perguntada pela primeira vez. A pergunta original perguntou como fazer o smtpd (8) tempfail quando o LDAP não está disponível; Acontece que já estava fazendo isso. O problema real foi mais tarde no processo de entrega.
Possivelmente relacionado: