CourierでSpamAssassinを利用してスパム対策

1. やっぱり面倒スパムメール

現在、メールサーバを運用しているのだけれど、やっぱりスパムメールがいっぱいくる。来るだけで害はない、はずなんだけれど、見通しが悪くなる点とかあって、できれば自動的にスパムを省いたりしたい。

で、導入されたのがSpamAssassin。

スパムメール対策としては結構有名なものらしく、解説してくれてるページもそれなりにあってインストールもお手軽。

そして実際、すでに運用されている。

今回はメールサーバを移転するに当たって、再度SpamAssassinを入れる事になった。

2. インストール

さて、今回SpamAssassinを導入するのは、すでにCourier-mtaが動いているメールサーバだ。ここにPerlスクリプトなSpamAssassinを導入してスパムメールをカットする。

SpamAssassinの動作する仕組みはいくつかあるらしい。一つはsmtpで(といっても中継させるサービスを立てて)SpamAssassinに受信させて、さらにそこから読み出す手法、もう一つはmaildropを通じてSpamAssassinにヘッダを書き換えさせ、maildropで振り分けを行う

CourierはSpamAssassinなどの外部サービス(他にはメーリングリストとかかな)、を利用する際には、後者のスクリプトでのリダイレクトを利用する。

とりあえずインストールしてみる。japanese版のspamassassinがあったのでそちらを試してみる。

精度がよくなるらしいので、どどーんと景気よくmakeオプションとして全部与えてみた。


shell> portinstall –c japanese/p5-Mail-SpamAssassin

…(略)…

shell> pkg_info -Ix SpamAssassin
ja-p5-Mail-SpamAssassin-3.3.2_1 SpamAssassin with Japanese tokenizer

shell> more /var/db/ports/ja-p5-Mail-SpamAssassin/options
# This file is auto-generated by 'make config'.
# No user-servicable parts inside!
# Options for ja-p5-Mail-SpamAssassin-3.3.2_1
_OPTIONS_READ=ja-p5-Mail-SpamAssassin-3.3.2_1
WITH_AS_ROOT=true
WITH_SPAMC=true
WITH_SACOMPILE=true
WITH_DKIM=true
WITH_SSL=true
WITH_GNUPG=true
WITHOUT_MYSQL=true
WITHOUT_PGSQL=true
WITH_RAZOR=true
WITH_SPF_QUERY=true
WITH_RELAY_COUNTRY=true
WITH_DCC=true

shell> grep spam /etc/rc.conf
spamd_enable="YES"

shell> /usr/local/etc/rc.d/sa-spamd start

3. SpamAssassinの有効化

続いてSpamAssassinを有効化する。まずはCourierがSpamAssassinを通るように設定する。

maldropを通るように設定して、mailのhomedir直下にある.mailfilterにSpamAssassinを通るように記述する。

今回はCourierのユーザアカウント管理にLDAPを使っているので、ldapsearchでhomeDirを調べてみた。

SpamAssassinでひっかかったメールはspamディレクトリに入るようにする。なので.spamというcourierのMaildirサブフォルダを作っておく。


shell> ldapsearch -x -b 'dc=l2tp,dc=org' –h ldaphost '(&(objectClass=mailAccount)(cn=hogetan))' | grep homeDirectory

homeDirectory: /var/maildir/example.com/hogetan/

shell> maildirmake -f spam /var/maildir/example.com/hogetan/Maildir/

shell> more /var/maildir/example.com/hogetan/.mailfilter

…(略)…

xfilter "/usr/local/bin/spamc"
if (/^X-Spam-Flag: *YES/)
{
to "$MAILDIR/.spam/"
}
…(略)…

今回SpamAssassinテストしたときにはmaildirの所有者の設定ミスでブラックリスト入りさせられてしまった。エラーメッセージを下記に記載しておく。


shell> tail /var/log/maillog

…(略)…

Oct 27 15:54:36 mailhost spamd[392]: spamd: result: Y 27 - ALL_TRUSTED,ANY_PILL_PRICE,BANG_GUAR,DRUGS_ERECTILE,DRUG_ED_ONLINE,MANY_PILL_PRICE,MISSING_SUBJECT,RAZOR2_CF_RANGE_51_100,RAZOR2_CF_RANGE_E8_51_100,RAZOR2_CHECK,URIBL_AB_SURBL,URIBL_BLACK,URIBL_DBL_SPAM,URIBL_JP_SURBL,URIBL_PH_SURBL,URIBL_SBL,URIBL_WS_SURBL scantime=8.0,size=901,user=hogetan,uid=1000,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=58276,mid=<[email protected]>,autolearn=unavailable
Oct 27 15:54:36 cvm1 courierlocal: id=0002E02C.000000004EA8FDC4.00000EB3,from=<a href="mailto:[email protected]">[email protected]</a>,addr=<a href="mailto:[email protected]">[email protected]</a>: maildrop: /var/mail/example.com/hogetan//Maildir//.spam/: Permission denied

…(略)…

4. SpamAssassinの別個設定をしておく

SpamAssassinはデフォルトでは日本語のような言語判定がうまくいかなかったりする。なのでその辺をデフォルトで付いてきてる機能で判定してやる。

下記の設定項目を、デフォルトではコメントアウトしてあるのでコメントを外して有効化してやる。

設定ファイルはホームディレクトリ(maildirhomeではなく、unixホームディレクトリ)に.spamassassinがある。


shell> more ~/.spamassassin/user_prefs

…(略)…

# Speakers of Asian languages, like Chinese, Japanese and Korean, will almost
# definitely want to uncomment the following lines.  They will switch off some
# rules that detect 8-bit characters, which commonly trigger on mails using CJK
# character sets, or that assume a western-style charset is in use.
#
score HTML_COMMENT_8BITS        0
score UPPERCASE_25_50           0
score UPPERCASE_50_75           0
score UPPERCASE_75_100  0
score OBSCURED_EMAIL          0

# Speakers of any language that uses non-English, accented characters may wish
# to uncomment the following lines.   They turn off rules that fire on
# misformatted messages generated by common mail apps in contravention of the
# email RFCs.

score SUBJ_ILLEGAL_CHARS      0

5. 最後にテスト

後はテストをしてオシマイ。LAN内のホストからMXレコードを対象のメールサーバホストに書き換えて、拾ってきたスパムメールを送ってみる。

.spamディレクトリのnewにメールが入っていれば成功、のはず。

コメントを残す