Sun Java System Messaging Server 6.3 管理ガイド

14.6 ClamAV の使用

Messaging Server では、ウイルスやトロイの木馬に感染したメッセージを検出するために、広く普及していて無料で使用可能な他社のウイルススキャナである ClamAV の使用をサポートしています。新しく作成されたウイルスを検出するために ClamAV で使用されるウイルスシグニチャーは、ClamAV ソフトウェアパッケージに付属する freshclam ユーティリティーを使用することで、自動的に更新することができます。

ClamAV の詳細は、ClamAV の Web サイトを参照してください。

14.6.1 ClamAV/Messaging Server の動作方式

Messaging Server に統合された ClamAV は、clamd デーモンを利用します。このデーモンは、ClamAV パッケージに含まれています。clamd は、メッセージを処理する要求をソケットで待機するマルチスレッドプロセスです。メッセージを処理したら、応答を送り返し、接続を閉じます。ClamAV インストールによるクライアント部分、clamdscan は、使用されません。この機能は、Messaging Server の一部である共有ライブラリ libclamav.so によって行われます。

libclamav.so は、Brightmail SDK の読み込みと同じように読み込まれます。

14.6.2 ClamAV の要件と使用法の考慮

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

ClamAV が稼働しているサーバーのファームを使用する場合は、その前でロードバランサを使用してください。MTA は、ClamAV サーバー用に 1 つのアドレスのみを持つよう設定されます。

その他の考慮事項は次のとおりです。

14.6.3 ClamAV の配備

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

ProcedureClamAV を使用して、ウイルスやトロイの木馬に感染した電子メールを破棄する

次の例では、ClamAV によって検出されたウイルスやトロイの木馬が含まれることが判明したすべてのメッセージを破棄します。判定文字列は使用されません。

  1. ClamAV 構成ファイルを作成します。

    このファイルの名前と場所は、手順 2 で指定します。推奨される名前は clamav.opt です。このファイルには、次に示す行が含まれます。


    # more /opt/SUNWmsgsr/config/clamav.opt
    ! ClamAV Settings
    debug=1
    host=127.0.0.1
    port=3310
    mode=1

    debug=1 は、ClamAV ライブラリでデバッグをオンにします。

    host および port は、clamd が実行されているシステムの名前と、clamd が着信要求を待機するポートです。

    mode=1 は、ウイルスに感染した電子メールが検出されると、ClamAV プラグインによって ClamAV 結果文字列が判定として返されることを指定します。

  2. option.dat ファイルを変更します。

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


    ! ClamAV settings 
    spamfilter2_config_file=/opt/SUNWmsgsr/config/clamav.opt 
    spamfilter2_library=/opt/SUNWmsgsr/lib/libclamav.so 
    spamfilter2_string_action=data:,require ["jettison"]; jettison;

    spamfilter2_config_file は、ClamAV 構成ファイルを指定します。

    spamfilter2_library は、ClamAV 共有ライブラリを指定します。

    spamfilter2_string_action は、ウイルスに感染したメッセージに対して実行する Sieve アクションを指定します。

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

    ローカルメッセージストアに届くすべてのメッセージをフィルタ処理するには、ims-ms チャネルの destinationspamfilterXoptin virus を追加して 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 destinationspamfilter2optin virus 
    ims-ms-daemon
  4. 設定をコンパイルしなおし、サーバーを再起動します。

    MTA を再起動するだけでかまいません。stop-msg を実行する必要はありません。


     # imsimta cnbuild
    # imsimta restart
  5. clamd デーモンを起動します。

14.6.4 ClamAV のテスト

