投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償)
logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)
The Document Foundation Wiki

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2011年6月30日木曜日

【Linux CentOS 5.6】迷惑メール分類プロキシサーバPOPFileと、MeCabの連携システム構築作業メモ




スパムメール分類プロキシサーバーPOPFile 1.1.1と、連携プログラムMeCab 0.98を、CentOS5.6(64bit)にインストールしたときのメモ。

(注) 以下、POPメールサーバとメールクライアントとの間に入るPOPプロキシとしてPOPFileを使う方法を想定しています。

<目 次>
・ POPFileとは
・ MeCabとは
・ インストールするものについて
・ インストール手順
・ (手順1) 必要な準備
・ (手順2) 一般的なperlモジュール<分類1>のインストール
・ (手順3) 分かち書きプログラムMeCab本体と、その辞書mecab-ipadicのインストール
・ (手順4) perl-MeCabバインディングモジュールのインストール
・ (手順5) POPFile本体のインストール
・ (手順6) POPFile本体の基本的な設定
・ POPFileを起動する
・ メールクライアントの設定
・ POPFileを終了する
・ その他の設定
・ ◎POPFileのシステム起動時の自動起動の方法について
・ ◎POPFileのキープアライブ(障害の自動検出と自動回復)の方法について (POPFileのハングアップ対策)
・ ◎動作させているpopfileの設定内容や受信メールログを、新規マシンのpopfileへ移行する方法



□POPFileとは□
POPFileは、メールの本文を解析し含まれる単語に基づき、学習結果に応じて分類するプロキシ型のソフトウェアである。
POPメールサーバーへのプロキシとして動作させられるので一般的なメールクライアントソフトと組み合わせることができる。

POPFileを経由するメールは学習結果に基づいて適切に分類され、通常はタイトルにそのバケツ名(=分類名)が付加される。
処理済みメールを受信したメールクライアントではタイトルに対するフィルタ機能を使って、この付加された分類名に基づき最終的な処理方法を決定できる
どのような処理ができるかはメールクライアントによって異なる。
たとえば、フォルダに隔離したり、転送したり、削除したり、できるだろう。


POPメールサーバ(元のメール) → POPFile(分類し、バケツ名をタイトルに付加) → メールクライアント(バケツ名に応じた最終的な処理)

POPFileのGUIを使って、バケツ(=分類名)の作成やこれに入るべきメールの傾向を学習させることで分類能力を高められる。
具体的にユーザーが行うことは次の2点である。

・内容に基づくメール分類用のバケツを2つ以上作成する。(当然、スパムメール用としてもバケツは作れる)
・メールがPOPFileを通過後に、各バケツに入るべきメールを指定しその本文に含まれる単語の傾向を学習させる。

十分に学習できれば誤判定や保留もなく分類されるようになる。それまではユーザーが学習させて育てる。
ところで、POPFileはメールの内容を学習することによってスパムメールも分類できるようになるものであり、スパムメールだけを分類するものではない。

分類後にタイトルにはそのバケツ名を付加せず元のままにすることもできる。
受信したメールの本文以外の情報(アドレス、タイトルなど)の一致不一致で分類することも可能。(マグネット機能)
1台のPOPFileをイントラネット上で動作させておくことで、複数のメールクライアントコンピューターから利用できた。(要設定 GUIの設定タブ→POP3 同時接続の許可:はい)



□MeCabとは□
文を解析し単語に分け品詞を判定するソフトウェア。オープンソースの形態素解析エンジンである。
言語、辞書、コーパスに依存しない汎用的に利用できる設計が基本方針になっている。

POPFileでは日本語で書かれたメールを扱うとき、このMeCabが持つような分かち書き機能を利用することで分類精度を高められる。





■インストールするものについて■

 POPFileを動作させるには、本体の他にいくつかのperlモジュールが必要である。
大きく分けると次の二つである。

<分類1>perl関係の一般的なモジュール

現在のところ、以下のモジュールが必要になるかもしれません」 に挙げられているperlモジュールリストをベースとした。
ここから、Linux以外の環境で使われるものを除外し、これ以外に必要なものを加えた。
これらをLinuxシステムにインストールする。
・YAML
・SOAP::Lite
・Net::SSLeay
・IO::Socket::SSL
・IO::Socket::Socks
・Encode
・HTML::Template
・Date::Parse
・MIME::QuotedPrint
・MIME::Base64
・HTML::Tagset
・Digest::MD5
・Digest::base
・DBI
・DBD::SQLite (ただし、sqlite3)

