ライン

ポイント:スパムをフォルダで振り分けが可能に

ライン

 はじめに

mail/spamass-milter

 今回もMilterを使いSPAM対策を実施してしまう spamass milter (sendmail milter for passing emails through SpamAssassin)を導入することにしました。
今回もsendmailでの設定です。Postfixでも導入して動作を確認していますが、またページにするのはこっちでした。

 今回は、FreeBSD 9.1での例です。

 導入と設定

導入

 早速、導入を開始します。portsから導入を行います。

# cd /usr/ports/mail/spamass-milter
# make install clean

 オプションの指定が5つになっていました。

上記の2つがなんとも興味をそそるではありませんか。
とりあえずは、そのまま導入してしまいますが、後で使い方を確認しようと思います。

 次に、本体のインストールの確認です。

RELAY_DOUNTRYにはチェックを入れて進めました。
最終的には、

===>  Cleaning for p5-Mail-SpamAssassin-3.3.2_8
===>  Cleaning for sendmail-8.14.6
===>  Cleaning for p5-NetAddr-IP-4.066
===>  Cleaning for p5-Net-DNS-0.72
===>  Cleaning for p5-HTML-Parser-3.69
===>  Cleaning for p5-libwww-6.05
===>  Cleaning for p5-Encode-Detect-1.01
===>  Cleaning for p5-Mail-Tools-2.12
===>  Cleaning for p5-IO-Socket-INET6-2.69
===>  Cleaning for p5-IO-Socket-SSL-1.84
===>  Cleaning for gnupg-1.4.13
===>  Cleaning for razor-agents-2.84
===>  Cleaning for p5-Mail-DKIM-0.40
===>  Cleaning for p5-Crypt-OpenSSL-RSA-0.28
===>  Cleaning for p5-IP-Country-2.27
===>  Cleaning for p5-Digest-HMAC-1.03
===>  Cleaning for p5-Net-LibIDN-0.12_1
===>  Cleaning for p5-HTML-Tagset-3.20
===>  Cleaning for p5-Authen-NTLM-1.09
===>  Cleaning for p5-Encode-Locale-1.03
===>  Cleaning for p5-File-Listing-6.04
===>  Cleaning for p5-HTTP-Cookies-6.01
===>  Cleaning for p5-HTTP-Daemon-6.01
===>  Cleaning for p5-HTTP-Date-6.02
===>  Cleaning for p5-HTTP-Message-6.06_1
===>  Cleaning for p5-HTTP-Negotiate-6.01
===>  Cleaning for p5-LWP-MediaTypes-6.02
===>  Cleaning for p5-Net-HTTP-6.06
===>  Cleaning for p5-URI-1.60
===>  Cleaning for p5-WWW-RobotRules-6.02
===>  Cleaning for p5-ExtUtils-CBuilder-0.2802.05,1
===>  Cleaning for p5-Module-Build-0.4004
===>  Cleaning for p5-TimeDate-2.30_1,1
===>  Cleaning for p5-Socket6-0.23
===>  Cleaning for p5-Net-SSLeay-1.54
===>  Cleaning for p5-IO-Socket-IP-0.19
===>  Cleaning for p5-Socket-2.009
===>  Cleaning for curl-7.24.0_2
===>  Cleaning for p5-Digest-SHA1-2.13
===>  Cleaning for p5-Crypt-OpenSSL-Bignum-0.04
===>  Cleaning for p5-Crypt-OpenSSL-Random-0.04
===>  Cleaning for p5-Geography-Countries-2009041301
===>  Cleaning for libidn-1.26
===>  Cleaning for p5-IO-HTML-1.00
===>  Cleaning for ca_root_nss-3.14.3
===>  Cleaning for pkgconf-0.9.1_2
===>  Cleaning for spamass-milter-0.3.2

という関連パッケージが導入されました。

 /usr/local/share/doc/spamass-milter/activation.txt というドキュメントも導入されています。

 まずは、SpamAssassinを起動する設定をします。
