Sun Java System Messaging Server 6 2005Q4 管理ガイド

SpamAssassin を使用する

この節には、次の項があります。

SpamAssassin の概要

Messaging Server では、SpamAssassin の使用がサポートされています。SpamAssassin はフリーウェアのメールフィルタで、スパムの特定に使用されます。SpamAssassin は Perl で記述されたライブラリ、アプリケーションのセット、および SpamAssassin のメッセージングシステムへの統合に使用するユーティリティーで構成されています。

SpamAssassin では、すべてのメッセージのスコアが計算されます。スコアは、メッセージヘッダーや本文の情報に対して一連のテストを実行することによって計算されます。各テストに成功するか失敗するかによって、True (スパム) または False (スパムではない) がレンダリングされます。スコアは正または負の実数です。スコアが指定したしきい値 (通常 5.0) を超えると、スパムであるとみなされます。SpamAssassin の結果文字列の例を次に示します。

True ; 18.3 / 5.0

True は、メッセージがスパムであることを示します。18.3 は SpamAssassin スコアです。5.0 はしきい値です。

SpamAssassin には高い設定性があります。テストはいつでも追加したり削除したりでき、既存テストのスコアは調整されます。これらはすべてさまざまな設定ファイルを通じて実行されます。SpamAssassin の詳細については、SpamAssassin の Web サイトを参照してください。

Brightmail のスパムおよびウィルススキャンライブラリを呼び出す場合と同じ方法で SpamAssassin spamd サーバーに接続できます。Messaging Server で提供するモジュールの名前は libspamass.so です。

SpamAssassin/Messaging Server の動作方式

spamd は SpamAssassin のデーモンバージョンであり、MTA から呼び出すことができます。spamd は、要求のソケットを待機し、子プロセスを生成してメッセージがテストされるようにします。子プロセスは、メッセージが処理され結果が戻されたあと、破棄されます。コード自体は子プロセス間で共有されるため、理論上、フォークは効率的なプロセスであるはずです。

SpamAssassin インストールによるクライアント部分、spamc は、使用されません。代わりに、Messaging Server の一部である libspamass.so という共有ライブラリによってこの機能が実行されます。libspamass.so は、Brightmail SDK の読み込みと同じように読み込まれます。

MTAから見ると、SpamAssassin とスパムのフィルタ処理用の Brightmail は、ほぼ透過的に切り替えることができます。同じ機能を持っているわけではないので、完全に透過的というわけではありません。たとえば、Brightmail ではウィルス用のフィルタ処理も行えますが、SpamAssassin はスパム用のフィルタ処理にしか使われません。この 2 つのソフトウェアパッケージによって返される結果、つまり判定も、異なります。SpamAssassin がスコアを提供するのに対し、Brightmail は判定名のみを提供します。このため、設定にもいくつかの違いがあります。

MTA と一緒に SpamAssassin を使用すると、SpamAssassin からはスコアと判定のみが返されます。メッセージ自体は変更されません。つまり、ヘッダーの追加や件名の変更のようなオプションは、Sieve スクリプトによって行う必要があります。また、mode オプションを使用すると、判定を示すために返す文字列を指定できます。文字列の選択肢は、NULL、デフォルト、SpamAssassin の結果文字列、または verdict 文字列です。詳細は、「SpamAssassin オプション」を参照してください。

SpamAssassin の要件と使用法の考慮

SpamAssassin を実行する場所

SpamAssassin は、それ自体が置かれている個々のシステム上、単一のシステム配備の Messaging Server と同じシステム上、または 2 層配備の MTA と同じシステム上で実行できます。MTA とメッセージストア間で Local Mail Transfer Protocol (LMTP) が使われている場合、フィルタ処理は MTA から呼び出す必要があります。メッセージストアから呼び出すことはできません。MTA とメッセージストア間で SMTP が使われている場合は、いずれか一方から呼び出すことができ、いずれかのシステムか 3 つ目の別のシステムで実行できます。

SpamAssassin を実行するサーバーのファームを使用する場合は、それらの前でロードバランサを使用する必要があります。MTA は、SpamAssassin サーバー用に 1 つのアドレスのみを持つよう設定されます。