<分類2>日本語分かち書きプログラム関係

今回は、MeCabを使う。
必要なのは次の三つである。
・mecab-0.98.tar.gz (MeCab本体)
・mecab-ipadic-2.7.0-20070801.tar.gz (本体が使用するIPA辞書)
・mecab-perl-0.98.tar.gz (MeCab-perlバインディングというMeCabを扱うperlモジュール)



■インストール手順■

これからをPOPFileをインストールするCentOS5のシステムは64bit版のもので、
標準のインストーラーを使って構成されたもの。gnomeなどのGUI環境はインストールしていない。

下はこのシステムのunameの結果。カーネルは、現在yumで導入できる最新版が入っている。
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-238.9.1.el5 #1 SMP Tue Apr 12 18:10:13 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

インストール手順は、大きく分けて6つある。



(手順1) 必要な準備

1◇ アップデート、コンパイラ、リポジトリ、CPANのための通信プログラムの導入



先ず、システム全体のアップデートを行う。
次にCコンパイラのインストール作業を行う。
さらにepelリポジトリを導入する。後の手順で必要になるパッケージがここに存在しているためである。
最後のncftpのインストールも、epelリポジトリから行われる。ncftpは、cpanのセットアップ時に必要になる。
# yum update
# yum install gcc gcc-c++
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# yum install ncftp

2◇ CPANへのアクセスの準備
#perl -MCPAN -e shell
これは、CPAN(perlのモジュールを公開しているネットワーク)へのアクセスするときに使うコマンド。
初回のみセットアップ作業がある。質問に答えていく形式になっている。詳細はこちら
質問のほとんどは、エンターキーを押すだけ。最後の地域に関する質問には、順に次を選択した。
(2) Asia
(7) Japan
(5) ftp://ftp.riken.jp/lang/CPAN/

CPANへのアクセス準備が完了すれば、次のようにコマンド待ちになる。
exitを実行して、終了する。
cpan>
cpan> exit


(手順2) 一般的なperlモジュール<分類1>のインストール

1◇ CPANからモジュールをインストールする

再び、次のコマンドを実行する。

#perl -MCPAN -e shell
そして、cpan> というプロンプトに、下記のように「installコマンドと引数」を一つずつ入力しエンターキーを押す。
処理に時間がかかるものがある。途中で質問されることがあるがエンターキーを押すだけで問題なかった。
無事にインストールが成功すれば、いずれも最後に、make install -- OK が表示される。
cpan> install YAML
/usr/bin/make install -- OK (比較的時間がかかった)

cpan> install IO::Socket::Socks
/usr/bin/make install -- OK (比較的時間がかかった)

cpan> install Encode
/usr/bin/make install -- OK (比較的時間がかかった)

cpan> install HTML::Template
/usr/bin/make install -- OK

cpan> install Date::Parse
/usr/bin/make install -- OK

cpan> install MIME::QuotedPrint
/usr/bin/make install -- OK

cpan> install MIME::Base64
(すでに導入されていた。MIME::Base64 is up to date.)

cpan> install HTML::Tagset
/usr/bin/make install -- OK

cpan> install Digest::MD5
/usr/bin/make install -- OK

cpan> install Digest::base
/usr/bin/make install -- OK

cpan> install DBI
/usr/bin/make install -- OK (比較的時間がかかった)

cpan> install DBD::SQLite
/usr/bin/make install -- OK (導入されたのは、ver1.33 sqlite3だった。)

cpan> exit
 (CPANから出る)

2◇ CPANで簡単には導入できないモジュールをyumでインストールする

次の3つのモジュールは、エラーが出てCPANから簡単には導入できなかった。

・SOAP::Lite
・Net::SSLeay
・IO::Socket::SSL

そこで、これらについてはyumを使ってインストールした。このとき依存関係でいくつかのperlモジュールもインストールされた。
(ところでCPANでこれらのインストールに失敗したのは、依存関係にあるモジュールがなかったからなのかもしれない。)

一つ目のperl-SOAP-Liteは、epelリポジトリ(作業1で導入済み)に入っていた。
これは依存関係が多く、このうちいくつかのものはbaseやextrasリポジトリにも入っていた。
# yum install perl-SOAP-Lite

