Postfix + SpamAssassin: alterações de cabeçalhos de correio de entrada

7

Eu fiz uma configuração do Postfix + SpamAssassin seguindo as instruções recomendadas pela maioria dos sites para esse tipo de configuração. Basicamente eu editei meu master.cf para adicionar:

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

spamassassin unix -     n       n       -       -       pipe
        user=debian-spamd argv=/usr/bin/spamc -f -e  
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

SpamAssassin realmente funciona bem e meu e-mail é filtrado, mas notei o seguinte. No passado, antes do SpamAssassin, quando um email era enviado para o meu servidor, os cabeçalhos mostravam algo como:

Return-path: <[email protected]>
Envelope-to: <[email protected]>
Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100
Received: from mail.sender-server.dev ...
    by mail.my-server.dev

Após o SpamAssassin, eles mostram:

Return-path: <[email protected]>
Envelope-to: <[email protected]>
Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100
Received: from mail.my-server.dev ...
    by mail.my-server.dev

Parece que, ao ativar o SpamAssassin, o Received: from foi alterado do servidor original de onde o email realmente veio para o meu próprio servidor ... Por que isso acontece? Isso não pode ser corrigido de uma maneira que meu e-mail é filtrado pelos cabeçalhos corretos são exibidos? Obrigado.

    
por TCB13 04.12.2015 / 21:16

2 respostas

6

Esta foi a minha solução final após pesquisa e ajuda do @tarleb

Minha entrega de e-mail estava acontecendo com o programa sendmail , que adicionava alguns cabeçalhos adicionais ao meu e-mail. Eu poderia usar um mitter (filtro de mensagens) para filtrar e-mails recebidos e descartar o uso de sendmail , no entanto, decidi mudar para o Dovecot LDA para a entrega.

Meu filtro original foi, no começo do master.cf :

do Postfix
smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

E no final do arquivo:

spamassassin unix -     n       n       -       -       pipe
        user=debian-spamd argv=/usr/bin/spamc -f -e  
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Alterei o final do arquivo para usar a entrega local da Dovecot por:

spamassassin unix -     n   n   -   -   pipe
    flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e 
    /usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} 

Agora edite o main.cf do Postfix e adicione (opcional, marque (3) abaixo):

spamassassin_destination_recipient_limit = 1

Agora o seu email será entregue via Dovecot LDA sem alterações no cabeçalho. Para os curiosos, aqui estão alguns detalhes da minha configuração:

  1. Essa configuração pode ser usada com delimitadores de mais endereçamento / subendereço / destinatário (emails endereçados a [email protected] serão entregues em [email protected] caixa de entrada) - É por isso que adicionei -d ${user}@${nexthop} isso removerá o + e tudo até o domínio. Para ativar esse recurso, não se esqueça de adicionar recipient_delimiter = + em main.cf ;
  2. Minhas bandeiras flags=DROhu , elas não adicionam nada anormal, mas elas podem ser entendidas aqui: link ;
  3. spamassassin_destination_recipient_limit = 1 é necessário para garantir que cada destinatário seja processado individualmente pelo spamassassin. Isso é necessário devido ao sinal D acima (inclui X-Original-To header). Se você tiver o D sinalizador e não definir spamassassin_destination_recipient_limit = 1 o e-mail com vários destinos não será exibido! Se você não se importar com esse cabeçalho, poderá remover o sinalizador e isso não é necessário.

Edit: Conteúdo bônus - Mova seu SPAM para a pasta Junk !

Você também pode configurar o Dovecot para mover os emails detectados como SPAM para a pasta Junk IMAP. Isso tornará sua vida mais fácil, com certeza. Apenas siga isto:

  1. Edite /etc/dovecot/conf.d/15-mailboxes.conf e descomente / adicione a pasta Junk com (deve estar na seção namespace inbox perto de mailbox Trash ):

    mailbox Junk {
       special_use = \Junk
    }
    
  2. Instale dovecot-sieve com apt-get install dovecot-sieve ;

  3. Edite /etc/dovecot/conf.d/90-sieve.conf e comente a linha: #sieve = ~/.dovecot.sieve

  4. Edite /etc/dovecot/conf.d/90-plugin.conf como:

    plugin {
        sieve = /etc/dovecot/sieve/default.sieve
    }
    
  5. Edite /etc/dovecot/conf.d/15-lda.conf e /etc/dovecot/conf.d/20-lmtp.conf para corresponder:

    protocol lda/lmtp { # do not copy/paste this line!
      mail_plugins = $mail_plugins sieve
    }
    

    AVISO : você pode ter outras configurações nas seleções de protocol , mantenha-as. A linha protocol lda/lmtp muda nos arquivos, mantenha o original.

  6. Crie a pasta /etc/dovecot/sieve/

  7. Crie o arquivo /etc/dovecot/sieve/default.sieve com este conteúdo:

    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }
    
  8. Altere as permissões da pasta para o seu usuário e grupo de e-mail virtual, como: chown vmail:vmail /etc/dovecot/sieve/ -R . Se você perder este dovecot vai reclamar!

  9. Reinicie tudo: service postfix restart; service dovecot restart; service spamassassin restart

  10. Tente enviar um e-mail para alguns e-mails no servidor (de um servidor externo), primeiro um e-mail normal e depois outro com este assunto: XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X . O segundo email deve entrar na pasta Junk e o primeiro na sua caixa de entrada.

Se isso não funcionar na sua primeira tentativa, veja os registros: tail -f /var/log/mail.log e envie o e-mail enquanto tail estiver em execução. Uma boa configuração de trabalho deve informar stored mail into mailbox 'INBOX' ou stored mail into mailbox 'Junk' .

    
por 02.01.2016 / 23:04
4

Esse é o resultado direto de como os e-mails devem ser manipulados pelos servidores SMTP: cada servidor que manipula o e-mail adicionará um novo Received ao processar o e-mail (conforme exigido por RFC 2821 ).

Isso é o que você está vendo. O serviço SpamAssassin atua como um filtro, obtendo o email do postfix e enviando o resultado de volta ao postfix. O Postfix está, portanto, recebendo o e-mail duas vezes. Sua inserção de um Received cabeçalho de cada vez. É por isso que você vê seu próprio servidor listado lá. O cabeçalho provavelmente contém algo nos moldes de (Postfix, from userid 120) , em que o ID do usuário pertence ao seu usuário debian-spamd .

Inspecionar o restante do cabeçalho de e-mail deve mostrar que há mais Received cabeçalhos abaixo. É só que os cabeçalhos antigos estão escondidos mais abaixo agora, mas eles ainda estão presentes. Nenhuma informação é perdida.

    
por 07.12.2015 / 14:47