How can I reinject mail scanned with spamassassin back into the queue for final delivery without causing a loop?
NÃO Você não pode
Explicação
Eu entendo o motivo pelo qual você usa virtual_transport
para encaminhar e-mails para o Spam Assassin. Você só deseja verificar o e-mail destinado ao seu virtual_mailbox_domain
. Infelizmente, ele não segue a configuração recomendada para filtro de conteúdo simples que usa content_filter
parâmetro em vez de virtual_transport
.
Por que não consigo passar virtual_transport
para pickup ou smtpd?
Geralmente, aqui a jornada de e-mail pelo código do postfix
Input --> cleanup --> qmgr --> Output
*smtpd *local
*pickup *virtual
*qmqpd *smtp
*lmtp
*pipe
No daemon cleanup
, o postfix encaminhará seu e-mail, independentemente de pertencerem a transportes virtuais, locais, smtp ou outros. Uma exceção é quando o parâmetro content_filter
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 email para content_filter
.
Outra nota, por padrão, todo serviço postfix foi obter o valor do parâmetro main.cf
, a menos que você o substitua usando -o parameter = value em master.cf
. Mas nem todos os parâmetros em man 5 postconf
são usados por um serviço. Por exemplo, content_filter usado apenas por pickup
, smtpd
e qmqpd
, para que você possa colocar -o content_filter = amavis: [127.0.0.1:10025 neles . Outro exemplo, não é sensato colocar -o smtp_bind_address em smtpd
como este parâmetro usado somente em smtp
service.
O mesmo argumento pode ser aplicado à sua pergunta, "por que eu 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 examina o e-mail transmitido fora de seu domínio. -
Use
content_filter
na tabela ACCESS e na ação FILTER . Com isso, você pode verificar seletivamente o e-mail recebido.Infelizmente, você deve inscrever seu. Você pode evitá-lo colocando cuidadosamente a tabela ACCESS apósvirtual domain
novamente nessa tabela.permit_mynetworks
,permit_sasl_authenticated
. Dessa forma, os e-mails enviados já serão permitidos e você só verifica os e-mails recebidos. ( Crédito ao OP comentário :)) -
Usando Múltiplas instâncias do Postfix . Dessa forma, você pode manter o parâmetro
virtual_transport
e o spamc injetará o email em sua segunda instância. E então você pode definir diferentesvirtual_transport
em diferentes instâncias. Mas é um pouco exagerado se você quiser manter sua configuração simples.