Postfix + SpamAssassin: 수신 메일 헤더 변경

Postfix + SpamAssassin: 수신 메일 헤더 변경

이러한 유형의 OS 설정에 대해 대부분의 웹사이트에서 권장하는 지침에 따라 Postfix + SpamAssassin 설정을 수행했습니다. 기본적으로 나는 다음을 master.cf추가하기 위해 내 것을 편집했습니다.

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은 실제로 잘 작동하고 이메일이 필터링되지만 다음 사항을 발견했습니다. 과거에 SpamAssassin 이전에는 이메일이 내 서버로 전송되면 헤더에 다음과 같은 내용이 표시되었습니다.

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

SpamAssassin 이후에는 다음이 표시됩니다.

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

Received: fromSpamAssassin을 활성화한 후 이메일이 실제로 내 서버에 도달하는 원본 서버가 변경된 것 같습니다 . 왜 이런 일이 발생합니까? 올바른 헤더를 표시하여 이메일을 필터링하면 이 문제를 해결할 수 없나요? 감사해요.

답변1

이것은 @tarleb의 조사와 도움을 받은 후의 최종 솔루션입니다.

내 메일 배달은 sendmail내 이메일에 추가 헤더를 추가하는 프로그램을 통해 이루어집니다. Mitter(메일 필터)를 사용하면 들어오는 이메일을 필터링할 수 있어서 포기했지만 sendmail, 배송을 Dovecot LDA로 변경하기로 결정했습니다.

내 원래 필터는 Postfix의 시작 부분에 있었습니다 master.cf.

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}

다음을 통해 Dovecot 로컬 배달을 사용하도록 파일 끝을 변경했습니다.

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} 

이제 Postfix를 편집 main.cf하고 다음을 추가합니다(선택 사항, 아래 (3) 확인).

spamassassin_destination_recipient_limit = 1

이제 귀하의 이메일은 헤더를 변경하지 않고 Dovecot LDA를 통해 전송됩니다. 궁금하신 분들을 위해 제 구성에 대한 몇 가지 세부정보를 알려드리겠습니다.

  1. 이것구성은 주소 지정/하위 주소 지정/수신자 구분 기호와 함께 사용할 수 있습니다.(다음으로 전송된 이메일은 받은편지함 [email protected]으로 전송됩니다 [email protected].) - 그래서 이 항목을 추가하면 도메인 이전의 모든 내용과 함께 -d ${user}@${nexthop}삭제됩니다 . 이 기능 을 +활성화하려면 recipient_delimiter = +;main.cf
  2. 내 플래그 flags=DROhu는 예외를 추가하지 않지만 여기에서 이해할 수 있습니다.http://www.postfix.org/pipe.8.html;
  3. spamassassin_destination_recipient_limit = 1각 수신자가 spamassassin에 의해 개별적으로 처리되도록 해야 합니다. 이는 D위의 플래그(헤더 포함 ) 로 인해 필요합니다 X-Original-To.이 플래그가 있지만 여러 대상을 D설정하지 않으면 spamassassin_destination_recipient_limit = 1이메일이 전송되지 않습니다!이 헤더에 관심이 없다면 플래그를 제거할 수 있지만 필수는 아닙니다.

편집: 보너스 콘텐츠 - 스팸을 Junk폴더로 이동하세요!

Junk스팸으로 감지된 이메일을 IMAP 폴더 로 이동하도록 Dovecot을 구성할 수도 있습니다 . 이것은 확실히 당신의 삶을 더 쉽게 만들어 줄 것입니다. 다음 단계를 따르세요.

  1. 폴더 편집 /etc/dovecot/conf.d/15-mailboxes.conf및 주석 해제/추가 ( 가까운 섹션 Junk에 있어야 함 ):namespace inboxmailbox Trash

    mailbox Junk {
       special_use = \Junk
    }
    
  2. 설치 :dovecot-sieveapt-get install dovecot-sieve

  3. 다음 줄을 편집 /etc/dovecot/conf.d/90-sieve.conf하고 주석을 추가하세요.#sieve = ~/.dovecot.sieve

  4. 다음으로 수정됨 /etc/dovecot/conf.d/90-plugin.conf:

    plugin {
        sieve = /etc/dovecot/sieve/default.sieve
    }
    
  5. 편집 /etc/dovecot/conf.d/15-lda.conf/etc/dovecot/conf.d/20-lmtp.conf일치:

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

    경고하다: 선택 항목에 다른 설정이 있을 수 있으므로 protocol그대로 두십시오. protocol lda/lmtp파일의 줄이 변경되어 원래 내용이 유지됩니다.

  6. 폴더 생성/etc/dovecot/sieve/

  7. /etc/dovecot/sieve/default.sieve다음 내용으로 파일을 만듭니다 .

    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }
    
  8. 폴더 권한을 가상 이메일 사용자 및 그룹으로 변경합니다(예: ) chown vmail:vmail /etc/dovecot/sieve/ -R. 이 비둘기를 놓치면 불평하게 될 것입니다!

  9. 모든 것을 다시 시작하세요:service postfix restart; service dovecot restart; service spamassassin restart

  10. (외부 서버에서) 서버의 이메일 주소로 먼저 일반 이메일을 보낸 다음 제목이 .인 다른 이메일을 보내보세요 XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X. 두 번째 이메일은 Junk폴더 로 들어가야 하고, 첫 번째 이메일은 받은 편지함으로 들어가야 합니다.

첫 번째 시도에서 작동하지 않으면 로그를 확인하고 tail -f /var/log/mail.log실행 중에 이메일을 보내십시오. tail좋은 작업 설정은 stored mail into mailbox 'INBOX'또는 를 보고해야 합니다 stored mail into mailbox 'Junk'.

답변2

이는 SMTP 서버가 메일을 처리하는 방법의 직접적인 결과입니다. 메일을 처리하는 모든 서버는 Received메일을 처리할 때 새 헤더를 추가합니다(SMTP 서버에서 요구하는 대로).RFC 2821).

이것이 당신이 보는 것입니다. 이것스팸 암살자이 서비스는 필터 역할을 하여 postfix로부터 메일을 받고 그 결과를 다시 postfix로 보냅니다. 따라서 Postfix는 이메일을 두 번 받게 됩니다. Received매번 헤더를 삽입합니다 . 그렇기 때문에 거기에 자신의 서버가 나열되어 있는 것을 볼 수 있습니다. 헤더에는 (Postfix, from userid 120)사용자 ID가 debian-spamd사용자에게 속한 위치와 유사한 내용이 포함될 수 있습니다.

나머지 메시지 헤더를 검사하면 Received아래에 더 많은 헤더가 있음을 알 수 있습니다. 이제 이전 헤더가 더 숨겨져 있지만 여전히 남아 있습니다. 정보는 손실되지 않습니다.

관련 정보