SpamAssassin を配備する

次に示す手順を実行して、SpamAssassin を配備します。

SpamAssassin 設定の例

この節では、一般的な SpamAssassin 設定の例について説明します。


注 –

これらの例では、多数のオプションとキーワードを使用しています。表 14–1 および表 14–2 を参照してください。


Procedureスパムを個別のフォルダにファイリングするには

この例では、ローカルメッセージストアに届くメッセージをテストし、spam というフォルダ内にスパムをファイリングします。最初の 3 つのステップは任意の順序で実行できます。

手順
  1. SpamAssassin の設定ファイルを作成します。

    このファイルの名前と場所は、手順 2 で指定したものです。適切な名前は spamassassin.opt です。このファイルには、次に示す行が含まれます。


    host=127.0.0.1
    port=2000
    mode=0
    verdict=spam
    debug=1
                      

    host および port は、spamd が実行されているシステムの名前と、spamd が着信要求を待機するポートです。mode=0 は、メッセージがスパムとして認識された場合に、verdict によって指定された文字列が返されることを指定します。debug=1 は、SpamAssassin ライブラリでデバッグをオンにします。表 14–4 を参照してください。

  2. option.dat ファイルに、次に示す行を追加します。


    ! for Spamassassin
    spamfilter1_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter1_optional=1
    spamfilter1_string_action=data:,require "fileinto"; fileinto "$U";
                      

    spamfilter1_config_file は、SpamAssassin 設定ファイルを指定します。

    spamfilter1_library は、SpamAssassin 共有ライブラリを指定します。

    spamfilter1_optional=1 は、spamd による失敗があった場合に MTA が操作を続行することを指定します。

    spamfilter1_string_action は、スパムメッセージに対して実行する Sieve アクションを指定します。

    この例では、spamfilter1_string_action は必須ではありません。これは、デフォルト値があらかじめ data:,require "fileinto"; fileinto "$U"; であるためです。この行では、スパムメッセージがフォルダに送られることを指定しています。フォルダの名前は、SpamAssassin によって返されるスパム判定値です。SpamAssassin によって返される値は、spamassassin.optverdict オプションによって指定されます 。(手順 1 を参照。) この例では、フォルダ名は spam です。

  3. フィルタ処理するメッセージを指定します。

    ローカルメッセージストアに届くすべてのメッセージをフィルタ処理するには、ims-ms チャネルの destinationspamfilterXoptin spam キーワードを追加して imta.cnf ファイルを変更します。


    !
    ! ims-ms
    ims-ms defragment subdirs 20 notices 1 7 14 21 28 backoff "pt5m" "pt10m" 
    "pt30m" "pt1h"  "pt2h" "pt4h" maxjobs 4 pool IMS_POOL fileinto
    $U+$S@$D destinationspamfilter1optin spam
    ims-ms-daemon
  4. 設定をコンパイルしなおし、サーバーを再起動します。MTA を再起動するだけでかまいません。stop-msg を実行する必要はありません。


    # imsimta cnbuild
    # imsimta restart
    
  5. spamd デーモンを起動します。次の形式のコマンドを使用してこれを実行します。

    spamd -d

    spamd は、デフォルトではローカルシステムからの接続を受け入れるだけです。SpamAssassin と Messaging Server が別のシステム上で実行されている場合は、次の構文が必要です。

    spamd -d -i listen_ip_address -A allowed_hosts

    listen_ip_address は待機対象のアドレスであり、allowed_hosts はこの spamd インスタンスに接続できる、認証されたホストまたはネットワークのリスト (IP アドレスを使用) です。


    注 –

    -i listen_ip_address で 0.0.0.0 を設定すると、spamd にすべてのアドレスを待機させることができます。spamfilterX_verdict_ n を使用すると、システムの IP アドレスを変更したときにコマンドスクリプトを変更しなくても済むため、すべてのアドレスを待機することをお勧めします。


Procedureスパムメッセージに SpamAssassin スコアを含むヘッダーを追加する

