Filtragem pós-fila do postfix somente para destinos locais

2

Eu preciso executar todos os e-mails endereçados a domínios locais (conforme definido em vmail_domains) por meio de um filtro de conteúdo pós-fila simples que, em seguida, reinicializa os e-mails processados no Postfix via sendmail.

Eu criei com êxito um filtro perl com base no exemplo de um filtro de conteúdo pós-fila simples mostrado no documento FILTER_README do postfix:

smtp      inet  n       -       n       -       -       smtpd -o content_filter=statusFilter
statusFilter unix -     n       n       -       -       pipe user=mailFilter argv=/mydir/filter.pl ${sender} ${recipient}

Infelizmente, esse filtro filtra apenas os e-mails que chegam pela Internet e perde todas as entregas locais, como mensagens de devolução do Postfix, e eu preciso processar especialmente as mensagens devolvidas, independentemente de como elas chegaram.

Existe alguma maneira de todos os e-mails endereçados a domínios Postfix locais serem filtrados com um filtro pós-fila simples, independentemente de ter chegado de uma fonte local ou remota, sem nunca filtrar nenhum e-mail enviado para remoto? ) domínios?

    
por r.j.bumble 21.01.2015 / 03:43

1 resposta

2
Infelizmente, esse filtro filtra apenas o correio que chega à Internet e perde todas as entregas locais, como mensagens de rejeição do Postfix, mensagens de outros usuários locais e mensagens de scripts locais via sendmail.

Esta é uma das limitações do filtro de conteúdo simples. Cite de documentação do Postfix

The first example is simple to set up, but has major limitations that will be addressed in a second example. Postfix receives unfiltered mail from the network with the smtpd(8) server, and delivers unfiltered mail to a content filter with the Postfix pipe(8) delivery agent. The content filter injects filtered mail back into Postfix with the Postfix sendmail(1) command, so that Postfix can deliver it to the final destination.

This means that mail submitted via the Postfix sendmail(1) command cannot be content filtered.

A solução está usando o filtro de conteúdo avançado . Ele usa o SMTP para falar com o postfix usando pipe. Como seu script atual não pode falar com o SMTP, você pode usar o smtpprox como descrito na documentação

For non-SMTP capable content filtering software, Bennett Todd's SMTP proxy implements a nice PERL/SMTP content filtering framework. See: http://bent.latency.net/smtpprox/.

Escrito em perl também, mas foi lançado há mais de dez anos. Além disso, Jesse Norell fez o mesmo no repositório do github .

Existe alguma maneira de todos os e-mails endereçados a domínios Postfix locais serem filtrados com um filtro pós-fila simples, independentemente de ter chegado de uma fonte local ou remota, sem nunca filtrar qualquer e-mail sendo enviado para domínios remotos (internet)?

O próprio postfix não consegue distinguir domínios locais / remotos ao executar content_filter . A decisão do filtro de conteúdo foi feita antes do roteamento de e-mail do daemon de limpeza Uma alternativa é verificar manualmente o domínio em seu script perl.

    
por 21.01.2015 / 09:41

Tags