スパム対策(「Procmail」+「SpamAssassin」)

スパムメール対策の為、「Procmail」と「SpamAssassin」を導入します。
なお、「SpamAssassin」はスパムメールの判定を行うのみであり、振り分けは「Procmail」が行います。
その為、「Procmail」のみでもきちんとレシピ(ルール)を作成すればスパム対策は出来ますので、その方法も記述します。

「Procmail」のインストール
[root@Fedora ~]# yum -y install procmail <= 「Procmail」のインストール
[root@Fedora ~]# yum clean packages <= ダウンロードしたパッケージの削除
「Procmail」の設定

「.procmailrc」ファイルの設定

メールを振り分けるルールを決める為にレシピを設定します。
なお、ここでは簡単なレシピのみ記述しています。
詳しくはネット等で調べて下さい。

[kaz@Fedora ~]$ vi ~/.procmailrc <= 設定ファイルの作成
PATH=/bin:/usr/bin:/usr/local/bin <= パスの設定
MAILDIR=$HOME/Maildir <= メールディレクトリへのパス
DEFAULT=$MAILDIR/ <= 下記配送条件にマッチしなかった時の配送先
LOGFILE=$MAILDIR/procmail.log <= ログの保存先を指定
BLACKLIST=$HOME/.blacklist <= ブラックリストファイルを指定
SPAM=$MAILDIR/.spam <= スパムメールの保存先を指定

# 未承諾広告対策
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -mwZ2 | grep '未承諾広告'
$SPAM

# 特定のアドレスからの迷惑メール対策
:0
* ^From:.*hoge@hogehoge.com
$SPAM

# ブラックリスト対策
:0
* ? test -s $BLACKLIST
* ? formail -x From: -x Reply-To: -x Sender: -x From | fgrep -iqf $BLACKLIST
/dev/null

スパムメール保存用のディレクトリを作成します。

[kaz@Fedora ~]$ mkdir ~/Maildir/.spam

新規ユーザ作成時もディレクトリが作成されるようにします。

[root@Fedora ~]# mkdir /etc/skel/Maildir/.spam

ブラックリストファイルの作成

ブラックリストファイルは拒否したいアドレスを、1つに付き1行に記述します。

[kaz@Fedora ~]$ vi ~/.blacklist <= ブラックリストファイルの作成
foo@hogehoge.com
foo@hoge.com

「.forward 」ファイルの設定

ローカルユーザに届いたメールを「Procmail」に渡すようにします。

[kaz@Fedora ~]$ vi ~/.forward <= 設定ファイルの作成
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #username<= usernameにはユーザ名を指定
「SpamAssassin」のインストール
[root@Fedora ~]# yum -y install spamassassin <= 「SpamAssassin」のインストール
[root@Fedora ~]# yum clean packages <= ダウンロードしたパッケージの削除
「SpamAssassin」の起動

「SpamAssassin」の起動

「SpamAssassin」から出力されるsyslogはファシリティがmailですが、別のログに出力するようにします。

[root@Fedora ~]# vi /etc/sysconfig/spamassassin <= 設定ファイルの編集
SPAMDOPTIONS="-d -c -m5 -H"
↓
SPAMDOPTIONS="-d -c -m5 -H -s /var/log/spamd.log" <= 変更


[root@Fedora ~]# /etc/rc.d/init.d/spamassassin start <= 「SpamAssassin」の起動

「SpamAssassin」の自動起動

Fedoraを起動する際に自動的に「SpamAssassin」を起動するようにします。

[root@Fedora ~]# chkconfig spamassassin on
「SpamAssassin」の設定

「SpamAssassin」の設定

「SpamAssassin」はデフォルトでは日本語のスパムメールには対応していませんので、 TLECさんが作成された定義ファイルを利用させて頂きます。
なお、定義ファイルは全ユーザに適用されるものは
/etc/mail/spamassassin/local.cf
になり、ユーザごとに適用されるものは
~/.spamassassin/user_prefs
になります。
ここでは、ユーザごとに設定するようにしていますが、学習結果を共有する設定も記述しています。
また、ユーザごとに適用される定義ファイルの格納ディレクトリは、最初に「SpamAssassin」が機能したときに作成されます。
その為、もしディレクトリが無い場合は作成する必要があります。