この例では、SpamAssassin によってスパムであると判断された各メッセージに、ヘッダー Spam-test: 結果文字列 を追加しています。ヘッダーの例は次のとおりです。

Spam-test: True ; 7.3 / 5.0

Spam-test: はリテラルで、その後ろはすべて結果文字列です。True はそれがスパムであることを意味し、False はスパムではないことを意味します。7.3 は SpamAssassin スコアです。5.0 はしきい値です。この結果は、一定のスコアを超えたメールや一定のスコア間のメールをファイリングまたは破棄できる、Sieve フィルタを設定する場合に便利です。

また、USE_CHECK0 に設定すると、判定文字列とともに一致する SpamAssassin テストのリストが返されます。表 14–4 の USE_CHECK を参照してください。

手順
  1. フィルタ処理するメッセージを指定します。詳細は、「スパムを個別のフォルダにファイリングするには」手順 3 を参照してください。

  2. SpamAssassin の設定ファイルを作成します。

    このファイルの名前と場所は、spamfilter_configX_file で指定したものです (次の手順を参照)。このファイルには、次に示す行が含まれます。


    host=127.0.0.1
    port=2000
    mode=1
    field=
    debug=1
                      

    host および port は、spamd が実行されているシステムの名前と、spamd が着信要求を待機するポートです。mode=1 は、メッセージがスパムであると判明した場合に SpamAssassin の結果文字列が返されることを指定します。field= は、SpamAssassin の結果文字列のプレフィックスを指定します。この例では、プレフィックスは Sieve スクリプトで指定するため、必要ありません。debug=1 は、SpamAssassin ライブラリでデバッグをオンにします。

  3. option.dat ファイルに、次に示す行を追加します。


    !for Spamassassin
    spamfilte1r_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter1_optional=1
    spamfilter1_string_action=data:,require 
    ["addheader"];addheader "Spam-test: $U";
                      
    

    前に示した例と同様、最初の 3 つのオプションは、SpamAssassin 設定ファイル、共有ライブラリ、および、共有ライブラリで失敗があった場合に MTA 操作を続行することを指定します。そのあとに次の行が続いています。

    spamfilter1_string_action=data:,require ["addheader"];addheader "Spam-test: $U";

    この行は、スパムメッセージにヘッダーを追加することを指定します。ヘッダーには、リテラルプレフィックス Spam-text: と、そのあとに SpamAssassin が返す文字列が含まれます。前の手順で mode=1 を指定したため、SpamAssassin 結果文字列が返されます。例: True; 7.3/5.0

  4. 設定をコンパイルしなおし、サーバーを再起動して、spamd デーモンを起動します。

    「SpamAssassin 設定の例」を参照してください。

Procedure件名行に SpamAssassin の結果文字列を追加するには

SpamAssassin の結果文字列を件名行に追加することによって、ユーザーが SpamAssassin スコアを含むメッセージを読むかどうかを判断できます。例:

Subject: [SPAM True ; 99.3 / 5.0] Free Money At Home with Prescription Xanirex!

USE_CHECK0 に設定すると、判定文字列とともに一致する SpamAssassin テストのリストが返されます (「SpamAssassin オプション」「SpamAssassin オプション」を参照)。このリストは非常に長くなることがあるため、USE_CHECK1 に設定することをお勧めします。

