ISPmail (11): Lọc thư rác với rspamd

rspamd là một lựa chọn tốt cho mục đích lọc thư rác. rspamd là một tiến trình vĩnh viễn chạy trên mailserver, lắng nghe các kết nối từ Postfix bằng giao thức milter (= bộ lọc thư). Mỗi khi một email đi vào hệ thống, Postfix sẽ gửi nó đến rspamd để kiểm tra nội dung. rspamd chạy rất nhiều kiểm tra trên email và tính tổng điểm. Điểm càng cao – email càng có nhiều khả năng được coi là không đạt yêu cầu.

Dạy postfix dùng rspamd

postconf smtpd_milters=inet:127.0.0.1:11332
postconf non_smtpd_milters=inet:127.0.0.1:11332
postconf milter_mail_macros="i {mail_addr} {client_addr} {client_name} {auth_authen}"

Thử việc phát hiện thư rác

Chúng ta có thể sử dụng một email spam mẫu đi kèm với SpamAssassin. Nó được gọi là GTUBE (Kiểm tra chung cho Email hàng loạt). Nó chứa một mô hình nhân tạo nhất định được SpamAssassin công nhận là thư rác. Chúng ta tải mẫu thư rác về và gởi nó đến một địa chỉ thuộc tên miền của mình.

## Tải về mẫu thư rác ##
wget http://spamassassin.apache.org/gtube/gtube.txt
## Gởi nó qua mail để test ##
sendmail john@example.org < gtube.txt

Sau đó kiểm tra /var/log/mail.log. Tuy nhiên trên thực tế mail bị trả về với thông báo lỗi.

Dovecot hỗ trợ các bộ lọc Sieve, là các tập lệnh chạy tự động mỗi khi có email, các bộ lọc cá nhân còn có cả các bộ lọc chung áp dụng cho tất cả người dùng. Chỉnh sửa tập tin /etc/dovecot/conf.d/90-sieve.conf. Chúng ta muốn thư rác sẽ bị chuyển về thư mục Junk.

## /etc/dovecot/conf.d/90-sieve.conf ##
sieve_after = /etc/dovecot/sieve-after
mkdir /etc/dovecot/sieve-after
cat > /etc/dovecot/sieve-after/spam-to-folder.sieve <<EOF
require ["fileinto","mailbox"];

if header :contains "X-Spam" "Yes" {
 fileinto :create "Junk";
 stop;
}
EOF
sievec /etc/dovecot/sieve-after/spam-to-folder.sieve

Chú thích

fail2ban có thể gây lỗi rất khó chịu là chặn email gởi từ mailserver. Thông báo lỗi đọc ở /var/log/mail.log như sau

warning: hostname [mx.example.org] does not resolve to address [IPv4]

Cách sửa lỗi là thêm domain hay ip vào ignoreip của /etc/fail2ban/jail.conf

ignoreip = 127.0.0.1/8 mx.example.org another.ltd

Script

#!/bin/bash
# Tên script: 10.rspamd.sh
# Lọc thư rác trên mailserver
# © 2020 LNT <lnt@ly-le.info>
# version 20200801
#
echo 'Cấu hình rspamd...'
postconf smtpd_milters=inet:127.0.0.1:11332
postconf non_smtpd_milters=inet:127.0.0.1:11332
postconf milter_mail_macros="i {mail_addr} {client_addr} {client_name} {auth_authen}"

echo 'extended_spam_headers = true;' > /etc/rspamd/override.d/milter_headers.conf
sed 's|.*\(sieve_after =\)|  \1 /etc/dovecot/sieve-after|' -i /etc/dovecot/conf.d/90-sieve.conf
[ ! -e /etc/dovecot/sieve-after ] && mkdir /etc/dovecot/sieve-after
cat > /etc/dovecot/sieve-after/spam-to-folder.sieve <<EOF
require ["fileinto","mailbox"];
if header :contains "X-Spam" "Yes" {
  fileinto :create "Junk";
  stop;
}
EOF
sievec /etc/dovecot/sieve-after/spam-to-folder.sieve
echo 'autolearn = true;' > /etc/rspamd/override.d/classifier-bayes.conf
systemctl restart rspamd

Comments Off on ISPmail (11): Lọc thư rác với rspamd

Filed under Software

Comments are closed.