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_maps
quando verifica o email recebido via smtpd
. Por que? Porque as verificações foram realizadas quando smtpd_reject_unlisted_recipient
o valor do parâmetro é 'yes' ou você definiu reject_unlisted_recipient
smtpd_*_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-data
ainda 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.