手順
  1. フィルタ処理するメッセージを指定します。

    詳細は、「スパムを個別のフォルダにファイリングするには」手順 3 を参照してください。

  2. SpamAssassin の設定ファイルを作成します。

    この手順の詳細は、「スパムを個別のフォルダにファイリングするには」を参照してください。mode=1 は、メッセージがスパムであると判明した場合に SpamAssassin の結果文字列が返されることを指定します。


    host=127.0.0.1
    port=2000
    mode=1
    debug=1
                      

    host および port は、spamd が実行されているシステムの名前と、spamd が着信要求を待機するポートです。mode=1 は、メッセージがスパムであると判明した場合に SpamAssassin の結果文字列が返されることを指定します。debug=1 は、SpamAssassin ライブラリでデバッグをオンにします。

  3. option.dat ファイルに、次に示す行を追加します。


    !for Spamassassin
    spamfilter1_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter1_optional=1
    spamfilter1_string_action=data:,addtag “[SPAM detected: $U]”;
                      
    

    前に示した例と同様、最初の 3 つのオプションは、SpamAssassin 設定ファイル、共有ライブラリ、および、共有ライブラリで失敗があった場合に MTA 操作を続行することを指定します。そのあとに次の行が続いています。

    spamfilter1_string_action=data:,addtag “[SPAM detected $U]”;

    この行は、 Subject: 行にタグを追加することを指定します。これには、リテラルプレフィックス SPAM detected が含まれ、そのあとに field 文字列 (デフォルトは Spam-Test)、そのあとに SpamAssassin によって返される [結果文字列] が含まれます。「SpamAssassin 設定の例」mode=1 を指定したため、SpamAssassin 結果文字列が返されます。したがって、件名行は次のようになります。

    Subject: [SPAM detected Spam-Test: True ; 11.3 / 5.0] Make Money!

    addheaderaddtag を併用することもできます。

    spamfilter1_string_action=data:,require ["addheader"];addtag "[SPAM detected $U]";addheader "Spamscore: $U";

    メッセージは次のようになります。

    Subject: [SPAM detected Spam-Test: True ; 12.3 / 5.0] Vigaro Now!Spamscore: Spam-Test: True ; 12.3 / 5.0

    spamassassin.optfield= を設定して、Spam-Test のデフォルト値を削除します。よりすっきりとしたメッセージが返されます。

    Subject: [SPAM True ; 91.3 / 5.0] Vigaro Now!Spamscore: True ; 91.3 / 5.0

  4. 設定をコンパイルしなおし、サーバーを再起動して、spamd デーモンを起動します。

    「スパムを個別のフォルダにファイリングするには」を参照してください。

SpamAssassin をテストする

SpamAssassin をテストするには、最初に spamassassion.opt ファイルに debug=1 を設定します。imta.cnf にあるチャネル固有の master_debug または slave_debug をオンにする必要はありません。そのあと、テストユーザーにテストメッセージを送信します。msg_svr_base/data/log/tcp_local_slave.log* ファイルには次のような行があるはずです。


15:15:45.44: SpamAssassin callout debugging enabled; config 
/opt/SUNWmsgsr/config/spamassassin.opt
15:15:45.44: IP address 127.0.0.1 specified
15:15:45.44: Port 2000 selected
15:15:45.44: Mode 0 selected
15:15:45.44: Field "Spam-Test: " selected
15:15:45.44: Verdict "spam" selected
15:15:45.44: Using CHECK rather than SYMBOLS
15:15:45.44: Initializing SpamAssassin message context
...
15:15:51.42: Creating socket to connect to SpamAssassin
15:15:51.42: Binding SpamAssassin socket
15:15:51.42: Connecting to SpamAssassin
15:15:51.42: Sending SpamAssassin announcement
15:15:51.42: Sending SpamAssassin the message
15:15:51.42: Performing SpamAssassin half close
15:15:51.42: Reading SpamAssassin status
15:15:51.67: Status line: SPAMD/1.1 0 EX_OK
15:15:51.67: Reading SpamAssassin result
15:15:51.67: Result line: Spam: False ; 1.3 / 5.0
15:15:51.67: Verdict line: Spam-Test: False ; 1.3 / 5.0
15:15:51.67: Closing connection to SpamAssassin
15:15:51.73: Freeing SpamAssassin message context

ログファイルにこのような行が含まれていない場合、または spamd が実行されていない場合は、SMTP サーバーに最後のピリオド (.) が送信されたあと、SMTP ダイアログに次のようなエラーメッセージが返されます。

452 4.4.5 Error writing message temporaries - Temporary scan failure: End message status = -1

また、option.datspamfilter1_optional=1 が設定 (強く推奨) されている場合、メッセージは受け入れられますがフィルタ処理は行われません。これはスパムのフィルタ処理が有効になっていないのと同じで、tcp_local_slave.log* に次の行が表示されます。


