Gostaria de passar as mensagens recebidas virtual_transport
para um transporte spamassassin
(main.cf:) virtual_transport=spamassassin
e, em seguida, reinjetar as mensagens digitalizadas 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}
Isto deveria ser possível de acordo com odocumentação postfix:
Sites de alto volume devem evitar o uso de filtros de conteúdo "simples" que reinjetam mensagens digitalizadas via Postfix sendmail(1) e postdrop(1).
Com minha chamada sendmail atual /usr/sbin/sendmail -f ${sender} ${recipient}
, o e-mail retorna para a fila e depois volta para spamassassin e assim por diante.
Pelo que entendi da documentação do postfix, as mensagens entregues usando o postfix sendmail
são descartadas no maildrop
diretório e coletadas 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 a transportes SMTP, suponho).
Como posso reinjetar mensagens digitalizadas com spamassassin de volta na fila para entrega final sem causar um loop?
Responder1
Como posso reinjetar mensagens digitalizadas com spamassassin de volta na fila para entrega final sem causar um loop?
NÃO, você não pode
Explicação
Eu entendo o motivo pelo qual você virtual_transport
envia e-mails para o Spam Assassin. Você deseja apenas digitalizar o e-mail destinado ao seu arquivo virtual_mailbox_domain
. Infelizmente não segue orecomendado configuração para filtro de conteúdo simplesisso usando content_filter
parâmetro em vez disso virtual_transport
.
Por que não consigo passar virtual_transport
para pickup ou smtpd?
Geralmente, aqui a jornada do e-mail através do código postfix
Input --> cleanup --> qmgr --> Output
*smtpd *local
*pickup *virtual
*qmqpd *smtp
*lmtp
*pipe
No cleanup
daemon, o postfix irá 'rotear' seu e-mail, sejam eles pertencentes a transportes virtuais, locais, smtp ou outros. Uma exceção é quando content_filter
um 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 email para ela content_filter
.
Outra observação: por padrão, todo serviço postfix foi obtido pelo valor do parâmetro, main.cf
a menos que você o substitua usando-o parâmetro = valor sobre master.cf
. Mas nem todos os parâmetros são man 5 postconf
usados por um serviço. Por exemplo,filtro_de_conteúdousado apenas por pickup
, smtpd
e qmqpd
então você pode colocar-o content_filter=amavis:[127.0.0.1:10025neles. Outro exemplo, não é sensato colocar-o smtp_bind_addressin smtpd
pois este parâmetro é usado apenas em smtp
serviço.
O mesmo argumento pode ser aplicado à sua pergunta, "por que posso passar-o transporte_virtualem pickup
?"
Então aqui estão as diversas 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 fora do seu domínio.Usar
content_filter
via tabela ACCESS e ação FILTER. Desta forma, você pode verificar seletivamente o e-mail recebido.Infelizmente você deve alistar-se. Você pode evitá-lo colocando cuidadosamente a tabela ACCESS depois devirtual domain
novamente nessa mesa.permit_mynetworks
,permit_sasl_authenticated
. Dessa forma, os e-mails enviados já serão permitidos e você verificará apenas os e-mails recebidos. (Crédito ao comentário do OP:))UsandoPostfix Múltipla Instância. Desta forma, você pode manter o
virtual_transport
parâmetro e o spamc injetará o email na sua segunda instância. E então você pode definir diferentesvirtual_transport
em instâncias diferentes. Mas é um pouco exagerado se você quiser manter sua configuração simples.