tomo.gif (1144 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)To previous pageTo home pageMailing to me

Spamassassinでスパムメールを検出する

Modified: 29 March 2008
Created: 10 February 2008

CentOS5 の環境で、SpamassassionとPostfixを連携させて、スパムメールを判定し、スコアをつける実験のページです。
日本語の文章の解析を行うソフトを組み込むため、とっても面倒でしたが、なんとか成功しました。


必要なソフトのインストール
SpamAssassinのインストール と設定
Postfixと連携させる
連携を含めた動作テスト


必要なソフトのインストール 

リポジトリのインストール

# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

通常は使わないので、"/etc/yum.repos.d/rpmforge.repo" を開いてdisableにします。

# Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag
# URL: http://rpmforge.net/
[rpmforge]
name = Red Hat Enterprise $releasever - RPMforge.net - dag
#baseurl = http://apt.sw.be/redhat/el5/en/$basearch/dag
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1


GPGキーのインストール

# wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt


ツールのインストール

# yum install gcc gcc-c++
# yum install --enablerepo=rpmforge perl-Mail-SPF-Query
# yum install --enablerepo=rpmforge perl-Mail-DomainKeys
# yum install --enablerepo=rpmforge perl-IP-Country
# yum install --enablerepo=rpmforge perl-Net-Ident
# yum install --enablerepo=rpmforge perl-Mail-DKIM
# yum install --enablerepo=rpmforge perl-Encode-Detect
# yum install --enablerepo=rpmforge perl-Razor-Agent
# yum install --enablerepo=rpmforge razor-agents
# yum install --enablerepo=rpmforge spamass-milter


日本語パッケージ(形態素解析エンジンと日本語辞書)のインストール

http://sourceforge.net/search/?words=mecab&sort=score&sortdir=desc&offset=0&type_of_search=soft&type_of_search=soft

2008年2月10日に、"mecab-0.97.tar.gz"(形態素解析エンジン) と、"mecab-ipadic-2.7.0-20070801.tar.gz"(日本語辞書) がダウンロードできました。

以下の手順で、形態素解析エンジンをインストールします。

# tar zxvf mecab-0.97.tar.gz
# cd mecab-0.97
# ./configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=i386-redhat-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --with-charset=utf8
# make
# make install
#

以下の手順で、日本語辞書をインストールします。

# tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
# cd mecab-ipadic-2.7.0-20070801 

"char.def"を以下のように変更します。

#
# Japanese charcter category map
#
           :

# ASCII
#0x0021..0x002F SYMBOL
#0x0030..0x0039 NUMERIC
#0x003A..0x0040 SYMBOL
#0x0041..0x005A ALPHA
#0x005B..0x0060 SYMBOL
#0x0061..0x007A ALPHA
#0x007B..0x007E SYMBOL
0x0021..0x007E ALPHA

           :
 

Makeしてインストールします。

# ./configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=i386-redhat-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --with-mecab-config=/usr/bin/mecab-config --with-charset=utf8
# make
# make install
#

Perlモジュールをインストールします。

# cpan install Text::MeCab

SpamAssassinのインストール と設定 

SpamAssassinのインストール

http://spamassassin.apache.org/

2008年2月10日に、"Mail-SpamAssassin-3.2.4.tar.gz"がダウンロードできました。

http://www.emaillab.org/spamassassin/

2008年2月10日に、日本語パッチの"spamassassin-3.2.4-ja-test1.patch"がダウンロードできました。

同じバージョン番号のものをダウンロードします。

解凍し、パッチを充てて、Makeしてインストールします。

# tar zxvf Mail-SpamAssassin-3.2.4.tar.gz
# cd Mail-SpamAssassin-3.2.4
# patch -p1 < ../spamassassin-3.2.4-ja-test1.patch
# perl Makefile.PL
# make
# make install
#


SpamAssassinの設定

"/etc/mail/spamassassin/local.cf" を開いて、追記します。

