Postfix + SpamAssassin: Thay đổi tiêu đề thư đến


7

Tôi đã thực hiện thiết lập Postfix + SpamAssassin theo hướng dẫn mà hầu hết các trang web khuyên dùng cho thiết lập os loại này. Về cơ bản tôi đã chỉnh sửa master.cfđể thêm:

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 thực sự hoạt động tốt và email của tôi được lọc, tuy nhiên tôi nhận thấy những điều sau đây. Trước đây, trước SpamAssassin khi một email được gửi tới máy chủ của tôi, các tiêu đề sẽ hiển thị một cái gì đó như:

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

Sau SpamAssassin họ hiển thị:

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

Có vẻ như khi bật SpamAssassin, Received: fromnó đã được thay đổi từ máy chủ ban đầu từ nơi email thực sự đến máy chủ của tôi ... Tại sao điều này xảy ra? Điều này có thể được sửa theo cách mà email của tôi được lọc bởi các tiêu đề chính xác được hiển thị không? Cảm ơn bạn.

Câu trả lời:


6

Đây là giải pháp cuối cùng của tôi sau khi nghiên cứu và giúp đỡ từ @tarleb

Chuyển phát thư của tôi đã xảy ra qua sendmailchương trình, trong đó thêm một số tiêu đề bổ sung vào email của tôi. Tôi có thể sử dụng một bộ lọc (bộ lọc thư) để lọc email đến và bỏ việc sendmailsử dụng, tuy nhiên tôi đã quyết định đổi sang Dovecot LDA để gửi.

Bộ lọc ban đầu của tôi là, vào đầu Postfix master.cf:

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

Và ở cuối tập tin:

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

Tôi đã thay đổi phần cuối của tệp để sử dụng phân phối cục bộ Dovecot bằng cách:

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} 

Bây giờ chỉnh sửa Postfix's main.cfvà thêm (tùy chọn, kiểm tra (3) dưới đây):

spamassassin_destination_recipient_limit = 1

Bây giờ email của bạn sẽ được gửi qua Dovecot LDA mà không cần thay đổi tiêu đề. Đối với những người tò mò, đây là một số chi tiết về cấu hình của tôi:

  1. Cấu hình này có thể được sử dụng với các dấu phân cách địa chỉ cộng / địa chỉ phụ / người nhận (các địa chỉ email user+nospam@example.comsẽ được gửi vào user@example.comhộp thư đến) - Đó là lý do tại sao tôi thêm -d ${user}@${nexthop}điều này sẽ xóa +và mọi thứ cho đến khi tên miền. Để kích hoạt tính năng này, hãy chắc chắn để thêm recipient_delimiter = +vào main.cf;
  2. Cờ của tôi flags=DROhu, họ không thêm bất cứ điều gì bất thường nhưng chúng có thể được hiểu ở đây: http://www.postfix.org/pipe.8.html ;
  3. spamassassin_destination_recipient_limit = 1được yêu cầu để đảm bảo rằng mọi người nhận đều được xử lý riêng lẻ bởi spamassassin. Điều này là bắt buộc do Dcờ ở trên (Bao gồm X-Original-Totiêu đề). Nếu bạn đã Dgắn cờ và bạn không đặt spamassassin_destination_recipient_limit = 1email với nhiều điểm đến sẽ không được gửi! Nếu bạn không quan tâm đến tiêu đề này, bạn có thể xóa cờ và điều này không cần thiết.

Chỉnh sửa: Phần thưởng nội dung - Di chuyển SPAM của bạn vào Junkthư mục!

