ตัวกรองสแปม Postfix

Spam Scanner เริ่มกรองเซิร์ฟเวอร์ Postfix ได้ในเวลาประมาณห้านาที โปรแกรมทำงานเป็น milterMail filter: โปรโตคอลจาก Sendmail ที่ Postfix ใช้ด้วย ให้โปรแกรมแยกต่างหากตรวจแต่ละข้อความระหว่างเซสชัน SMTP ดังนั้น Postfix จะถามเกี่ยวกับแต่ละข้อความระหว่างเซสชัน SMTP และปฏิเสธสแปมได้ก่อนรับเข้ามา

ติดตั้งและรัน#

Shell
npm install --global spamscanner
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"

--auth ตรวจ SPFSender Policy Framework: เรคคอร์ด DNS ที่ระบุเซิร์ฟเวอร์ที่ได้รับอนุญาตให้ส่งอีเมลในนามของโดเมน, DKIMDomainKeys Identified Mail: ลายเซ็นของข้อความ ตรวจสอบด้วยกุญแจสาธารณะที่เผยแพร่ใน DNS ของผู้ส่ง, DMARCนโยบายใน DNS ที่บอกผู้รับว่าต้องทำอย่างไรเมื่ออีเมลที่อ้างว่ามาจากโดเมนหนึ่งไม่ผ่านการตรวจความสอดคล้องของ SPF และ DKIM และ ARCAuthenticated Received Chain: ลายเซ็นที่ส่งต่อผลการยืนยันตัวตนผ่านเซิร์ฟเวอร์ที่ส่งต่ออีเมล ส่วน --subject-tag ทำเครื่องหมายสแปมในหัวเรื่อง ทุกข้อความจะได้ส่วนหัว X-Spam-Flag, X-Spam-Score, X-Spam-Status และ X-Spam-Action และส่วนหัว X-Spam-* ที่ผู้ส่งใส่มาจะถูกลบออกก่อน

เชื่อมต่อ Postfix#

INI
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_protocol = 6
milter_default_action = accept
Shell
sudo postfix reload

milter_default_action = accept ปล่อยอีเมลผ่านโดยไม่กรองหาก milter ใช้งานไม่ได้ ส่วน tempfail จะขอให้ผู้ส่งลองใหม่แทน

ปฏิเสธสแปมระหว่างเซสชัน SMTP#

Shell
spamscanner milter --port 7831 --auth --reject

ข้อความที่ถึงเกณฑ์ปฏิเสธ (15 คะแนน) จะถูกปฏิเสธด้วย 451 4.7.1 Message rejected as spam รหัส 451 เป็นการปฏิเสธชั่วคราว: ผู้ส่งเก็บข้อความไว้และลองใหม่ การตัดสินที่ผิดจึงทำให้เกิดแค่ความล่าช้า ไม่ใช่ข้อความสูญหาย เมื่อผลลัพธ์ดูถูกต้องแล้ว --reject-code 550 จะทำให้การปฏิเสธเป็นแบบถาวร

โดยไม่ใช้ milter#

ตัวกรองเนื้อหาทำงานหลังจาก Postfix รับข้อความแล้ว: Postfix ส่งข้อความผ่าน pipe ไปยัง spamscanner filter ซึ่งเพิ่มส่วนหัวแล้วส่งกลับ ไม่มีการปฏิเสธใดระหว่างเซสชันเลย และความล้มเหลวจะเลื่อนการส่งออกไปเสมอแทนการตีกลับ การตั้งค่าตัวกรองเนื้อหา

ย้ายสแปมไปที่ Junk#

เมื่อใช้ Dovecot กฎ Sieve จะย้ายอีเมลที่ติดป้ายไว้:

Text
require ["fileinto"];
if header :is "X-Spam-Flag" "YES" { fileinto "Junk"; stop; }

ทดสอบกับ Postfix จริง#

การทดสอบแบบ end-to-end ของโครงการรัน Postfix ร่วมกับ milter และตัวกรองเนื้อหา: hamอีเมลที่ต้องการ: ตรงข้ามกับสแปม ถูกส่งถึงผู้รับพร้อมส่วนหัว และ X-Spam-Flag ที่ปลอมขึ้นถูกลบออก สแปมถูกติดป้าย และ GTUBEGeneric Test for Unsolicited Bulk Email: สตริงตายตัวที่ตัวกรองสแปมทุกตัวถือว่าเป็นสแปม ใช้สำหรับทดสอบ ถูกปฏิเสธด้วย 550 ระหว่างเซสชัน SMTP

ถัดไป: คู่มือ Postfix และ Sendmail ฉบับเต็ม พร้อม systemd unit และ INPUT_MAIL_FILTER ของ Sendmail

แก้ไขหน้านี้บน GitHub · Markdown ·