AlmaLinux 9 + Rspamd + Dovecot (IMAPSieve) で、「どのメールクライアントからでも、迷惑メールフォルダを動かすだけで学習する環境」
1. 必要パッケージのインストール
dnf install dovecot-pigeonhole rspamd
2. 学習用シェルスクリプトの作成どのユーザーから実行されてもログエラーが出ないよう、ログ出力を省いたシンプルな構成にします。
① SPAM学習用 (/usr/lib/dovecot/sieve-pipe/learn-spam.sh)
bash#!/bin/bash
/usr/bin/rspamc -h localhost:11334 learn_spam
② HAM学習用 (/usr/lib/dovecot/sieve-pipe/learn-ham.sh)
bash#!/bin/bash
/usr/bin/rspamc -h localhost:11334 learn_ham
【重要】権限設定
mkdir -p /usr/lib/dovecot/sieve-pipe
chown root:root /usr/lib/dovecot/sieve-pipe/*.sh
chmod 755 /usr/lib/dovecot/sieve-pipe/*.sh
3. Sieveスクリプトの作成移動を検知して上記シェルを叩くための設定です。
① SPAM用 (/var/lib/dovecot/sieve/learn-spam.sieve)sieverequire ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if anyof (environment :is "imap.cause" "COPY", environment :is "imap.cause" "APPEND") {
pipe :copy "learn-spam.sh";
}
② HAM用 (/var/lib/dovecot/sieve/learn-ham.sieve)sieverequire ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if anyof (environment :is "imap.cause" "COPY", environment :is "imap.cause" "APPEND") {
pipe :copy "learn-ham.sh";
}
【重要】権限設定(自動コンパイルを許可)bashmkdir -p /var/lib/dovecot/sieve
chown -R dovecot:dovecot /var/lib/dovecot/sieve
chmod 775 /var/lib/dovecot/sieve
4. Dovecot設定ファイルの作成メジャーなフォルダ名(Junk, Spam, Junk Email)をすべて網羅した決定版です。
ファイルパス: /etc/dovecot/conf.d/90-sieve.confconfprotocol imap {
mail_plugins = $mail_plugins imap_sieve
}
plugin {
sieve_plugins = sieve_imapsieve sieve_extprograms
sieve_extensions = +vnd.dovecot.pipe +imapsieve
sieve_pipe_bin_dir = /usr/lib/dovecot/sieve-pipe
# --- SPAM学習 (Junk, Spam, Junk Emailフォルダに入った時) ---
imapsieve_mailbox1_name = Junk
imapsieve_mailbox1_causes = COPY APPEND
imapsieve_mailbox1_before = file:/var/lib/dovecot/sieve/learn-spam.sieve
imapsieve_mailbox2_name = Spam
imapsieve_mailbox2_causes = COPY APPEND
imapsieve_mailbox2_before = file:/var/lib/dovecot/sieve/learn-spam.sieve
imapsieve_mailbox3_name = Junk Email
imapsieve_mailbox3_causes = COPY APPEND
imapsieve_mailbox3_before = file:/var/lib/dovecot/sieve/learn-spam.sieve
# --- HAM学習 (上記フォルダから「出した」時) ---
imapsieve_mailbox4_name = *
imapsieve_mailbox4_from = Junk
imapsieve_mailbox4_causes = COPY
imapsieve_mailbox4_before = file:/var/lib/dovecot/sieve/learn-ham.sieve
imapsieve_mailbox5_name = *
imapsieve_mailbox5_from = Spam
imapsieve_mailbox5_causes = COPY
imapsieve_mailbox5_before = file:/var/lib/dovecot/sieve/learn-ham.sieve
imapsieve_mailbox6_name = *
imapsieve_mailbox6_from = Junk Email
imapsieve_mailbox6_causes = COPY
imapsieve_mailbox6_before = file:/var/lib/dovecot/sieve/learn-ham.sieve
}
5. 仕上げbash# Dovecot再起動
systemctl restart dovecot
# (任意) 手動でコンパイルを通しておく場合
sievec -c /etc/dovecot/dovecot.conf /var/lib/dovecot/sieve/learn-spam.sieve
sievec -c /etc/dovecot/dovecot.conf /var/lib/dovecot/sieve/learn-ham.sieve
chown dovecot:dovecot /var/lib/dovecot/sieve/*.svbin