Bạn cũng có thể định cấu hình Dovecot để di chuyển email được phát hiện dưới dạng SPAM sang Junkthư mục IMAP. Điều này sẽ làm cho cuộc sống của bạn dễ dàng hơn chắc chắn. Chỉ cần làm theo điều này:

  1. Chỉnh sửa /etc/dovecot/conf.d/15-mailboxes.confvà bỏ ghi chú / thêm Junkthư mục với (nên ở namespace inboxphần gần mailbox Trash):

    mailbox Junk {
       special_use = \Junk
    }
    
  2. Cài đặt dovecot-sievevới apt-get install dovecot-sieve;

  3. Chỉnh sửa /etc/dovecot/conf.d/90-sieve.confvà nhận xét dòng:#sieve = ~/.dovecot.sieve

  4. Chỉnh sửa /etc/dovecot/conf.d/90-plugin.confthành:

    plugin {
        sieve = /etc/dovecot/sieve/default.sieve
    }
    
  5. Chỉnh sửa /etc/dovecot/conf.d/15-lda.conf/etc/dovecot/conf.d/20-lmtp.confcho phù hợp:

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

    CẢNH BÁO : Bạn có thể có các cài đặt khác trong các protocollựa chọn, giữ chúng. Dòng protocol lda/lmtpthay đổi trong các tập tin, giữ bản gốc.

  6. Tạo thư mục /etc/dovecot/sieve/

  7. Tạo tập tin /etc/dovecot/sieve/default.sievevới nội dung này:

    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }
    
  8. Thay đổi quyền thư mục cho người dùng và nhóm email ảo của bạn như : chown vmail:vmail /etc/dovecot/sieve/ -R. Nếu bạn bỏ lỡ dovecot này sẽ phàn nàn!

  9. Khởi động lại mọi thứ: service postfix restart; service dovecot restart; service spamassassin restart

  10. Hãy thử gửi email đến một số email trên máy chủ (từ máy chủ bên ngoài), đầu tiên là một email bình thường và sau đó là một email khác với chủ đề này : XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X. Email thứ hai nên vào Junkthư mục và email đầu tiên vào hộp thư đến của bạn.

Nếu điều này không hoạt động ở lần thử đầu tiên của bạn, hãy xem nhật ký: tail -f /var/log/mail.logvà gửi email trong khi tailđang chạy. Một thiết lập làm việc tốt nên báo cáo stored mail into mailbox 'INBOX'hoặc stored mail into mailbox 'Junk'.


4

Đó là kết quả trực tiếp của cách các thư nên được xử lý bởi các máy chủ SMTP: mỗi máy chủ xử lý thư sẽ thêm một Receivedtiêu đề mới khi xử lý thư (theo yêu cầu của RFC 2821 ).

Đây là những gì bạn đang thấy. Các SpamAssassin dịch vụ đóng vai trò như một bộ lọc, nhận được mail từ postfix và gửi kết quả trở lại postfix. Postfix do đó nhận được thư hai lần. Nó chèn một Receivedtiêu đề mỗi lần. Đó là lý do tại sao bạn thấy máy chủ của riêng bạn được liệt kê ở đó. Tiêu đề có thể chứa một cái gì đó dọc theo dòng (Postfix, from userid 120), nơi id người dùng thuộc về debian-spamdngười dùng của bạn .

Kiểm tra phần còn lại của tiêu đề thư sẽ cho thấy có nhiều Receivedtiêu đề bên dưới. Chỉ là các tiêu đề cũ được ẩn sâu hơn bây giờ, nhưng chúng vẫn còn hiện diện. Không có thông tin bị mất.


Đây là suy nghĩ đầu tiên của tôi tuy nhiên tôi đã sử dụng để đối phó với các máy chủ cPanel và trên các máy chủ đó, ngay cả tại sao SpamAssassin kích hoạt và hoạt động không có Receivedtiêu đề nào khác , chỉ có các X-Spam-*tiêu đề được thêm vào ... Tại sao và như thế nào?
TCB13

1
@ TCB13 Có nhiều cách để liên quan đến SpamAssassin. Một thay thế cho cái gọi là lọc sau hàng đợi (đó là những gì bạn mô tả trong câu hỏi) là các bộ lọc. Milters (bộ lọc thư) được chạy thông qua một giao thức khác nhau và được tham gia như một phần của quy trình nhận SMTP chính. Họ sẽ không chèn một tiêu đề riêng biệt, vì chúng không được gọi qua SMTP. Milters phức tạp hơn, nhưng vẫn gọn gàng vì chúng cho phép bạn từ chối thư có điểm thư rác rất cao trước khi chúng được thêm vào hàng đợi. Hãy xem Amavilities-new nếu bạn muốn dùng thử.
tarleb

cảm ơn cho những người đứng đầu lên. Tôi thực sự đã đọc một cái gì đó về các bộ lọc trước đây. Tôi sẽ xem xét nó. ;)
TCB13

1
@ TCB13 Chỉ cần nhận ra câu trả lời của tôi là một phần sai, đã sửa nó. (SpamAssassin không hoạt động như một máy chủ SMTP, tiêu đề bổ sung được chèn bởi postfix khi có liên quan thông qua /usr/sbin/sendmail.)
tarleb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.