/etc/rc.conf に

spamd_enable="YES"
spamd_flags="-s /var/log/spamd.log -u spamd -H /var/spool/spam"
spamass_milter_enable="YES"
spamass_milter_flags="-i 127.0.0.1/8,XXX.YYY.ZZZ.AAA/28 -f -p /var/run/spamass-milter.sock"

のように記述。XXX.YYY.ZZZ.AAA は、利用しているネットワークアドレス。
-i 以下から送信されるネットワークからのチェックはされなくなるので、来たメールにはチェックは必要だけど、送るメールにはチェック不要という場合に指定すると良いというものです。

 /usr/local/etc/mail/spamassassin にlocal.cfを用意することになりますが、これは毎度でいただきものを利用します。

# fetch -o local.cf http://www.flcl.org/~yoh/user_prefs

自分用に変更を入れます。また、サンプルについていたものは、以下のようなものでした。

# grep -v "^#" local.cf.sample  | grep -v '^$'
ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
endif # Mail::SpamAssassin::Plugin::Shortcircuit

これを最後に加えることにしました。
 起動は、

# /usr/local/etc/rc.d/sa-spamd start

これで起動できます。ログは、/var/log/spamd.logに出力されますので、うまく上がらないときには確認してみます。

error: config: no rules were found! Do you need to run 'sa-update'?

毎度で、上記のようなエラーが出ているかも知れません。
これは、既に説明不要かも知れませんが、sa-updateが未実行の場合に出るものです。

 今回も、新規導入で入れていますので作業をします。

# sa-update

そのままプロンプトが戻ってくると思います。
これで、再度起動コマンドを入れるとエラーにならないで開始できたと思います。

# /usr/local/etc/rc.d/spamass-milter start

 これで導入は完了です。

 メールシステム連動

sendmailの設定ファイルの作成 (/etc/mail)

 さて、毎度の /etc/mail 以下の設定を加えることにします。
sendmail側の設定です。ホスト用に準備しているmcファイルに以下のような追加を入れます。

INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock,F=,T=C:15m;S:4m;R:4m;E:10m')dnl
define(`confMILTER_MACROS_CONNECT',`t, b, j, _, {daemon_name}, {if_name}, {if_addr}')dnl
define(`confMILTER_MACROS_HELO',`s, {tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cert_issuer}')dnl
define(`confMILTER_MACROS_ENVRCPT', `Z, v, r, b, {rcpt_mailer}, {rcpt_host}, {rcpt_addr}')dnl

更新しましょう。

# make cf install all
# make restart

これで反映されました。

動作確認

 SpamAssassinで付けられたmaillogとメールのヘッダーを確認しておきます。

- XXX sm-mta[]: r2V7cG29080417: Milter add: header: X-Spam-Status: No, score=-95.1 required=13.0 
tests=CONTENT_TYPE_PRESENT,\n\tFAKEDWORD_ONE,FAKEDWORD_VERTICALLINE,FAKEDWORD_ZERO,ISO2022JP_BODY,
\n\tONLY1HOPDIRECT,RDNS_NONE,TO_MALFORMED,USER_IN_WHITELIST,X_MAILER_PRESENT\n\tautolearn=no version=3.3.2
- XXX sm-mta[]: r2V7cG29080417: Milter add: header: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on XXX
- XXX sm-mta[]: r2V7cG29080417: to=<foo>, ctladdr=<bar@example.co.jp> (-/-), delay=00:00:10, xdelay=00:00:01,
mailer=local, pri=531323, relay=local, dsn=2.0.0, stat=Sent

 ローカル内のメールなのにSPAM判定されてもつらいですが、ここではチェックの対象にしてあります。

X-Spam-Status: No, score=-95.1 required=13.0 tests=CONTENT_TYPE_PRESENT,
        FAKEDWORD_ONE,FAKEDWORD_VERTICALLINE,FAKEDWORD_ZERO,ISO2022JP_BODY,
        ONLY1HOPDIRECT,RDNS_NONE,TO_MALFORMED,USER_IN_WHITELIST,X_MAILER_PRESENT
        autolearn=no version=3.3.2
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on XXX

 この配信が完了するまでに9秒かかっていました。(添付ファイルもありましたので、ウィルススキャンもしていたはずです)
これは実用の範囲で大丈夫かなと思っています。

 新機能の確認

動作確認

 WITH_ADDAUTH_PATCHとWITH_REJECTTEXT_PATCH。何ができるのでしょうか。
まず、前者は「ADDAUTH_PATCH_DESC= Bypass checks for SMTP AUTH connections」というもので、

The mail/spamass-milter port won't build if the sendmail-sasl port has been built.  The patch below fixes this.

 というもの。使うのかな?これはポートでsendmailを入れた場合に有効っぽいかな。
※ドキュメント類は、/usr/local/share/doc/spamass-milterにある
もう片側は、r オプションを指定するケース。

spamass-milter -p socket [-b|-B spamaddress] [-d debugflags] [-D host]
                    [-e defaultdomain] [-f] [-i networks] [-m] [-M]
                    [-P pidfile] [-r nn] [-u defaultuser] [-x]
                    [-- spamc flags ...]

     -m      Disables modification of the `Subject:' and `Content-Type:' head-
             ers and message body.  This is useful when SpamAssassin is con-
             figured with `defang_mime 0' and `report_header 1', or when SA is
             simply used to add headers for postprocessing later.  Updating
             the body through the milter interface can be slow for large mes-
             sages.

     -r nn   Reject scanned email if it greater than or equal to nn.  If -1,
             reject scanned email if SpamAssassin tags it as spam (useful if
             you are also using the -u flag, and users have changed their
             required_hits value).

             For example, if you usually use procmail to redirect tagged email
             into a separate folder just in case of false positives, you can
             use -r 15 and reject flagrant spam outright while still receiving
             low-scoring messages.

 -r 15 のように指定すれば、エラーで捨ててくれるのだね。スコアだけでいいのなら-mというのもあるんだ。
このメッセージを自分のメッセージに変えられるというものであっているだろうか。

 パッチを眺めていると、「-R RejectText: using this Reject Text.」というラージRなオプションのようだ。

-               smfi_setreply(ctx, "550", "5.7.1", "Blocked by SpamAssassin");
+               smfi_setreply(ctx, "550", "5.7.1", rejecttext);

通常のrオプションだと上記のメッセージだけど、Rオプションでメッセージを変えることもできます、ということのようだ。
確かに、わざわざ何を使ってます…をばらす必要はないよね。自己顕示欲っぽいな。

 個人的には、不要でいいのでこのまま。
最後に試しておこうと思う。

spamc < sample-spam.txt
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on XXX
X-Spam-Flag: YES
X-Spam-Level: **************************************************
X-Spam-Status: Yes, score=999.9 required=13.0 tests=CONTENT_TYPE_PRESENT,GTUBE,
        NO_RECEIVED,NO_RELAYS autolearn=no version=3.3.2
X-Spam-Report:
        * -0.1 CONTENT_TYPE_PRESENT exists:Content-Type
        * -0.0 NO_RELAYS Informational: message was not relayed via SMTP
        * 1000 GTUBE BODY: Generic Test for Unsolicited Bulk Email
        * -0.0 NO_RECEIVED Informational: message has no Received headers

1000ポイント付くテスト条件ってあるんだね。知らなかった。
ふーむ、rオプションが効いて来ない感じだ。そこは課題にして今回は終了。

【改訂履歴】作成:2013/03/31
【参考リンク】
SpamAssassin Milter Plugin … オフィシャルページ

Copyright © 1996,1997-2006,2007- by F.Kimura,