環境
- Rocky Linux 9.7
- Postfix 3.5
- Dovecot 2.3
Postfix に群がる迷惑メールを追い払う に続き、届いてしまった迷惑メールを迷惑メールフォルダーに振り分ける設定を追加した。 Postfix、 Dovecot でメール送受信は出来る環境なので、 SpamAssassin、 Dovecot Sieve を追加して振り分ける。
SpamAssassin をインストール
spamassassin、 spamass-milter-postfix をインストールする。 spamass-milter-postfix は epel-release インストール後にインストール可能になる。インストールに失敗する場合、 dnf config-manager --set-enabled crb を実行してから再実行する。
dnf install spamassassin dnf install epel-release dnf config-manager --set-enabled crb dnf install spamass-milter-postfix
/etc/mail/spamassassin/v310.pre を編集して、 TextCat(言語推測) プラグインを有効にする。
loadplugin Mail::SpamAssassin::Plugin::TextCat
/etc/mail/spamassassin/local.cf を編集して、 rewrite_header をコメントアウト。(振り分けられたメールの件名に「[SPAM]」を追加したい場合は編集不要。)
#rewrite_header Subject [SPAM] # コメントアウト
spamassassin を自動起動させる設定を忘れずに。
systemctl enable spamassassin systemctl enable spamass-milter
/etc/cron.daily に下記スクリプトを記載した spamassassin-update.sh を配置して、ルールを更新する。(参照 : sa-update)
#!/bin/bash sa-update systemctl restart spamassassin
Dovecot、 Sieve プラグインの設定
dovecot-pigeonhole をインストールして Sieve を使える状態にする。
/etc/dovecot/sieve.conf を作成し、下記を記載する。(SpammAssassin が迷惑メールと判定した場合、 Junk フォルダーに振り分ける設定。)
require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; }
sievec を実行してコンパイルする。
sievec /etc/dovecot/sieve.conf
/etc/dovecot/dovecot.conf を修正する。(sieve を追加。 Sieve は LMTP を使用するため lmtp も追加。)
protocols = imap lmtp sieve
ドメイン名とサーバー名が異なる場合に LMTP の処理が失敗するため、 /etc/dovecot/conf.d/10-auth.conf を修正してユーザー名のみで認証させる。(参照 : auth_username_format、
Common modifier syntaxes and their replacements.)
auth_username_format = %Ln
etc/dovecot/conf.d/10-master.conf に LMTP の設定を追加。
service lmtp {
# 追加
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
etc/dovecot/conf.d/15-mailboxes.conf にフォルダー名を固定化する設定と、 Junk(迷惑メール)、 Trush(ゴミ箱)は一定日数経過したら削除する設定を追加。(参照 : 1.5. ユーザーを IMAP メールボックスに自動的に登録する、 Lazy Expunge)
namespace inbox {
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
autoexpunge = 30days
special_use = \Junk
}
mailbox Trash {
auto = subscribe
autoexpunge = 90days
special_use = \Trash
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
}
etc/dovecot/conf.d/20-lmtp.conf に LMTP の設定を追加。
protocol lmtp {
postmaster_address = postmaster@<ドメイン名>
mail_plugins = sieve
}
etc/dovecot/conf.d/90-sieve.conf に使用する sieve の設定を追加。
sieve_before = /etc/dovecot/sieve.conf
Postfix の設定
/etc/postfix/main.cf に以下を追記する。(smtpd_milters は spamass-milter のソケットが存在する事を、 spamass-milter を起動して確認する。milter_protocol については milter_protocol を参照。)
milter_default_action = accept milter_protocol = 6 smtpd_milters = unix:/var/run/spamass-milter/postfix/sock non_smtpd_milters = $smtpd_milters mailbox_transport = lmtp:unix:private/dovecot-lmtp
受信メールが SpamAssassin に迷惑メールと判定されればヘッダーに「X-Spam-flag: YES」が追記され、 Sieve による Junk(迷惑メール)振り分けが確認できたら設定完了。
