例のごとく SPAM メール対策だが、実際にはプライベートなメールは GMail 経由なのでほとんど SPAMメールが届くことはない。逆に仕事で使ってるメールアドレスの方には、1日200通くらいくる。ということで、そっちの方の SPAM をどうにかしようということで、SpamAssassin を導入してみた。
SpamAssassin は本文の内容をチェックして、SPAM とおぼしき文章などを元にスコアを加算していき、あるしきい値以上になったら SPAM と判定するもので、学習させることも可能。なによりサーバー上で動かせるので、例えばあるスコア以上はもう SPAM 確定ってことで破棄して、それ未満のものはSPAM かもしれないよ、ってことでとりあえず配送してみる、なんてこともできる。スコアのつけ方も設定次第だし、学習によって誤認識も少なくできる。そうやって徐々にサーバー側で破棄するメールを増やしていけば、その分クライアント側で受け取るメールを減らせる。
元々メールを読むローカルマシン上で POPFile を使用していて、そこで振り分けをしてるので、サーバー側でやる必要もないんだが、あまりにも不要なメールが多いのと、ブログネタにもいいかな、ということでセットアップした。
仕事で使ってるマシンも OpenBSD で、SpamAssassin の最新版は 3.1.0 で ports のは 3.0.2。今回は ports からインストールした。実行ファイルは /usr/local/bin に spamassassin と spamc, spamd と3つコピーされる。spamc と spamd はそれぞれクライアントとデーモンでセットで使う。spamassassin は単体で使う。とりあえずメールごとに spamassassin を起動するのも何なので、spamd を起動しておいて(/etc/rc.local 変更)、spamc をキックすることにする。
SpamAssassin の設定ファイルは /etc/mail/spamassasin/local.cf にインストールされる。このファイルに SPAM 判定のためのルール(スコアのつけ方)など記入するらしいが、とりあえず細かいことはほったらかし。ただデフォルトで4行コメントアウトされてるうちの下記2行のみ有効にしてみた(なんか反映されてないような気がしないでもない...)。
rewrite_header Subject *****SPAM***** report_safe 1
さらに仕事で使ってるサーバーでは vpopmail によってメールボックスを管理してるので、/home/vpopmail/domains/DOMAIN(ドメイン名) に .qmail-ACCOUNT(自分アカウント)というファイルを用意して下記のように設定。
|/usr/local/bin/spamc | /home/vpopmail/bin/vdelivermail ' ' ACCOUNT
これで一旦 spamc で判定してから再度自身のメールボックスに配送する。
しばらくすると何通か SPAM 判定されてくる。その場合下記のようなメールと共に送られてくる。
Content analysis details: (9.4 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_BY_IP Received by mail server with no name 1.5 RCVD_NUMERIC_HELO Received: contains an IP address used for HELO 1.1 SUBJ_HAS_UNIQ_ID Subject contains a unique ID 0.6 RCVD_HELO_IP_MISMATCH Received: HELO and IP do not match, but should 1.2 SORTED_RECIPS Recipient list is sorted by address 0.0 HTML_60_70 BODY: Message is 60% to 70% HTML 0.0 HTML_MESSAGE BODY: HTML included in message 2.0 HTML_IMAGE_ONLY_08 BODY: HTML: images with 400-800 bytes of words 1.2 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 1.8 RCVD_IN_BL_SPAMCOP_NET RBL: Received via a relay in bl.spamcop.net
どういう基準で SPAM と判断したのか、スコアのつけ方など詳細が分かるので、このあたりを参考に設定ファイルを変更したりするといい。
ちなみに、まだ現時点ではすべてのメールを配送するような設定なので、最初に書いた通りあるスコア以上ならサーバー側で捨てる、なんて設定も今後試してみようと思う。
学習方法だが、メール本体が必要なので、その場合は IMAP でサーバーにアクセスして、SPAM or HAM 用フォルダを作成して、一旦受信したメールをそこに書き戻して、サーバー側では適当に cron でそれらのディレクトリをスキャンして学習、ってな方法が一番簡単かなと思っているが、まだこれはやってない。うまくいったらまたそのあたりの詳細もネタにする予定。
OpenID を使ってログインすることができます。
poker, backgammon, tramadol, casino, insurance, loans