ClamAV をテストするには、clamav.opt ファイルで debug=1 を設定しておきます。imta.cnf. でチャネル固有の master_debug または slave_debug を有効にしておく必要はありません。次に、EICAR ウイルス文字列 (http://www.eicar.org/anti_virus_test_file.htm) が含まれる添付ファイルをテストユーザーに送信します。この文字列は、実際にはウイルスが添付されていないのに、ウイルスに感染している電子メールであるとウイルススキャナが認識するトリガーとなるように設計されています。


X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

テストログを確認します。msg-svr-base/data/log/tcp_local_slave.log* ファイルには次のような行があるはずです。


10:39:00.85: ClamAV callout debugging enabled; 
config /opt/SUNWmsgsr/config/clamav.opt
10:39:00.85: IP address 127.0.0.1 specified 
10:39:00.85: Port 3310 selected 
10:39:00.85: Mode 1 selected 
10:39:00.85: Field "Virus-Test: " selected 
10:39:00.85: Verdict "" selected 
10:39:00.85: Initializing ClamAV message context
 ... 
10:39:00.85: Creating socket to connect to clamd server 
10:39:00.85: Binding clamd socket 
10:39:00.85: Connecting to clamd server 
10:39:00.85: Sending ClamAV STREAM request 
10:39:00.85: Retrieving ClamAV STREAM response 
10:39:00.85: STREAM response: PORT 2003 
10:39:00.85: Creating socket to connect to clamd server data port 
10:39:00.85: Binding clamd data socket 
10:39:00.85: Connecting to clamd server data port 
10:39:00.85: Sending ClamAV the message 
10:39:00.85: Closing ClamAV data connection 
10:39:00.85: Reading ClamAV result 
10:39:00.87: Result line: stream: Eicar-Test-Signature FOUND 
10:39:00.87: Scan result: Message is infected 
10:39:00.87: Verdict line: Virus-Test: True ; Eicar-Test-Signature 
10:39:00.87: Closing connection to ClamAV 
10:39:00.87: Mode 1 verdict of Virus-Test: True ; Eicar-Test-Signature 
10:39:00.87: Mode 1 verdict of Virus-Test: True ; Eicar-Test-Signature
 ... 
10:39:00.87: Freeing ClamAV message context  

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


452 4.4.5 Error writing message temporaries - Error 
connecting to ClamAV server

14.6.5 ClamAV オプション

ClamAV オプションファイルは、option=value という形式の行で構成されている、典型的なメッセージングサーバー形式のオプションファイルです。必須のオプションの 1 つが HOST です。clamd が稼働しているシステムの名前を設定する必要があります。clamd がローカルホストで動作していても、このオプションを設定する必要があります。

このオプションファイルで利用可能なその他のオプションの詳細を次に示します。

表 14–8 ClamAV オプション

オプション 

説明 

デフォルト 

DEBUG 

ClamAV インタフェースモジュールからのデバッグ出力を有効または無効にします。clamd 自体からのデバッグ出力は、 clamd コマンド行のオプションによって制御されます。値を大きくすると、生成されるデバッグ出力が増加します。0 は出力を生成しません。1 は基本的なデバッグを行います。2 は、clamd からの TCP トラフィックをログに記録します。

FIELD 

ClamAV 結果文字列のプレフィックスを指定します。ClamAV 結果文字列は、一般に次のいずれかのようになります。 


Virus-Test: False 
Virus-Test: True ; Worm.Mydoom.I

FIELD オプションは、結果の Virus-Test 部分の変更方法を提供します。": " も、空の FIELD 値が指定された場合は削除されます。

“Virus-Test” 

MESSAGE_BUFFER_SIZE

clamdscan/clamd インタフェースの性質上、ClamAV プラグインは ClamAV にメッセージを送信する前に、メッセージをメモリーにバッファーする必要があります。メモリーバッファーのサイズは、このオプションで制御します。デフォルトは 1,048,576 文字です。これよりも長いメッセージは切り詰められるため、メッセージは完全な形で ClamAV に送信されません。各メッセージの全体がスキャンされるようにするため、この値は、MTA で受け入れられる最大メッセージサイズを考慮するようにしてください。この値を小さくすると、ウイルススキャンにかかる時間を短くすることができる場合もありますが、ウイルスを見逃してしまう可能性もあります。

1048576 

MODE

ClamAV の結果から判定情報への変換を制御します。4 種類のモードを利用できます。 

0 - メッセージにウイルスが含まれていることが検出された場合は、VERDICT オプションで指定された判定文字列を返します。そうでない場合は、デフォルトの判定を返します。VERDICT オプションが空か未指定の場合は、NULL の判定が返されます。

1 - メッセージにウイルスが含まれていることが判明した場合は、ClamAV の結果を判定として返します。そうでない場合は、デフォルトの判定を返します。 

2 - ClamAV 結果文字列を無条件に返します。デフォルト判定または NULL 判定が返されることはなく、VERDICT オプションが使用されることはありません。

3 - メッセージにウイルスが含まれていると判明した場合は ClamAV の結果文字列を返します。ウイルスが含まれていない場合は VERDICT オプションで指定された判定文字列を返します。

PORT

clamd が稼働しているポートを指定します。

3310 

SOCKS_HOST

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

3310 

SOCKS_PORT

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

1080 

SOCKS_PASSWORD

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

"" 

SOCKS_USERNAME

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

"" 

VERDICT

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

""