プロバイダからメールアドレスを一つもらって、宅内サーバを運営していると、そのめーるもほしくなりませんか? また、そのメールがSPAMだったら悲しい出来事です。 そこで、勝手にメールを取ってきて、SPAMチェックまでしてくれる方法を考えてみました。よければどうぞ!! ∈^0^∋ Spamassassinファイルと各バージョン spamassassin-2.55-0vl2 spamassassin-tools-2.55-0vl2 perl-Mail-SpamAssassin-2.55-0vl2 Fetchmailファイルと各バージョン fetchmail-5.9.11-0vl1 fetchmailconf-5.9.11-0vl1 Procmailファイルと各バージョン procmail-3.22-0vl2 1:Procmailの設定 Procmailはメールが来たときに動作する。よってトリガーは特に設定がない。 spamassassinが起動するとき「--auto-whitelist(-a でもよい)」をつけると自動的にホワイトリストを作成する。 各ユーザごとに設定する。 ファイル保存場所 = $HOME/.procmailrc VERBOSE=off MAILDIR=/var/spool/mail PMDIR=/var/log/procmail LOGFILE=$PMDIR/$LOGNAME.log :0fw | /usr/bin/spamassassin --auto-whitelist # Spam Check :0: * ^X-Spam-Status: Yes ! spam@mail.desu # メールに送る場合 /home/hogehoge/spam.txt # ファイルに残す場合 どちらかを「#」にてコメントアウトすること 2:spamassassin全体の設定 ファイル保存場所 => /etc/mail/spamassassin/local.cf local.cf を設定する。今回はHIT POINTは6点でスパム認定 最後の行は、ホワイトリストの所在地。local.cfで設定するとネットワーク全体のホワイトリストが完成する。 # This is the right place to customize your installation of SpamAssassin. # See 'perldoc Mail::SpamAssassin::Conf' for details of what can be # tweaked. # ########################################################################### # #rewrite_subject 0 #report_header 1 #defang_mime 0 ok_languages ja en ok_locales ja en required_hits 6 full RAZOR_CHECK describe RAZOR_CHECK score NAME_OF_TEST 3.0 score CASHCASHCASH 0.00 score UPPERCASE_25_50 0.00 score UPPERCASE_50_75 0.00 score UPPERCASE_75_100 0.00 score US_DOLLARS_2 0.00 score HTTP_CTRL_CHARS_HOST 0.00 auto_whitelist_path /etc/mail/spamassassin/auto-whitelist 3:spamassassinの個別設定を行う ファイル保存場所 => $HOME/.spamassassin/ 各ユーザのホームディレクトリに .spamassassin のディレクトリを作成する。 ここに、SPAMと判定する文字を入力して、ポイントを設定する。 デフォルトは、 /etc/doc/spamassassin/sample-japanese.cf をコピーして user_prefs と名前を変更する。 簡単カスタマイズ ★日本語をそのまま使うことはできないのでS-JISをJISに変更する必要がある。 変更ツールとして、 旧 echo 'Japanese spam keyword' | nkf -j | od -t a echo echo 'サンプル' | nkf -j | awk '{gsub(/\x1B[$(]B/,"");print}' <- こっちの方がいいそうです 参考ぷらぷらブログさん と、コマンド入力をする。 Jananese spam keyword に日本語を入力する。 (例 1)件名に「未承認」があればPOINTを与えたい場合 $ echo '未承認' | nkf -j | od -t a 0000000 esc $ B L $ > 5 G ' esc ( B nl 0000015 頭と最後の3文字ずつ削る => L $ > 5 G ' ここからスペースを除く => L$>5G' <<注意>> $|>.,等はコマンドとして成立するので「¥」を前に入れて無効化しておく 件名は subject なので、メールヘッダーにあるからチェック場所を指定する 10POINTを与える header MISYOUNIN Subject =~ /L\$>5G'/ describe MISYOUNIN Misyonin score MISYOUNIN 10.0 ★ドメインをホワイトリストに載せたい場合(自分の会社を設定したりする) whitelist_from *@hogehoge.gr.jp (例 2)文書内容に「合法ドラッグ」があればPOINTを与えたい場合 日本語をJISに変換するのは上の同じ。 300POINTを与える(ホワイトリストは大体-100POINT) body GOUHOUDRAG /9gK!%I%i%C%0/ describe GOUHOUDRAG Gouhou Drag score GOUHOUDRAG 300.0 ★個別にホワイトリストを作る 個別にホワイトリストを作る場合は、user_prefsの最後に auto_whitelist_path /home/hogehoge/.spamassassin/auto-whitelist とすればできあがる。 4:Fetchmailの設定をする ファイル保存場所 => $HOME/.fetchmailrc Fetchmailは違うサイトのメールを取得してきてくれる。そのときに、こちらにあるSpamassassinで SPAMチェックができれば便利がよい。 set daemon 7200 # 起動しておけば2時間おきにチェックする。デーモン管理になる set nobouncemail # エラーメールを送信者に転送しないための設定 poll pop.hogehoge.gr.jp # popサーバ protocol pop3 # pop3 か imap などプロトコル指定 user "hoge" # ユーザ名 password "hoge" # パスワード 平文で丸見えである flush # メールを残さない。残したい場合は keep no mimedecode # メールサブジェクトが文字化けしないため(サブジェクトをデコードしないよう)に記述 mda "/usr/bin/procmail -d hoge" # 受信したメールをProcmailに送る。ユーザを -d にて指定する 4-2:Fetchmailをcronで動作させるとき(メモリ節約タイプ) Fetchmailをデーモンではなくcronで動作させる場合 0 */2 * * * /usr/bin/fetchmail > /dev/null これで2時間ごとに動作する。分の所を*にすると、0分~59分まで連続起動するので必ず指定する 2003/05/27 記述 2005/03/07 フレーズを作るところに加筆