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)を設定出来る
    • report_safe 1
  • 信頼しうるメールサーバー(スパマーじゃないメールサーバー)は誰ですか。
    • trusted_networks 212.17.35.
  • ファイルロックの設定(flockはNFSでは安全ではないが、早い)
    • lock_method flock
  • スパムと判定してもよいスコア(デフォルトは5.0)
    • required_score 5.0
  • Bayesian判定を使うかどうか(デフォルトは1)
    • use_bayes 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!)

  1. wget http://tlec.linux.or.jp/docs/user_prefs
  2. mv user_prefs local.cf
  3. その後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
  4. # mkdir /etc/mail/spamassassin/bayes
  5. # chmod 777 /etc/mail/spamassassin/bayes
  6. 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. これはなんだ? ---これが答え

メールサーバー全体の設定詳細

  1. /etc/skel/Maildir以下に
    1. .spam/.spam-learn/.hamと3つフォルダーを作り、 cur/new/tmpのフォルダーを各3つ作る
  2. 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/
  3. 後はじゃんじゃん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

  1. 編集ファイル場所:/usr/share/perl5/Mail/SpamAssassin/HTML.pm
  2. 編集内容は上記のHTML.pmを下記のようにしてみる
    marked_sections => 1);
    ##追加行start#######
    $hp->utf8_mode(1);
    ##追加行end##########
  3. うまく行かなかったパッチ
    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##########
  4. (2)のファイルはエラーがでなかったので様子を見てみようと思う。

参考URL


Last-modified: 2012-03-12 (月) 17:05:51 (166d)