# These values can be overridden by editing ~/.spamassassin/user_prefs.cf
# (see spamassassin(1) for details)

# These should be safe assumptions and allow for simple visual sifting
# without risking lost emails.

required_hits 5
report_safe 0
rewrite_header Subject [SPAM]

normalize_charset 1
report_safe 0
include site_score.cf

"/etc/mail/spamassassin/tokennizer.pre"を作成します。

# Tokennizer::MeCab
#
loadplugin Mail::SpamAssassin::Plugin::Tokenizer::MeCab

"/etc/mail/spamassassin/site_score.cf"を作成します。

score SUBJECT_EXCESS_BASE64 0
score WEIRD_QUOTING 0
score FROM_EXCESS_BASE64 0
score GAPPY_SUBJECT 0
score SUBJECT_ENCODED_TWICE 0
score SUBJ_ILLEGAL_CHARS 0
score HTML_COMMENT_8BITS 0
score OBFUSCATING_COMMENT 0
score UPPERCASE_25_50 0
score UPPERCASE_50_75 0
score OBSCURED_EMAIL 0

以下を2度実行し、ワーニングがなくなるとOKです。

# spamassassin --lint

Postfixと連携させる 

デーモンの変更

"/etc/init.d/spamass-milter"を変更(追記)します。

                 :
start() {
        echo -n $"Starting $desc ($prog): "
        daemon $prog -p $SOCKET -f $EXTRA_FLAGS
        RETVAL=$?
        [ ! -s $SOCKET ] || sleep 10
        chown postfix $SOCKET

        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
        return $RETVAL
}
                 :

アクセス権を設定します。

# chmod 757 /var/run


ユーザ("spamd")を作成する

# useradd -d /var/spamd -s /sbin/nologin spamd

"/etc/sysconfig/spamassassin"を変更します。

# Options to spamd
SPAMDOPTIONS="-d -c -m5 -H -u spamd"


起動してみます

# service spamassassin start
spamd を起動中:                                              [ OK ]
# service spamass-milter start
Spamassassin sendmail milter (spamass-milter) を起動中: [ OK ]
#

特にエラーも出ないので、成功したのでしょう。


Postfix側の変更

"/etc/postfix/main.cf"に、以下を追加します。

smtpd_milters = unix:/var/run/spamass.sock
non_smtpd_milters = unix:/var/run/spamass.sock


Postfixの再起動

# service postfix restart

連携を含めた動作テスト 

スパム臭いメールを送ってみます。

# echo 'Hello!' | mail tomo

ログは、以下のようになりました。

Feb 11 00:18:06 mailserver spamd[17567]: auto-whitelist: open of auto-whitelist file failed: locker:
safe_lock: cannot create tmp lockfile /root/.spamassassin/auto-whitelist.lock.mailserver.tomo.ac.17567
for /root/.spamassassin/auto-whitelist.lock: 許可がありません


Feb 11 00:18:06 mailserver spamd[17567]: spamd: clean message (1.3/5.0) for root:500 in 1.0 seconds, 390 bytes.

Feb 11 00:18:06 mailserver spamd[17567]: spamd: result: . 1 - MISSING_SUBJECT,UNPARSEABLE_RELAY scantime=1.0,size=390,user=root,uid=500,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=1928,
mid=<20080210151805.2AE9B282C0@mailserver.tomo.ac>,autolearn=no

Feb 11 00:18:06 mailserver spamd[17546]: prefork: child states: II

Feb 11 00:18:06 mailserver postfix/qmgr[17799]: 2AE9B282C0: from=<root@tomo.ac>, size=331, nrcpt=1 (queue active)

Feb 11 00:18:06 mailserver postfix/local[17808]: 2AE9B282C0: to=<tomo@tomo.ac>, orig_to=<tomo>, relay=local, delay=1.2, delays=1.2/0.03/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)

Feb 11 00:18:06 mailserver postfix/qmgr[17799]: 2AE9B282C0: removed=2.0.0, status=sent (250 Ok: queued as 55A5866F21D)

Feb 11 00:06:09 mailserver postfix/qmgr[17474]: A8E90282BF: removed

届いたメールの中身を見てみる。

From root@tomo.ac Mon Feb 11 00:18:06 2008
Return-Path: <root@tomo.ac>
X-Original-To: tomo
Delivered-To: tomo@tomo.ac
Received: by mailserver.tomo.ac (Postfix, from userid 0)
id 2AE9B282C0; Mon, 11 Feb 2008 00:18:05 +0900 (JST)
To: tomo@tomo.ac
Message-Id: <20080210151805.2AE9B282C0@mailserver.tomo.ac>
Date: Mon, 11 Feb 2008 00:18:05 +0900 (JST)
From: root@tomo.ac (root)
X-Spam-Status: No, score=1.3 required=5.0 tests=MISSING_SUBJECT,
UNPARSEABLE_RELAY autolearn=no version=3.2.4
X-Spam-Level: *
X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on
mailserver.tomo.ac


Hello!
 

 スパムの判定がされ、ヘッダーに結果が付加されているので、たぶん、成功です。
ふうー、ここまで長かったですわん。


その後、以下のようにログにエラーがあることがわかりました。
ユーザ、spamd が、"
/root/.spamassassin"に書き込みができないというエラーです。そりゃあ、/rootにはかけないや!

無理やり、アクセスを許可するか?、でもセキュリティ上よろしくありません。
 

Feb 11 13:57:12 baimail5 spamd[2017]: spamd: connection from localhost [127.0.0.1] at port 2968
Feb 11 13:57:12 baimail5 spamd[2017]: spamd: creating default_prefs: /root/.spamassassin/user_prefs
Feb 11 13:57:12 baimail5 spamd[2017]: config: cannot write to /root/.spamassassin/user_prefs: Permission
denied

Feb 11 13:57:12 baimail5 spamd[2017]: spamd: failed to create readable default_prefs: /root/.spamassassin
/user_prefs
Feb 11 13:57:12 baimail5 spamd[2017]: spamd: processing message <20080211045712.137C4282C9@baimail5.co-re
cipe.com> for root:500
Feb 11 13:57:13 baimail5 spamd[2017]: auto-whitelist: open of auto-whitelist file failed: locker: safe_lo
ck: cannot create tmp lockfile /root/.spamassassin/auto-whitelist.lock.baimail5.co-recipe.com.2017 for /root/.spamassassin/auto-whitelist.lock: Permission denied
Feb 11 13:57:13 baimail5 spamd[2017]: spamd: clean message (2.9/5.0) for root:500 in 1.1 seconds, 426 byt
es.
Feb 11 13:57:13 baimail5 spamd[2017]: spamd: result: . 2 - TVD_SPACE_RATIO,UNPARSEABLE_RELAY scantime=1.1
,size=426,user=root,uid=500,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=2968,mid=<2008021104
5712.137C4282C9@baimail5.co-recipe.com>,autolearn=no
Feb 11 13:57:13 baimail5 spamd[1854]: prefork: child states: II
Feb 11 13:57:13 baimail5 postfix/qmgr[1925]: 137C4282C9: from=<root@baimail5.co-recipe.com>, size=351, nr
cpt=1 (queue active)
Feb 11 13:57:13 baimail5 postfix/local[2165]: 137C4282C9: to=<tomo@baimail5.co-recipe.com>, orig_to=<tomo
@good-stream.com>, relay=local, delay=1.2, delays=1.2/0.02/0/0, dsn=2.0.0, status=sent (delivered to mail
box)
Feb 11 13:57:13 baimail5 postfix/qmgr[1925]: 137C4282C9: removed

 


To previous pageTo home pageMailing to meJump to Top of pageline.gif (927 ツバツイツト)line.gif (927 ツバツイツト)tomo.gif (1144 ツバツイツト)