Dependencies Resolved



================================================================================

Package Arch Version Repository Size

================================================================================

Installing:

perl-SOAP-Lite noarch 0.712-5.el5 epel 348 k

Installing for dependencies:

perl-Class-Inspector noarch 1.17-1.el5 epel 25 k

perl-Compress-Zlib x86_64 1.42-1.fc6 base 52 k

perl-Convert-BinHex noarch 1.119-5.el5 epel 47 k

perl-HTML-Parser x86_64 3.55-1.fc6 base 92 k

perl-HTML-Tagset noarch 3.10-2.1.1 base 15 k

perl-IO-stringy noarch 2.110-5.el5 epel 70 k

perl-MIME-Lite noarch 3.01-5.el5 epel 73 k
perl-MIME-tools noarch 5.420-3.el5 epel 285 k
perl-MailTools noarch 1.77-1.el5.centos extras 91 k
perl-TimeDate noarch 1:1.16-5.el5 base 32 k
perl-URI noarch 1.35-3 base 116 k
perl-XML-Parser x86_64 2.34-6.1.2.2.1 base 210 k
perl-libwww-perl noarch 5.805-1.1.1 base 376 k

Transaction Summary
================================================================================
Install 14 Package(s)
Upgrade 0 Package(s)

Total download size: 1.8 M

二つ目、

# yum install perl-Net-SSLeay
三つ目、

# yum install perl-IO-Socket-SSL



(手順3) 分かち書きプログラムMeCab本体と、その辞書mecab-ipadicのインストール

1◇MeCab本体のインストール作業を行う
[root@localhost mecab]# wget http://downloads.sourceforge.net/project/mecab/mecab/0.98/mecab-0.98.tar.gz
[root@localhost mecab]# tar zxfv mecab-0.98.tar.gz
[root@localhost mecab]# cd mecab-0.98
[root@localhost mecab-0.98]# ./configure
[root@localhost mecab-0.98]# make
[root@localhost mecab-0.98]# make install
[root@localhost mecab-0.98]# cd ..
[root@localhost mecab]#

2◇MeCab用のIPA辞書
[root@localhost mecab]# wget http://downloads.sourceforge.net/project/mecab/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz
[root@localhost mecab]# tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
[root@localhost mecab]# cd mecab-ipadic-2.7.0-20070801
[root@localhost mecab-ipadic-2.7.0-20070801]# ./configure --with-charset=utf8
[root@localhost mecab-ipadic-2.7.0-20070801]# make
[root@localhost mecab-ipadic-2.7.0-20070801]# make install
[root@localhost mecab-ipadic-2.7.0-20070801]# cd ..
[root@localhost mecab]#

○MeCabの動作確認を行う。
mecabコマンドを実行すると、入力待ちになるので、適当な日本語文章を入れてエンターキーを押す。
すると文法が解析され品詞に分解される。すごい!
これがスパムメールに対抗する強力な武器の一つになる。CTRL+Cで戻る。
# mecab
テストの文章を書いています

テスト 名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
の 助詞,連体化,*,*,*,*,の,ノ,ノ
文章 名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
書い 動詞,自立,*,*,五段・カ行イ音便,連用タ接続,書く,カイ,カイ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
い 動詞,非自立,*,*,一段,連用形,いる,イ,イ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
EOS

(手順4) perl-MeCabバインディングモジュールのインストール

手順の3までがきちんと完了していれば問題はない。
[root@localhost mecab]# wget http://downloads.sourceforge.net/project/mecab/mecab-perl/0.98/mecab-perl-0.98.tar.gz
[root@localhost mecab]# tar zxfv mecab-perl-0.98.tar.gz
[root@localhost mecab]# cd mecab-perl-0.98
[root@localhost mecab-perl-0.98]# perl Makefile.PL
[root@localhost mecab-perl-0.98]# make
[root@localhost mecab-perl-0.98]# make install


(手順5) POPFile本体のインストール

 POPFile本体は、コンパイルなどする必要はない。
適当なディレクトリで解凍するだけである。
[root@localhost mecab-perl-0.98]# mkdir /usr/sbin/popfile1.1.1
[root@localhost mecab-perl-0.98]# cd /usr/sbin/popfile1.1.1
[root@localhost popfile1.1.1]# wget http://getpopfile.org/downloads/popfile-1.1.1.zip
[root@localhost popfile1.1.1]# unzip popfile-1.1.1.zip