15:35:15.69: Creating socket to connect to SpamAssassin
15:35:15.69: Binding SpamAssassin socket
15:35:15.69: Connecting to SpamAssassin
15:35:15.69: Error connecting socket: Connection refused
15:35:15.72: Freeing SpamAssassin message context
         

SpamAssassin に対する呼び出しは、SMTP サーバーがメッセージ全体を受信したあと、つまり、最後の「.」が SMTP サーバーに送信されたあとで、SMTP サーバーが受け取ったメッセージの差出人に認識される前に行われます。

もう 1 つのテストは、たとえば Mail-SpamAssassin-2.60 ディレクトリから、sample-spam.txt を使ってサンプルのスパムメッセージを送信することです。このメッセージには、次のような特殊なテキスト文字列が含まれます。


XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

対応する tcp_local_slave.log* には、次のような内容が含まれます。


16:00:08.15: Creating socket to connect to SpamAssassin
16:00:08.15: Binding SpamAssassin socket
16:00:08.15: Connecting to SpamAssassin
16:00:08.15: Sending SpamAssassin announcement
16:00:08.15: Sending SpamAssassin the message
16:00:08.15: Performing SpamAssassin half close
16:00:08.15: Reading SpamAssassin status
16:00:08.43: Status line: SPAMD/1.1 0 EX_OK
16:00:08.43: Reading SpamAssassin result
16:00:08.43: Result line: Spam: True ; 1002.9 / 5.0
16:00:08.43: Verdict line: Spam-Test: True ; 1002.9 / 5.0
16:00:08.43: Closing connection to SpamAssassin
16:00:08.43: Mode 0 verdict of spam
16:00:08.43: Mode 0 verdict of spam
16:00:08.47: Freeing SpamAssassin message context

mail.log_current ファイルの対応するエントリは、次のようになります。宛先アドレスの +spam 部分は、メッセージが spam というフォルダにファイリングされることを示します。


15-Dec-2003 15:32:17.44 tcp_intranet ims-ms E 1 morchia@siroe.com rfc822;
morchia morchia+spam@ims-ms-daemon 15-Dec-2003 15:32:18.53 
ims-ms D 1 morchia@siroe.com rfc822;morchia morchia+spam@ims-ms-daemon

         

SpamAssassin オプション

この節では、SpamAssassin オプションの表を示します。

表 14–4 SpamAssassin オプション (spamassassin.opt)

オプション 

説明 

デフォルト 

debug

libspamass.so でデバッグをオンにするかどうかを指定します。spamd 自体のデバッグは、spamd を呼び出すコマンド行で制御されます。0 または 1 に設定します。

field

SpamAssassin の結果文字列のプレフィックスを指定します。SpamAssassin の結果は次のようになります。 

Spam-Test: False ; 0.0 / 5.0 Spam-Test: True ; 27.7 / 5.0

field オプションは、結果の Spam-Test 部分の変更方法を提供します。注意: 空の field 値が指定されると「:」が削除されます。

USE_CHECK が 0 に設定されている場合、結果の文字列は次のようになります。

Spam-test: False ; 0.3 / 4.5 ; HTML_MESSAGE,NO_REAL_NAME 

Spam-test: True ; 8.8 / 4.5 ; NIGERIAN_BODY, NO_REAL_NAME,PLING_PLING,RCVD_IN_SBL,SUBJ_ALL_CAPS 

“Spam-test” 

host

spamd が実行されているシステムの名前です。

localhost 

mode

SpamAssassin フィルタ結果から判定情報への変換を制御します。つまり、メッセージ処理後にどの判定情報を返すかを指定します。次の 4 種類のモードが使用可能です。詳細は、「SpamAssassin の mode オプション」を参照してください。

0 - メッセージがスパムメッセージの場合は、判定文字列 (verdict オプションで指定される文字列) を返します。MTA オプション spamfilterX_string_action を使用して、verdict 文字列が返された場合の処理を指定できます。あとで定義する verdict オプションが空である場合や指定されていない場合、メッセージがスパムメッセージのときは、NULL 判定を返します。MTA オプション spamfilterX_null_action を使用して、NULL 判定が返された場合の処理を指定できます。

