Mail >> Exim4
基本情報 †
日本語対応状況 †
SpamAssassinは日本語対応していない。
問題点(日本語メール)
- False Positiveになりやすい
- 日本語キーワードチェックルールを書こうとするとキーワードを文字コード(16進表記)にして書かないと行けない
上記を解決するであろうパッチも作ってくれている方々がいる。
http://www.emaillab.org/spamassassin/
効果(未確認)
- ベイズフィルターが賢くなるらしい(現在は文字コードを変換せず、生のコードのままで処理をするらしい、その一方で、新しいパッチは文字コードをUTF-8に統一した上で、MeCab?などのプログラムで語句に区切るらしい)->この処理は時間がかかるらしいが、ベイズフィルターの判別力は大幅にアップ(するらしい)
- ルールが簡単に書ける。UTF-8を書けるエディターを使えばよい
日本語パッチがあたっているspamassassinをダウンロードする場合はこちらから!
http://spamassassin.jp/download/rules/
既存ファイル †
/etc/default/spamassassin(和訳) †
# WARNING: please read README.spamd before using.
#警告:README.spamdを使う前に読め、とな。
# There may be security risks.
#セキュリティリスクがあるかもしれません…
# Change to one to enable spamd
# 1にする事でspamdを稼働させれます。
ENABLED=0 <=まずこれを1にする
# Options
#オプション
# See man spamd for possible options. The -d option is automatically added.
# man spamdで使えるオプションを確認しましょう。 -d オプションは自動で付けられます。
# SpamAssassin uses a preforking model, so be careful! You need to
# SpamAssassinはpreforkモデルで使えるので、気を付けてください!
# make sure --max-children is not set to anything higher than 5, unless you know what you're doing.
# 自分が何をしているか分かってる場合を除いて、--max-childrenが5以上にならないようにしてください。
OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
# Pid file
# Where should spamd write its PID to file? If you use the -u or
#spamdはPIDをどこに記録するのでしょうか? -u か --usernameオプションを見ると分かるように
# --username option above, this needs to be writable by that user.
# ユーザー権限で書き込める必要があります。
# Otherwise, the init script will not be able to shut spamd down.
# そうでなければ、initスクリプトがspamdをシャットダウン出来なくなります。
PIDFILE="/var/run/spamd.pid"
# Set nice level of spamd
# spamdのnice levelの設定
#NICE="--nicelevel 15"
コマンド/機能など †
sa-learn
現在のバージョン SpamAssassin version 3.0.3 / running on Perl version 5.8.4
インストール/設定 †
インストールはいつものようにapt-get install {package}
基本設定 †
/usr/share/spamassassin †
- 10_misc.cf
- 20_advance_fee.cf
- 20_anti_ratware.cf
- 20_body_tests.cf
- 20_compensate.cf
- 20_dnsbl_tests.cf
- 20_drugs.cf
- 20_fake_helo_tests.cf
- 20_head_tests.cf
- 20_html_tests.cf
- 20_meta_tests.cf
- 20_net_tests.cf
- 20_phrases.cf
- 20_porn.cf
- 20_ratware.cf
- 20_uri_tests.cf
- 23_bayes.cf
- 25_accessdb.cf
- 25_antivirus.cf
- 25_body_tests_es.cf
- 25_body_tests_pl.cf
- 25_dcc.cf
- 25_dkim.cf
- 25_domainkeys.cf
- 25_hashcash.cf
- 25_pyzor.cf
- 25_razor2.cf
- 25_replace.cf
- 25_spf.cf
- 25_textcat.cf
- 25_uribl.cf
- 30_text_de.cf
- 30_text_fr.cf
- 30_text_it.cf
- 30_text_nl.cf
- 30_text_pl.cf
- 30_text_pt_br.cf
- 50_scores.cf
- 60_awl.cf
- 60_whitelist.cf
- 60_whitelist_dk.cf
- 60_whitelist_dkim.cf
- 60_whitelist_spf.cf
- 60_whitelist_subject.c f
- 65_debian.cf
- languages
/etc/spamassassin/init.pre †
- 詳細は'perldoc Mail::SpamAssassin::Conf'
- このファイルにはSpamAssassin3.0.x リリースようのプラグインコマンドも含まれている。
- RelayCountry?: Bayes ラーニングにメタデータを追加する。( add metadata for Bayes learning, marking the countries a message was relayed through)
- IP::Country::Fast Perl モジュールが必要です。
- loadplugin Mail::SpamAssassin::Plugin::RelayCountry?
URIDNSBL: 複数のDNSブロックリストからメッセージ内のURLをルックアップしてくれる。
- loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
- Hashcash hashcash検証を行う
- SPF: SPF検証を行う。
/etc/spamassassin/local.cf †
- 詳細は'perldoc Mail::SpamAssassin::Conf'
- これをコメントアウトするとサブジェクトに*****SPAM*****を入れてくれる
※これはExim4では出来ない。 > ソース
- rewrite_header Subject *****SPAM*****
- スパムメッセージを message/rfc822 MIME にするか(1)、text/plainにするか(2)否か(0)を設定出来る
- 信頼しうるメールサーバー(スパマーじゃないメールサーバー)は誰ですか。
- trusted_networks 212.17.35.
- ファイルロックの設定(flockはNFSでは安全ではないが、早い)
- スパムと判定してもよいスコア(デフォルトは5.0)
- Bayesian判定を使うかどうか(デフォルトは1)
/etc/spamassassin/ v310.pre(version別のplugin loaderみたいなもの) †
loadplugin Mail::SpamAssassin::Plugin::
- DCC (ライセンス上の問題でコメントアウトらしい)
- Pyzor
- Razor2
- SpamCop?
- AntiVirus?
/etc/spamassassin/v312.pre(version別のplugin loaderみたいなもの) †
loadplugin Mail::SpamAssassin::Plugin::
- DKIM
- AWL
- AutoLearnThreshold?
- TextCat? (言語推測?)
- AccessDB
- WhiteListSubject?(whitelist/blacklistをサブジェクトにある文字列を正規表現で見る)
- (ex)DomainKeys?
- (ex)MIMEHeader
- (ex)ReplaceTags?
その他
- spamassassin/user_prefs(ユーザのホームディレクトリに作成される/ユーザ毎の設定)
- /etc/mail/spamassassin/local.cf(全体に適用される)
[tlecさんのuser_prefsを使うver] †
/etc/spamassassin/以下に下記の通りにファイルがある
- rw-r--r-- 1 root root 935 Jun 30 2005 init.pre
- rw-r--r-- 1 root root 267302 Aug 22 06:00 local.cf
このlocal.cfをTLCから持ってくる(日本語対応の設定ファイル:かなり細かく設定しているので、それを借りるThankx!)
- wget http://tlec.linux.or.jp/docs/user_prefs
- mv user_prefs local.cf
- その後sudo emacs local.cfとして下記の内容を先頭に追加する
rewrite_subject 1(スパムと認定された時にサブジェクトを書き換えるかどうか)
subject_tag [SPAM] (↑書き換える際は何にするかの設定)
rewrite_header Subject ****SPAM**** #Exim4だとうまく動かない
report_safe 1(スパムを検知したときにSpamassasinがレポートを追記する形式設定
report_safe 0
required_hits 7.0~4.0(ディフォルトは5)
bayes_path /etc/mail/spamassassin/bayes/bayes
bayes_file_mode 0666
auto_whitelist_path /etc/mail/spamassassin/bayes/auto-whitelist
auto_whitelist_file_mode 0666
use_bayes 1
- # mkdir /etc/mail/spamassassin/bayes
- # chmod 777 /etc/mail/spamassassin/bayes
- SpamAssassin設定(一応)終了
個人Maildirフォルダーに戻って、.procmailrcにスパムとして認定されたら自分のスパム用のフォルダーに受信するようにしておいた。
例えばVIRUS~$MAILDIR/.Spam/new/.とすると、imapでメールチェックするときにスパムかどうかのチェックを(一応)する時に便利。
自分のSpamフォルダーに入ったものは
aya@mail:~/Maildir/.Spam/cur$ sa-learn --spam ./*
とするとspamフォルダーに入って、確認済みのスパムを覚えさせる事が出来る。
もしファイルがスパムではないけど、間違って認定されたものに関しては
aya@mail:~/Maildir/.Spam/cur$ sa-learn --ham ./{メールの名前}
として教えさせる
後は
aya@mail:~/Maildir/.Spam/cur$以下にあるファイルを削除するとよい
個別内容 †
10 FORGED_RCVD_IP Invalid IP number, over 255. これはなんだ? ---これが答え
メールサーバー全体の設定詳細 †
- /etc/skel/Maildir以下に
- .spam/.spam-learn/.hamと3つフォルダーを作り、 cur/new/tmpのフォルダーを各3つ作る
- crontabにrootで登録
30 3* * * /usr/bin/sa-learn --spam /home/*/Maildir/.spam-learn/cur/
30 4* * * /usr/bin/sa-learn --ham /home/*/Maildir/.ham/cur/
- 後はじゃんじゃんINBOXに入ったスパムをspam-learnに、またspamフォルダーに入ったhamメールは、hamフォルダーに移行させておく
設定注意事項 †
その他こまごまとした事 †
hashcash †
まずhashcashとは、メールを送る際にX-Hashcash: をheaderに差込ます。
From: Someone <test@test.invalid>
To: Adam Back <adam@cypherspace.org>
Subject: test hashcash
Date: Thu, 26 Jun 2003 11:59:59 +0000
X-Hashcash: 0:030626:adam@cypherspace.org:6470e06d773e05a8
blah blah
-Someone
エラー? †
Parsing of undecoded UTF-8 will give garbage when decoding entities at †
/usr/share/perl5/Mail/SpamAssassin/HTML.pm line 182
cronで
30 4 * * * /usr/bin/sa-learn --spam /home/*/Maildir/.spam-learn/cur/
30 5 * * * /usr/bin/sa-learn --ham /home/*/Maildir/.ham/cur/
このように各ユーザーのMaildirにあるspam-learnとhamフォルダーを学習し行っているのだけれど、
Parsing of undecoded UTF-8 will give garbage when decoding entities at
/usr/share/perl5/Mail/SpamAssassin/HTML.pm line 182.
というエラー?みたいなのがメールで来た。&調べてみた&解決しそうだ
参考URL
パッチ †
HTML.pm †
- 編集ファイル場所:/usr/share/perl5/Mail/SpamAssassin/HTML.pm
- 編集内容は上記のHTML.pmを下記のようにしてみる
marked_sections => 1);
##追加行start#######
$hp->utf8_mode(1);
##追加行end##########
- うまく行かなかったパッチ
marked_sections => 1);
##追加行start#######
# enable UTF-8 mode,
# http://search.cpan.org/~gaas/HTML-Parser-3.45/Parser.pm#$p-%3Eutf8_mode ,
# if we're running perl 5.8 and HTML::Parser supports it. bug 4046.
if ($] >= 5.008 && $self->can("utf8_mode")) {
if (!eval { $self->utf8_mode(); 1; }) {
dbg ("html: failed to enable UTF-8 mode (perl ver $] h:p ver $HTML::Parser::VERSION)");
}
}
##追加行end##########
- (2)のファイルはエラーがでなかったので様子を見てみようと思う。
参考URL †