« 2007年06月 | メイン | 2007年10月 »

2007年09月 アーカイブ

2007年09月05日

spamassassinでスパムメール対策

 スパムメールがこのところやたら目につく。有料のアプライアンス製品と遜色ないレベルで駆除をおこなってくれそうなOSSもいくつかあるようだ。目をつけたのは spamassassin と bsfilter。日本語のスパム対策で有利なのはbsfilterのようだが我が組織の環境では日本語圏外からのスパムの方が多い。またspamassassinも工夫次第で日本語スパムにも十分な処理をするようだったので今回はこの手のソフトウェアでのデファクトスタンダードであるspamassassinを選択した。
 特徴は以下。

●メールのヘッダと本文のパターンマッチング
●ベイジアンフィルタ
●DNSBL, URIBL
●共同型フィルタリングネットワーク

SPAMメールをSPAMメールと判定する精度:約95%
正常メールを正常メールと判定する精度:約99%

学習機能があるので精度は徐々に上がると思います。

今回OSはCentOS4,RHEL4で確認した。どちらも同じ設定だった。RHEL4での作業記録をとっている。

まずはspamassassinのインストールから。

# up2date --configure
# up2date --install spamassassin

spamassassin-3.1.9-1.el4にバージョンアップした。これでインストール完了。
サイトポリシー設定ファイルは以下のファイルです。このコンフィグファイルで全体の制御にかかわる設定を行います。
/etc/mail/spamassasin/local.cf

個別ユーザ設定ファイルは以下です。ユーザごとの設定です。
~/.spamassassin/user_prefs

ルールのアップデートを必ず行いましょう。
# sa-update
※/var/lib/spamassassin配下にダウンロードされます
※perl-Archive-Tarのrpmと
 perl-IO-Zlibのrpmをインストールしないとエラーが出る。


procmailを利用してspamassassinは機能します。


spamassassinを利用するユーザには~/.procmailrc ファイルを作成します。

$ vi ~/.procmailrc
---
# ログ
LOGFILE=$HOME/procmail.log

# spamassassinによるスパムチェックを行う
:0fw:$HOME/.procmail.lock
|/usr/bin/spamc

# スパムメールをユーザ届かなくする設定
:0
* ^X-Spam-Status: Yes
/path/file
---

ネットで調べると$HOME/.procmail.lockは書かなくてもいいようだったけど書かないとprocmail.logにエラーが出た。
/path/file は /dev/null でもいいけどちょっと怖い。


postfixを使っている場合は以下のように設定を変更します。

# vi /etc/postfix/main.cf
---
mailbox_command = /usr/bin/procmail
---


最後に各種サービスの起動,再起動などをします。

# chkconfig --level 35 spamassasin on
# service spamassassin start
# service postfix reload

これでOK。意外と簡単でした。あとはspamassassinの判定精度を上げるために学習させます。


スパムメールを学習させる

# sa-learn --progress --spam /path/directory

正常なメールを学習させる

# sa-learn --progress --ham /path/directory

それぞれ200通学習しなければベイジアンフィルタが有効になりません。
この数値は以下の設定で変更することができます。

# vi /etc/mail/spamassassin/local.cf
---
bays_min_ham_num 100
bays_min_spam_num 100
---
など。

2007年09月06日

userminでWEBメール

 今回WEBメールを利用できるようにしようと思ったのは,spamassassinでスパムメールをサーバ上に隔離した為,そのメールをユーザ自身で管理出来るようにしたかったからです。ユーザ自身でスパムメールを見て削除していただく。これだけでいいのです。
 フリーのWEBメールで有名なのはsquirrelmailですが残念ながら私のやりたいことができませんでした。そこでuseiminでWEBメールが出来るようにと考えて調べていたら見事にやりたいことが出来ました。

今回使ったバージョンはusermin-1.270.tar.gzで構築まではすでにこのブログで書きましたので機能の追加だけ記述します。

まずWEBメールを使えるように以下のファイルを変更します。
# vi /etc/usermin/webmin.acl
--
user: changepass mailbox
--
これでパスワード変更とWEBメールが使えます。

次に隔離したメールが集まる場所を指定します。
# vi /etc/usermin/mailbox/config
--
mail_dir=/path/spam
--

今回はユーザがスパムメールを見ることができ,サーバから削除できるだけでいいのでそのように設定します。タイトルを以下のように変更しました。
# vi /etc/usermin/module.infos.cache
--
mailbox desc=Read SPAM Mail
mailbox realdesc=Read SPAM Mail
--

文字化け対策は以下。
# vi /usr/local/usermin-1.270/mailbox/view_mail.cgi
--
$charset = "EUC-JP";
--

削除時の確認メッセージを日本語に直しました。
# vi /usr/local/usermin-1.270/mailbox/lang/en
--
confirm_warn4=
confirm_warn=選択した $1 通のメッセージを消去してよろしいですか?
--

あとの機能はいらないのでいろいろコメントアウトしました。
# vi /usr/local/usermin-1.270/mailbox/index.cgi
# vi /usr/local/usermin-1.270/mailbox/view_mail.cgi
# vi /usr/local/usermin-1.270/mailbox/mailbox-lib.pl

これらのファイルを編集することで必要な機能を限定させることが出来ます。

2007年09月11日

spamassassinで日本語スパムメール対策

headerやbodyにある単語でスパム判定を行う設定をする。

たとえばSubjectに「出会い系」という文字列が入っていたら判定ポイントをプラス1する場合

vi /etc/mail/spamassassin/local.cf
---
header H_SPAM_WORD1 Subject =~ /=P2q\$\$7O/
describe H_SPAM_WORD1 Deaikei
score H_SPAM_WORD1 1.00
---

と記入する。
単に出会い系と記入してはいけない。文字コードの問題である。またPERL言語なのでエスケープしてやる必要もある。

# echo "出会い系" | nkf -j|awk '{gsub(/\x1B[$(]B/,"");print}'
=P2q$$7O

※エスケープの必要のあるメタキャラ
.`*+/?^$#{}()[]

よって「出会い系」は「=P2q\$\$7O」という文字列になる。
bodyにある文字列で判定ポイントを上げるには以下のように書く。

---
body B_SPAM_WORD /=P2q\$\$7O/
describe B_SPAM_WORD Deaikei
score B_SPAM_WORD 1.00
---

bodyの文字列を指定する場合はよく考えてからにしましょう。

2007年09月13日

pflogsummによるpostfixのログ集計

 いったいpostfixはどうなっているのか?きちんと動いているのか?とてもきになるところです。特にmain.cfの設定を変更した時なんか。そんなときはpostfixのログを集計して見てみましょう。一番簡単にできそうなのは postfix-pflogsumm パッケージを使うことでした。

# yum install postfix-pflogsumm

あとはpflogsummコマンドを利用するだけです。

# pflogsumm -e -d yesterday /var/log/maillog | more
(-e: 詳細表示 -d yesterday: 昨日分だけを集計)

思ったよりも詳細な集計結果が得られると思います。

Natural Rhythm ナチュラルリズム

カテゴリー

About 2007年09月

2007年09月にブログ「偉大なるOSS」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年06月です。

次のアーカイブは2007年10月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。