スパムではない場合は、SpamAssassin のデフォルトの結果文字列を返します。デフォルトの判定とは、何のアクションもとらず通常どおり配信することを意味します。

1 - メッセージがスパムであると判明した場合は SpamAssassin の結果文字列を返します。スパムではない場合は、SpamAssassin のデフォルトの結果文字列を返します。デフォルトの判定とは、何のアクションもとらず通常どおり配信することを意味します。SpamAssassin の結果文字列は、次のように表示されます。True; 6.5 / 7.3

2 - モード 1 と同様。ただし、メッセージがスパムかどうかにかかわらず SpamAssassin の結果文字列が返される点で異なります。デフォルト判定または NULL 判定が返されることはなく、verdict オプションが使用されることはありません。

3 - メッセージがスパムであると判明した場合に SpamAssassin の結果文字列を返します。スパムではない場合は verdict オプションで指定された verdict 文字列を返します。SpamAssassin 結果文字列に対するアクションを制御するには、spamfilterX_verdict_ n オプションと spamfilterX_action_n オプションの一致ペアを使用します。verdict 文字列に対するアクションを制御するには、spamfilterX_string_action を使用します。

port

spamd が着信要求を待機するポート番号を指定します。

783 

USE_CHECK

1 - spamd CHECK コマンドを使って SpamAssassin スコアを返します。

0 - SYMBOLS コマンドを使って一致する SpamAssassin テストのスコアとリストを返すことができます。2.55 以前のバージョンの SpamAssassin でこのオプションを使うと、システムがハングアップしたりその他の問題が発生することがあります。前述の field を参照してください。

 

SOCKS_HOST

文字列です。中間にある SOCKS サーバーの名前を指定します。このオプションが指定されている場合、指定された SOCKS サーバーを介して ICAP 接続が確立され、直接には接続されません。 

"" 

SOCKS_PORT

中間にある SOCKS サーバーが動作しているポートを指定します。 

1080 

SOCKS_PASSWORD

SOCKS サーバーを介した接続を確立するために使用するパスワード (文字列) を指定します。ユーザー名およびパスワードが必要かどうかは、SOCKS サーバーの設定によって異なります。 

"" 

SOCKS_USERNAME

SOCKS サーバーを介した接続を確立するために使用するユーザー名 (文字列) を指定します。 

"" 

verdict

MODE 0 で使用される判定文字列を指定します。 

“” 

SpamAssassin の mode オプション

メッセージの処理後、SpamAssassin はメッセージがスパムかどうかを判定します。mode オプションを使用すると、判定を示すために返す文字列を指定できます。文字列の選択肢は、NULL、デフォルト、SpamAssassin の結果文字列、または verdict オプションで指定された verdict 文字列です。デフォルトの文字列とは、NULL、SpamAssassin の結果文字列、または verdict で指定された文字列ではなく、その他の設定不可能な結果文字列です。mode の動作の概要を次の表で説明します。

表 14–5 SpamAssassin の mode オプションに対応して返される文字列

verdict の設定

スパムかどうか 

mode=0

mode=1

mode=2

mode=3

verdict="" (設定なし)

はい 

NULL 

SpamAssassin の結果 

SpamAssassin の結果 

SpamAssassin の結果 

いいえ 

デフォルト 

デフォルト 

SpamAssassin の結果 

デフォルト 

verdict=文字列

はい 

verdict 文字列

SpamAssassin の結果 

SpamAssassin の結果 

SpamAssassin の結果 

いいえ 

デフォルト 

デフォルト 

SpamAssassin の結果 

verdict 文字列

1 列目は、verdict オプションが設定されているかどうかを示します。2 列目は、メッセージがスパムかどうかを示します。mode の列は、各モードに対応して返される文字列を示します。たとえば、verdict が設定されておらず mode が 0 に設定されている場合、メッセージがスパムでなければデフォルト文字列が返されます。verdictYO SPAM! に設定されていて mode が 0 に設定されている場合、メッセージがスパムであれば YO SPAM! が返されます。