Eu gostaria de passar o e-mail recebido usando virtual_transport
para um transporte spamassassin
(main.cf: virtual_transport=spamassassin
) e reinjetar o e-mail digitalizado no postfix usando o sendmail.
O transporte fica assim:
spamassassin unix - n n - - pipe
flags=hu user=vmail:mail argv=/usr/bin/spamc -u ${recipient} -e /usr/sbin/sendmail -f ${sender} ${recipient}
Isso deve ser possível de acordo com a documentação do postfix :
Sites de alto volume devem evitar o uso de filtros de conteúdo "simples" que reinjetam emails verificados via Postfix sendmail(1) e postdrop(1).
Com a minha chamada sendmail atual /usr/sbin/sendmail -f ${sender} ${recipient}
, o e-mail faz um loop sendo passado de volta para a fila e depois de volta para spamassassin e assim por diante.
Pelo que entendi da documentação do postfix, o e-mail entregue usando o postfix sendmail
é descartado no maildrop
diretório e, em seguida, obtido usando pickup
. Tentei anexar um -o virtual_transport=dovecot
ao transporte de coleta para evitar a fila, mas isso não ajudou. (Essas opções só podem ser anexadas aos transportes smtp, suponho).
Como posso reinjetar e-mails digitalizados com spamassassin de volta na fila para entrega final sem causar um loop?
NÃO Você não pode
Explicação
Entendo o motivo pelo qual você usa
virtual_transport
para enviar e-mails para o Spam Assassin. Você só deseja verificar o e-mail destinado ao seu arquivovirtual_mailbox_domain
. Infelizmente, ele não segue a configuração recomendada para filtro de conteúdo simples que usa o parâmetro .content_filter
virtual_transport
Por que não posso passar
virtual_transport
para pickup ou smtpd?Geralmente, aqui a jornada do e-mail pelo código postfix
No
cleanup
daemon, o postfix irá 'rotear' seu e-mail, sejam eles pertencentes a transportes virtuais, locais, smtp ou outros. Uma exceção é quando ocontent_filter
parâmetro não em branco foi passado para o serviço de entrada (smtpd
,pickup
,qmqpd
). Quando isso acontecer, o postfix substituirá a rota da mensagem e enviará o e-mail para elacontent_filter
.Outra observação, por padrão, todo serviço postfix foi obtido do valor do parâmetro, a
main.cf
menos que você o substitua usando -o parameter=value onmaster.cf
. Mas nem todos os parâmetros sãoman 5 postconf
usados por um serviço. Por exemplo, content_filter usado apenas porpickup
,smtpd
entãoqmqpd
você pode colocar -o content_filter=amavis:[127.0.0.1:10025 neles. Outro exemplo, não é sensato colocar -o smtp_bind_addresssmtpd
pois este parâmetro é usado apenas em serviçosmtp
.O mesmo argumento pode ser aplicado à sua pergunta, "por que posso passar -o virtual_transport em
pickup
?"Então aqui estão as várias alternativas para sua configuração
Use
content_filter
conforme explicado na documentação do postfix. A desvantagem é que você também verifica o e-mail retransmitido para fora do seu domínio.Use
content_filter
via tabela ACCESS e ação FILTER . Dessa forma, você pode verificar seletivamente o e-mail recebido.Infelizmente, você deve se inscrever. Você pode evitá-lo colocando cuidadosamente a tabela ACCESS apósvirtual domain
novamente nessa tabela.permit_mynetworks
,permit_sasl_authenticated
. Dessa forma, o e-mail de saída já será permitido e você só escaneia os e-mails recebidos. ( Crédito ao comentário do OP :))Usando Múltiplas Instâncias do Postfix . Dessa forma, você pode manter o
virtual_transport
parâmetro e o spamc injetará o email em sua segunda instância. E então você pode definirvirtual_transport
diferentes instâncias diferentes. Mas é um pouco exagerado se você quiser manter sua configuração simples.