親会社のスタッフの一人が退職され、ホームページに公開しているアドレスの管理が僕に回ってきました。まぁよくある info@****.com を複数の人間に転送しとこうみたいな感じですで、今月から転送されてきたメールを受け取ってるんですが・・・ スパム多すぎるんじゃぼけ〜〜!!! やー、公開してるとこんなに来るもんですか。僕はメーラーにThunderbirdを使用してまして、ThunderbirdのSpamフィルターは優秀なんですが、それでも意外に海外のメールとかがスルーされてしまう。 朝来て大体500〜800ぐらメール受信して、そのうちの9割はThunderbirdがスパム判定してくれるけど、残りの1割のうちの8割はやっぱりスパム。 これは朝からしんどいということでサーバー側でフィルターをかけるようにしました。 目指せスパム撲滅。 サーバーはCentOSでPostfixを使っていたのでメールサーバーでウィルス&スパムチェック(Postfix+Clam AntiVirus+SpamAssassin) ↑上記のような非常に優秀なサイトを参考にシコシコとインストール。 Clam AntiVirus というのはウイルス判定ソフトで、amavisd-new というのがメールのヘッダー判定ソフトでSpamAssassin というのがスパム判定ソフトのようです。でインストールまでは問題なくでき、一見完了しているかに見えるんですが、スパム判定がうまくいかない。届くメールのヘッダーには X-Virus-Scanned: amavisd-new と追加され、amavisdを経由しているのはわかるんですが、スパム判定されたときに***SPAM***と件名についていない。 本来だと.Spam というディレクトリに転送されるはずが(今回はThunderbirdの仕様に合わせたので.Junkというディレクトリ)これもうまく転送されていない。 2日ほど悩んで気づきました。 まずひとつは、上記のサイトはドメインが一つで運営されたサーバーだということ。うちのサーバーみたいにバーチャルドメインにしている場合は、 /etc/amavisd/amavisd.conf の$mydomainあたりを複数ドメインに指定してやらなければいけないわけです。 もう一つが/etc/procmailrcの設定。 参考サイトでは procmail をつかってメールの振り分けをしているんですが、どうもバーチャルドメイン環境では優先順位が違う様子。具体的にいうと/etc/postfix/main.cfのmailbox_command = /usr/bin/procmailより、virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cfのほうが優先されて先に振り分けられてしまうみたい。これは困った問ことで、色々考えた結果、最後はスパム判定をamavisd-newにさせてしまおうという結論に。http://drupal.395963.com/node/84↑このへんを参考に/etc/amavisd/amavisd.conf の #@bypass_spam_checks_maps = (1);をコメントすると、amavisd-new がスパム判定をします。ただ、このままではスパム判定が厳しいので、http://www.imc.cce.i.kyoto-u.ac.jp/~umehara/misc/comp/20060506.html↑このへんを参考に $sa_tag_level_deflt = 7.0; # ヘッダにスパムの情報を加える$sa_tag2_level_deflt = 15.0; # スパムであると判定する$sa_kill_level_deflt = 15.0; # スパムを宛先に通知しアーカイブを保存する$sa_dsn_cutoff_level = 20.0; # スパムを宛先に通知しない としました。 後は /etc/init.d/amavisd restartと再起動して、/var/log/maillog を確認してみると・・・cat /var/log/maillog | grep 'Blocked SPAM' Apr 15 12:28:13 itm*** amavis[19406]: (19406-10) Blocked SPAM, [211.0.63.57] [83.110.***.***] <dmiraau@acculab.com> -> <***@itm.***.jp>, Message-ID: <20b11f64x22-62628552-869t5z88@ydbphhjw>, mail_id: xhBvrdNQhwEH, Hits: 66.678, 4294 ms というようにはじいていることがわかります。このHits: 66.678,というのがスパムポイントですね。ちなみにprocmailに判定を任せて#@bypass_spam_checks_maps = (1);↑のコメントを外すとApr 15 11:56:47 flagsystem amavis[25098]: (25098-14) Passed CLEAN, [182.48.***.***] [182.48.***.***] <"info@itm-asp.***,system"@itm.ne.jp> -> <contact@flagsystem.***.***>, Message-ID: <20110415025647.26321.qmail@itm-asp.com>, mail_id: mIFpWCQKbSFA, Hits: -, size: 5934, queued_as: 868802961A8, 160 msみたいな感じになって、Hits: -,と判定されてません。その後Apr 15 11:57:00 flagsystem postfix/local[27760]: 868802961A8: to=<contact@flagsystem.***.***>, relay=local, delay=13, delays=0.01/0/0/13, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail)とdelivered to command: /usr/bin/procmailとprocmailに判定を任せてたlogが残ります。 やー。 やっとなんとなく理解できた。 ちなみにどんなメールを弾いてるかcat /var/log/maillog | grep 'Blocked SPAM'で確認してみると・・・・・ Apr 15 10:12:26 itm-*** amavis[17937]: (17937-01) Blocked SPAM, [211.133.130.147] [***.***.***.***] <mmz-79hc=65125560683147=2jjvbvx=453=***=***.ne.jp@magerr.combzmail.jp> -> <***@***.ne.jp>, Message-ID: <20110415011222.7551.qmail@r1339.ps.combzmail.jp>, mail_id: npcKVwVbSEm6, Hits: 35.976, 3797 ms でた!コンビーズメールHits: 35.976はちょっと高杉じゃないでしょうか。大手メルマガ配信スタンドなのに。届かないとかスパムだとか苦情が多いのもわかる気がします。 ちょっと驚いたのがこれApr 15 11:26:28 itm-*** amavis[18691]: (18691-10) Blocked SPAM, [203.174.74.38] [***.***.***.***] <mailman-bounces@ml.postgresql.jp> -> <***@***.ne.jp>, Message-ID: <20110415022619.1461775E5F8@ml.postgresql.jp>, mail_id: gQzGXn79Ib1l, Hits: 74.753, 2488 ms PostgreSQLユーザー会のメーリングリスト本家じゃないか!Hits: 74.753と高すぎです。たのんます。本家さん。とりあえず救済リストにいれてスパム判定しないようにしました。(その方法はこちら)そんな感じでスパム対策も一段落 また時間があったら続きかきます。