(手順6) popfile本体の基本的な設定

基本的な設定は次の三つである。
POPFileの操作はwebインターフェイスで行うので、ネットワーク越しにアクセス出来るように設定する。
・日本語を扱う設定を行う。
・分かち書きプログラムの指定

1◇先ず、次のようにコマンドを実行し、POPFileを動作させる。

「runningメッセージ」を確認すれば、CTRL+Cで終了する。
これによって、ベースのコンフィグファイルpopfile.cfgなどが作成される。
[root@localhost popfile1.1.1]# perl ./popfile.pl

POPFile Engine loading

Loading...
{core: mq logger config history}
{classifier: wordmangle bayes}
{interface: xmlrpc html}
{proxy: pop3 nntp smtp}
{services: imap}

POPFile Engine v1.1.1 starting

Initializing...
{core: config history logger mq}
{classifier: bayes wordmangle}
{interface: html xmlrpc}
{proxy: nntp pop3 smtp}
{services: imap}

Starting...
{core: config history logger mq}
{classifier: bayes wordmangle}
{interface: html}
{proxy: pop3}
{services:}

POPFile Engine v1.1.1 running


<CTRL+Cを送る>

POPFile Engine v1.1.1 stopping

Stopping...
{classifier: bayes wordmangle}
{core: config history logger mq}
{interface: html}
{proxy: pop3}
{services:}

POPFile Engine v1.1.1 terminated

