| トップ | Solaris | FreeBSD | Gentoo | CentOS | Fedora | Windows | Tips | 自宅サーバの動作確認 | サイト内検索(Namazu) | サイト内検索(HE) |
スパムメール対策の為、「Procmail」と「SpamAssassin」を導入します。
なお、「SpamAssassin」はスパムメールの判定を行うのみであり、振り分けは「Procmail」が行います。
その為、「Procmail」のみでもきちんとレシピ(ルール)を作成すればスパム対策は出来ますので、その方法も記述します。
FreeBSD# cd /usr/ports/mail/procmail <= 作業ディレクトリへ移動 FreeBSD# make install clean <= 「Procmail」のインストール |
「.procmailrc」ファイルの設定
メールを振り分けるルールを決める為にレシピを設定します。
なお、ここでは簡単なレシピのみ記述しています。
詳しくはネット等で調べて下さい。
FreeBSD> 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 -meZ2 | 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 |
スパムメール保存用のディレクトリを作成します。
FreeBSD> mkdir ~/Maildir/.spam |
新規ユーザ作成時もディレクトリが作成されるようにします。
FreeBSD# mkdir /usr/share/skel/Maildir/.spam |
ブラックリストファイルの作成
ブラックリストファイルは拒否したいアドレスを、1つに付き1行に記述します。
FreeBSD> vi ~/.blacklist <= ブラックリストファイルの作成 foo@hogehoge.com foo@hoge.com |
「.forward 」ファイルの設定
ローカルユーザに届いたメールを「Procmail」に渡すようにします。
FreeBSD> vi ~/.forward <= 設定ファイルの作成 "|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #username" <= usernameにはユーザ名を指定 |
FreeBSD# cd /usr/ports/mail/p5-Mail-SpamAssassin <= 作業ディレクトリへ移動 FreeBSD# make install clean <= 「SpamAssassin」のインストール |
「SpamAssassin」から出力されるsyslogはファシリティがmailですが、別のログに出力するようにします。
FreeBSD# vi /etc/rc.conf <= 設定ファイルの編集 spamd_enable="YES" <= 追加 spamd_flags="-c -H -s /var/log/spamd.log" <= 追加 FreeBSD# /usr/local/etc/rc.d/sa-spamd start <= 「SpamAssassin」の起動 |
「SpamAssassin」の設定
「SpamAssassin」はデフォルトでは日本語のスパムメールには対応していませんので、
TLECさんが作成された定義ファイルを利用させて頂きます。
なお、定義ファイルは全ユーザに適用されるものは
/usr/local/etc/mail/spamassassin/local.cf
になり、ユーザごとに適用されるものは
~/.spamassassin/user_prefs
になります。
ここでは、ユーザごとに設定するようにしていますが、学習結果を共有する設定も記述しています。
また、ユーザごとに適用される定義ファイルの格納ディレクトリは、最初に「SpamAssassin」が機能したときに作成されます。
その為、もしディレクトリが無い場合は作成する必要があります。
FreeBSD# cp /usr/local/etc/mail/spamassassin/local.cf.sample /usr/local/etc/mail/spamassassin/local.cf <= サンプル設定ファイルのコピー FreeBSD# vi /usr/local/etc/mail/spamassassin/local.cf <= 設定ファイルの編集 allow_user_rules 1 <= 追加(ユーザごとのルールを有効にする) FreeBSD# exit <= 一般ユーザになる FreeBSD> wget http://tlec.linux.or.jp/docs/user_prefs <= 定義ファイルのダウンロード FreeBSD> mv user_prefs ~/.spamassassin/user_prefs <= ダウンロードした定義ファイルの移動 FreeBSD> 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」を再起動し、設定を反映させます。
FreeBSD# mkdir -p /etc/mail/spamassassin/bayes <= 学習結果を共有するディレクトリを作成 FreeBSD# chmod 777 /etc/mail/spamassassin/bayes <= 学習結果を共有するディレクトリの権限を変更 FreeBSD# /usr/local/etc/rc.d/sa-spamd restart <= 「SpamAssassin」の再起動 |
「Procmail」の設定
「SpamAssassin」用の設定を「Procmail」の上記で設定したファイルに追加します。
なお、ここではスパムメール受信専用のユーザを作成し、スパムメールを配送しています。
FreeBSD> vi ~/.procmailrc <= 設定ファイルの編集 # 「SpamAssassin」対応 :0 fw | /usr/local/bin/spamc :0 * ^X-Spam-Status: Yes !spam@crimson-snow.net |
スパムメール受信専用ユーザの作成
FreeBSD# pw useradd -n spam -d /usr/home/spam -m |
spamユーザでメールを確認し、スパムメールかどうかの判定を行います。
誤認識された正常メールがある場合、指定したディレクトリに移動させ、学習させます。
その為、IMAPで受信するか、POP3で受信するならサーバ側にメールを残すようにします。
また、スパムメールがユーザに配送された場合、スパムメールとして学習させますが、
クライアント側に取り込んでしまいますと学習出来ません。
その為、こちらもIMAPで受信するか、POP3で受信するならサーバ側にメールを残すようにします。
正常メールをスパムメールと判定した場合
正常メールを格納する為のディレクトリを作成します。
FreeBSD# mkdir /usr/home/spam/Maildir/.ham |
上記で作成したディレクトリに正常メールを移動させます。
移動は普通にmvコマンドで移動させます。
その後、正常メールであることを学習させます。
FreeBSD# sa-learn --ham /usr/home/spam/Maildir/.ham <= 誤認識された正常メールの学習 FreeBSD# sa-learn --sync <= ジャーナルをDBに反映させる |
スパムメールを正常メールと判定した場合
スパムメールを格納する為のディレクトリを作成します。
なお、このディレクトリは「Procmail」の設定時に作成したディレクトリを使用していますので、
すでに作成されている場合、この作業は必要ありません。
FreeBSD# mkdir /usr/home/spam/Maildir/.spam |
上記で作成したディレクトリにスパムメールを移動させます。
移動は普通にmvコマンドで移動させます。
その後、スパムメールであることを学習させます。
FreeBSD# sa-learn --spam /usr/home/spam/Maildir/.spam <= 誤認識されたスパムメールの学習 FreeBSD# sa-learn --sync <= ジャーナルをDBに反映させる |
「SpamAssassin」を運用しているとデータベースの容量が日々増えていきますが、
マシンの性能によっては容量の増加により処理が追いつかなくなり、タイムアウトになって正しく処理が行われないケースが発生します。
また、容量が大きくなった場合に自動でエクスポートが行われますが、マシンの負荷とは無関係に行われるので、これらの対策を行います。
「SpamAssassin」の設定
FreeBSD> vi ~/.spamassassin/user_prefs <= 設定ファイルの編集 以下を追加 bayes_expiry_max_db_size 1000000 <= データベースの最大値(この値の75%を越えると自動的にエクスポートが行われる) bayes_auto_expire 0 <= データベースのエクスポートを自動で行わない |
エクスポートプロセスの実行
エクスポートプロセスを実行したい「SpamAssassin」のデータベースの所有ユーザで実行します。
FreeBSD> sa-learn --sync --force-expire |
cronに登録してマシンの負荷の少ない時間に実行します。
FreeBSD> crontab -e <= cronの編集 0 5 * * * /usr/local/bin/sa-learn --sync --force-expire > /dev/null 2>&1 <= 追加 |