[root@Fedora ~]# vi /etc/mail/spamassassin/local.cf <= 設定ファイルの編集
allow_user_rules 1 <= 追加(ユーザごとのルールを有効にする)


[root@Fedora ~]# exit <= 一般ユーザになる
[kaz@Fedora ~]$ wget http://tlec.linux.or.jp/docs/user_prefs <= 定義ファイルのダウンロード
[kaz@Fedora ~]$ mv user_prefs ~/.spamassassin/user_prefs <= ダウンロードした定義ファイルの移動

[kaz@Fedora ~]$ vi ~/.spamassassin/user_prefs <= 設定ファイルの編集
required_score 13.0 <= スパムと判断する閾値を指定

report_safe 0 <= 追加(スパムメールを添付形式にしない)

ホワイトリストの設定(必要なだけ記述)
whitelist_from *@hoge.com
whitelist_from *@fuga.com
ここまで

ブラックリストの設定(必要なだけ記述)
blacklist_from *@hoge.org
blacklist_from *@fuga.org
ここまで

学習結果を共有する場合、以下を追加
bayes_path /etc/mail/spamassassin/bayes/bayes
bayes_file_mode 0666
auto_whitelist_path /etc/mail/spamassassin/bayes/auto-whitelist
auto_whitelist_file_mode 0666
ここまで

学習結果を共有する場合は、必要なディレクトリを作成してから「SpamAssassin」を再起動し、設定を反映させます。

[root@Fedora ~]# mkdir -p /etc/mail/spamassassin/bayes <= 学習結果を共有するディレクトリを作成
[root@Fedora ~]# chmod 777 /etc/mail/spamassassin/bayes <= 学習結果を共有するディレクトリの権限を変更

[root@Fedora ~]# /etc/rc.d/init.d/spamassassin restart <= 「SpamAssassin」の再起動

「Procmail」の設定

「SpamAssassin」用の設定を「Procmail」の上記で設定したファイルに追加します。
なお、ここではスパムメール受信専用のユーザを作成し、スパムメールを配送しています。

[kaz@Fedora ~]$ vi ~/.procmailrc <= 設定ファイルの編集
# 「SpamAssassin」対応
:0 fw
| /usr/bin/spamc

:0
* ^X-Spam-Status: Yes
!spam@crimson-snow.net

スパムメール受信専用ユーザの作成

[root@Fedora ~]# useradd spam
「SpamAssassin」の学習

spamユーザでメールを確認し、スパムメールかどうかの判定を行います。
誤認識された正常メールがある場合、指定したディレクトリに移動させ、学習させます。
その為、IMAPで受信するか、POP3で受信するならサーバ側にメールを残すようにします。
また、スパムメールがユーザに配送された場合、スパムメールとして学習させますが、 クライアント側に取り込んでしまいますと学習出来ません。
その為、こちらもIMAPで受信するか、POP3で受信するならサーバ側にメールを残すようにします。

正常メールをスパムメールと判定した場合

正常メールを格納する為のディレクトリを作成します。

[root@Fedora ~]# mkdir /home/spam/Maildir/.ham

上記で作成したディレクトリに正常メールを移動させます。
移動は普通にmvコマンドで移動させます。
その後、正常メールであることを学習させます。

[root@Fedora ~]# sa-learn --ham /home/spam/Maildir/.ham <= 誤認識された正常メールの学習

スパムメールを正常メールと判定した場合

スパムメールを格納する為のディレクトリを作成します。
なお、このディレクトリは「Procmail」の設定時に作成したディレクトリを使用していますので、 すでに作成されている場合、この作業は必要ありません。

[root@Fedora ~]# mkdir /home/spam/Maildir/.spam

上記で作成したディレクトリにスパムメールを移動させます。
移動は普通にmvコマンドで移動させます。
その後、スパムメールであることを学習させます。

[root@Fedora ~]# sa-learn --spam /home/spam/Maildir/.spam <= 誤認識されたスパムメールの学習
▲ページのトップへ