2◇作成されたpopfile.cfgをエディタで開き、次の項目を探して編集 (項目の詳細
bayes_nihongo_parser MeCab 大文字小文字に注意。さもなければ動作せず文字化けする。
html_language Nihongo ←日本語メールの処理、GUIの日本語化
html_local 0 ←127.0.0.1以外のインターフェイスへのアクセスでもGUIにアクセス許可
html_port 8081 ←GUIアクセスのためのTCPポートの設定



POPFileを起動する■

バックグラウンドで動作させるために、コマンド発行時に&を渡す。
[root@localhost popfile1.1.1]# perl ./popfile.pl &
[1] 3076
[root@localhost popfile1.1.1]#
POPFile Engine loading

Loading...
{core: mq logger config history}
{classifier: wordmangle bayes}
{interface: xmlrpc html}
{proxy: pop3 nntp smtp}
{services: imap}

POPFile Engine v1.1.1 starting

Initializing...
{core: config history logger mq}
{classifier: bayes wordmangle}
{interface: html xmlrpc}
{proxy: nntp pop3 smtp}
{services: imap}

Starting...
{core: config history logger mq}
{classifier: bayes wordmangle}
{interface: html}
{proxy: pop3}
{services:}

POPFile Engine v1.1.1 running
 これで、http://ipアドレス:8081 でPOPFileのGUIにアクセスできる。
(ファイアーウォールの設定には注意)
POPFileのpopプロキシ機能が動作しメールクライアントがアクセスできるようになっている。

 ◎複数のクライアントから接続する場合には、GUIの「設定」タブで、「POP3 同時接続の許可:はい」にしておく。



■メールクライアントの設定■

メールクライアントの設定変更箇所は、次の2点である。

・POPメールサーバーアドレスをPOPFileの動作しているコンピューターのアドレスに変更する。
・POPメールアカウント名を、「 POPメールサーバーアドレス:POPアカウント名 」に変更する。

このようにすることで、メールクライアントはPOPFileプロキシを経由しPOPメールサーバーからメールを受信できる。
特定のクライアントソフトウェアの設定方法や、最終的な処理を決めるフィルタの設定についてはこちらに載っていた。


 しかし、POPFileを初めて利用する場合、POPFileのGUIにてバケツの作成や分類のための単語学習などが必要になる。
すべき作業は次の2点である。

・メールの分類先であるクラス(=バケツ)を作成すること
・実際にメールを通してみて、それぞれのクラスに属するメールを判定するための単語の学習をさせること



単語の学習は、誤判定され間違ったクラスに分類されたメールや、分類先がわからず保留されたメールに対してPOPFile稼動後も継続的にさせる。

このようにして分類先の判定精度を十分に高めなければ、実用的にはならない。



POPFileを終了する■

POPFileのプロセスを停止させるためには、GUIの右上にある停止用リンクをクリックする。(お勧め)

あるいは、psコマンドでプロセス番号を調べて、killコマンドに番号を渡す。
プロセスはperlという名称になっている。(他のものを終了させないように注意)
# ps -A | grep perl
3076 ? 00:00:00 perl
# kill 3076



■その他の設定(オプション)■

◎POPFileのシステム起動時の自動起動の方法について

 /etc/rc.local に記述して、システム起動時に自動的にPOPFileが起動するように設定できる。
次の内容を、追記する。
export POPFILE_ROOT=/usr/sbin/popfile1.1.1/
export POPFILE_USER=/usr/sbin/popfile1.1.1/
perl /usr/sbin/popfile1.1.1/popfile.pl &


◎POPFileのキープアライブ(障害の自動検出と自動回復)の方法について (POPFileのハングアップ対策)

これまで何年もPOPFileを使ってきたが、たまに「落ち」てアクセスできなくなっていることがあった。
その場合は、再度POPFileを起動すれば済むが、これを自動的に回復できるように考えてみた。
POPFileがハングアップ、フリーズしても、自動的に復旧させられるようにする。

(方法)
POPFileが動作しているかどうかチェックし動作していなければ再起動するスクリプト(keep_popfile)を次のように作成。(実行属性を与えることを忘れずに。)
crontabを使って、このスクリプトを5分ごとに動作させる。
#!/bin/sh

TMPFILE=/tmp/keep_popfile.tmp.$$

if wget http://127.0.0.1:8081/security --output-document=$TMPFILE > /dev/null 2>&1

then
echo 'popfile is running.' > /dev/null
rm /tmp/keep_popfile.tmp.*

else
echo 'popfile is freezing'
date >> /usr/sbin/popfile1.1.1/freezing_at-the-time.log
export POPFILE_ROOT=/usr/sbin/popfile1.1.1/
export POPFILE_USER=/usr/sbin/popfile1.1.1/
perl /usr/sbin/popfile1.1.1/popfile.pl &

fi

<処理の流れ>
1、crontabでこのスクリプトが5分ごとに動作し、毎回http://127.0.0.1:8081/securityの読み込みを試みる。
2、もし読み込めなかったらPOPFileがダウンしていると判断する。
3、その場合、/usr/sbin/popfile1.1.1/freezing_at-the-time.logというファイルに、そのときの日時を追記する。
4、そして、POPFileを再起動する。

さらに、crontabで、5分ごとにkeep_popfileスクリプトを実行しPOPFileを監視する設定を行う。
[root@server01 popfile1.1.1]# crontab -e
*/5     *       *       *       *       /usr/sbin/popfile1.1.1/keep_popfile

さて、このようにするとハングアップしていても自動的に復旧してくれるようになり、保守が楽になった。

ちなみに、3のログ記録処理では、たとえば次のように記録されていく。
[root@server01 popfile1.1.1]# cat freezing_at-the-time.log
Sat Aug  6 08:24:01 JST 2011
Wed Aug 10 21:30:01 JST 2011
Wed Aug 17 00:12:03 JST 2011
Thu Sep 22 17:18:01 JST 2011
Thu Oct 20 21:42:01 JST 2011
Mon Oct 24 05:00:03 JST 2011
Sat Oct 29 13:54:02 JST 2011

いうまでもなく、
上記のスクリプトで指定しているURLを間違えると、POPFileが起動していないとみなされるため、
POPFileが何重にも起動されようとし動作がおかしくなるので、注意。






◎動作させているpopfileの設定内容や受信メールログを、新規マシンのpopfileへ移行する方法

(注意)
・ただし移行元と移行先のpopfileは共に、上の手順によって構築された環境で動作しているものとする。
・移行先のpopfileは停止させて作業する。


移行元マシンのpopfileのディレクトリにある次のファイルやディレクトリを、
新規マシンのpopfileのディレクトリに上書きコピーする。
popfile.cfg
popfile.db
messages (←ディレクトリ)



(参考)
・POPFile - Automatic Email Classification < http://getpopfile.org/wiki> 2011/06/30
・クロスプラットフォーム版のインストール方法 < http://getpopfile.org/docs/jp:howtos:crossplatforminstall > 2011/06/30
・MeCab: Yet Another Part-of-Speech and Morphological Analyzer < http://mecab.sourceforge.net/ > 2011/06/30

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad