SpamAssassin + procmail を用いた SPAM 撃墜

SpamAssassin によってメールを判定させ,procmail で振り分ける方法を解説. ちなみに SPAM の対義語は HAM らしい...


1. Thunderbird 側での準備

迷惑メール対策において,false positive (偽陽性) による悪影響は 最小限にとどめたい. そこで,あくまでサーバ側のお仕事は『これは怪しい!』のフラグを立てる 所までで,メールを別フォルダに移す・破棄するのは各ユーザの 判断によって行われるのがよいと思う.

EP サーバでは Thunderbird の利用を推奨しているが,Thunderbird には SpamAssassin (以降 SA) によるデフォルトのフラグを検知する 機能がある.まずはそれを有効にしよう.

  1. Thunderbird を開き,alt キーを押して画面上部の『ツール』を押し, 『アカウント設定』を開く

  2. 『迷惑メール』タブを開き,『このアカウントで迷惑メールの学習を有効にする』 『次の迷惑メールヘッダーを信用する』にチェックを入れ,迷惑メールヘッダとして 『SpamAssassin』を選択. また,『迷惑メールと判断された受信メッセージを次のフォルダーに移動する』 『次のアカウントの"迷惑メール"フォルダー』にチェックを入れる

以上で Thunderbird 側の準備は整った. ちなみに,SA ではデフォルトで迷惑メールの件名の先頭に 『*****SPAM*****』の文字列を挿入する. Thunderbird ではそれを検知し,迷惑メールフォルダなどに移動させることができる.

2. サーバ側での設定

続いて,メールサーバ側で受信メールを SA に判定させるための設定をする. 2025/09/07 現在,EP メールサーバでは全メールに対して SA による判定は 行っていない. そこで,ユーザ単位で受信メールを SA に判定してもらう設定が必要になる.

まず,dot-qmail ファイルを編集し,受信メールを procmail に渡すように設定する.

$ cd ~
$ vim dot-qmail
| preline /usr/bin/procmail   ## ./Mailbox など他の行は必要ない

dot-qmail は一連の設定が終わったら .qmail に上書きする. これは中途半端な .qmail でメール受信するのを防ぐ意味がある.

続いて,procmail の設定をしていく. procmail については過去の EPnetFaN 座学編資料 ( procmail de SPAM 撃墜!) を参照されたい.

$ cd ~
$ mkdir .procmail
$ vim .procmailrc
SHELL=/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
ADDRESS=hoge@ep.sci.hokudai.ac.jp
LOGFILE=$HOME/.procmail/`date +%Y%m`.log
LOCKFILE=$HOME/.procmail/.lockfile
MAILDIR=$HOME/Maildir
MBOX=$HOME/Mailbox
DEFAULT=$MBOX

# spamc に通す (フィルタ)
:0fw
| /usr/bin/spamc

# ========== ここから配送 ==========

# mbox 形式 (Mailbox)
:0c:
$HOME/Mailbox

# Maildir 形式
:0
$HOME/Maildir/

Gmail などへ転送させる場合は以下のように書く.

SHELL=/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
ADDRESS=hoge@ep.sci.hokudai.ac.jp
LOGFILE=$HOME/.procmail/`date +%Y%m`.log
LOCKFILE=$HOME/.procmail/.lockfile
MAILDIR=$HOME/Maildir
MBOX=$HOME/Mailbox
DEFAULT=$MBOX

# spamc に通す (フィルタ)
:0fw
| /usr/bin/spamc

# ========== ここから配送 ==========

# mbox 形式 (Mailbox)
:0c:
$HOME/Mailbox

# Maildir 形式
:0c
$HOME/Maildir/

# 外部アドレス転送
:0
! hogehoge@example.com
$ cd ~
$ cp .qmail dot-qmail.bk  ## バックアップ
$ chmod 600 dot-qmail
$ mv dot-qmail .qmail

設定完了後は必ず自分宛てにテストメールを送り,正しく受信できることを 確かめること. また,procmail の書式については man procmail を参照のこと.

最終的には qmail-queue ラッパーとして SA に判定させる形を 想定している. ラッパー導入後は dot-qmail,procmail の設定は全て元通りにすること.

3. 誤判定の対応

誤判定をゼロにすることは限りなく不可能に近い. そこで,万が一メールの誤判定が出た場合の対応法を記す.

  1. 誤判定メールを受け取った場合,そのメールを eml 形式で 保存し,メールサーバに置く. Thunderbird のメール画面右上の『その他』タブから 『名前を付けて保存』で任意の名前.eml にして保存. それを sftp でメールサーバへ置く.

  2. $ sftp hero@mail.ep.sci.hokudai.ac.jp
    sftp> put falsemail.eml
    
  3. 誤判定メールを正しい判定結果で学習させる. 迷惑メールには --spam を,非迷惑メールには --ham を オプションとして付けること.
  4. $ ssh hero@mail.ep.sci.hokudai.ac.jp
    $ sa-learn --spam falsemail.eml
    $ rm falsemail.eml
    

メール管理者は定期的に迷惑メールの判定スコア (/etc/mail/spamassassin/local.cf) の見直しや, 迷惑メール・非迷惑メールの追加学習を行うこと.




最終更新日: 2025/09/07 山本 峻大 Copyright © 2025-2025 epcore