メールサーバー(Postfix+Dovecot)でスパムメールを転送しないようにする
僕は自宅のメールサーバー(Postfix+Dovecot)のaliasesを使って受信したメールを携帯に転送するようにしています。
ところが、最近スパムメールがやたら来るようになり、四六時中携帯が鳴りっぱなし。
こりゃタマラン!ってことで、、
「Fedoraで自宅サーバー構築」様の
「メールサーバーでウィルス&スパムチェック(Postfix+amavisd-new+Clam AntiVirus+SpamAssassin)」
を参考にスパムチェックツールをインストールしてみました。
このSpamAssassinでスパムチェックし、スパムと判断されたメールはその場で削除するかSpamフォルダに移動させ、携帯に転送しないようにするはずだったんですが、、
SpamAssassin、amavisd-newをインストールし、メールソフトをIMAPに変更して動作テストしてみると、どうもSpamAssassinがスパム判定したメールを振り分けるProcmailが動いていないようです。
そこで、いろいろ調べながらテストした結果、以下の設定で正常に動作するようになりました。
●自分のディレクトリに「.forward」を作成(これが無いとprocmailが起動しないらしい)
# vi /home/vic/.forward
—————————————————————————————————————————————
“|IFS=’ ‘ && exec /usr/bin/procmail -f- || exit 75 #vic”
# 最後の#の後ろに自分のアカウント(vicを指定)
—————————————————————————————————————————————
●作成したフォワードファイルの所有者・グループ設定
# chown vic:vic /home/vic/.forward
●/home/vic/に「.procmailrc」を下記の内容で作成してprocmailを動作させる
# vi /home/vic/.procmailrc
—————————————————————————————————————————————
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.Spam/
LOGFILE=$MAILDIR/.procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力
# 未承諾広告メールを削除
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo “$MATCH” | nkf -mwZ2 | sed ‘s/[[:space:]]//g’ | egrep ‘未承諾広告※’
/dev/null
# SpamAssassinによるスパムチェック
:0fw
|/usr/bin/spamc
# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# (必要なメールが削除されてしまう可能性があるので、以下の3行はとりあえずコメントアウトしておき、しばらくの間メールソフトの
# Spamフォルダをチェックして、必要なメールがスパム判定されていないのを確認してから「#」を外す)
#:0
#* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
#/dev/null
# SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送
# (この時点でスパムと判断されたメールは転送されません)
:0
*^X-Spam-Flag: YES
$SPAM
# メール転送設定
# 例として、Subjectに”SPAM”が含まれてなければ、メールボックスに受信メールを残して
# コピーを「sample@keitai.com」に転送
# (2行目の条件文をコメントアウトすれば、上でスパムと判断されなかったメールは全て転送されます)
:0 c
*!^Subject: .*”SPAM.*
! sample@keitai.com
—————————————————————————————————————————————
● 作成した「.procmailrc」の所有者・グループ設定
# chown vic:vic /home/vic/.procmailrc
これでSpamAssassin・Procmailともに正常に動作してほとんどのスパムメールがSpamフォルダに入り、スパムメールは携帯に転送されなくなりました。
あとはメールソフト上で以下の作業をすることで、SpamAssassinの学習機能でさらに精度が上がっていきます。
1.必要なメールでスパム判定されてSpamフォルダに入っていたメールがあったら、受信フォルダに移しておきます。
2.スパム判定をすり抜けて受信フォルダに入ってきたスパムメールはSpamフォルダに移しておきます。
3.まず読むことのない広告メール(スパムではない)もSpamフォルダにブチ込んじゃいます。
これをしばらく繰り返してSpamAssassinのスパム判定が必要十分な精度に上がったら、.procmailrcでコメントアウトしていた「一定値以上のSpam-levelの自動削除」を有効にすればほとんど手間いらずになります。
ちなみに、SpamAssassinとProcmailが正常に動作するようになると、受信したメールのヘッダーにSpamAssassinのスパム判定レベルポイントが表示されるようになります。(ヘッダーを全て表示にした場合)
これで数日間確認したところ、スパムメールのほとんどは20ポイント以上で、20ポイント未満だったのは数件のみ。またスパムではないメール(広告メール的なものも含めて)はほぼ10数ポイント以下で、必要なメールで20ポイント以上だったのは1件だけでした。
なのでSpamAssassinの自動削除レベル20ポイントは妥当な数値だと思います。