Por que o postfix entregou uma notificação de devolução para um arquivo de spool local, quando a entrega para este usuário foi desativada?

Por que o postfix entregou uma notificação de devolução para um arquivo de spool local, quando a entrega para este usuário foi desativada?

Minha configuração do postfix permite email através de vários locais_recipient_maps. No entanto, a entrega para "proxy:unix:passwd.byname" é especificamentedesabilitado. Isso normalmente impede a entrega para usuários locais do Unix:

$ getent passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/bin/sh
$ nc localhost 25
220 my.mail.host ESMTP Postfix
helo localhost
250 my.mail.host
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
550 5.1.1 <[email protected]>: Recipient address rejected: User unknown in local recipient table
rcpt to:www-data
550 5.1.1 <www-data>: Recipient address rejected: User unknown in local recipient table

No entanto, esta manhã notei um e-mail entregue no arquivo de spool de correio www-data local. Olhando para dentro, vejo que:

  • Foi uma mensagemde [e-mail protegido], enviado por um host diferente em nossa rede, usando my.mail.host como smarthost
  • Ele permaneceu na fila my.mail.host por vários dias enquanto tentava novas tentativas
  • Em seguida, saltou
  • A devolução foi entregue em um arquivo de spool de e-mail "www-data" em my.mail.host

Então minha pergunta é:por que isso aconteceu e como evito que isso aconteça no futuro?

Responder1

Suposição

Você disse

a entrega para "proxy:unix:passwd.byname" está especificamente desabilitada. Isso normalmente impede a entrega para usuários Unix locais.

Portanto, posso presumir que você remove partes proxy:unix:passwd.byname de local_recipient_maps. Por padrão, o valor deste parâmetro é

# postconf -d local_recipient_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps

E você muda para

# postconf local_recipient_maps
local_recipient_maps = $alias_maps

Análise

Então, por que ele rejeita mensagens normais, mas as mensagens devolvidas ainda estão sendo enviadas?

Para respondê-la, precisamos ter uma visão geral doVisão geral da arquitetura Postfix, especialmente quando o postfix recebe email

                            trivial-
                           rewrite(8)
Network ->  smtpd(8)           |  ^    
                       \       v  |
Network ->  qmqpd(8)    ->  cleanup(8)  ->  incoming
                       /
            pickup(8)   <-  maildrop
                                ^
                                |
Local   ->  sendmail(1) ->  postdrop(1)

O Postfix só consulta local_recipient_mapsquando verifica o email recebido via smtpd. Por que? Porque as verificações foram realizadas quando smtpd_reject_unlisted_recipiento valor do parâmetro é 'yes' ou você definiu reject_unlisted_recipientsmtpd_*_restrictions (observe a palavra smtpd no nome de ambos os parâmetros). Verhomem pós-conflitopara detalhes do parâmetro. Esta verificação está habilitada por padrão. Isso explica porque seu e-mail de teste foi rejeitado pelo postfix.

Quicaré um email especial na arquitetura postfix. É gerado internamente pelo postfix para informar o relatório de status de (não) entrega ao remetente. Isso fluiatravés do postfix diretamente para limpeza, contornando smtpd. É por isso que www-dataainda recebo e-mails devolvidos.

Solução

Em vez de rejeitá-lo, você pode enviá-lo para o buraco negro commailbox_transport_mapsedescartarserviço.

Para fazer isso, defina mailbox_transport_maps

#main.cf
mailbox_transport_maps = hash:/etc/postfix/wwwdata-blackhole

#/etc/postfix/wwwdata-blackhole
www-data   discard:silently

Agora, sempre que www-data receber um e-mail, ele será descartado silenciosamente.

informação relacionada