Sun Java System Messaging Server 6.3 管理指南

14.6 使用 ClamAV

Messaging Server 支持使用常见且可免费获取的第三方病毒扫描程序 ClamAV,以检测邮件是否感染了病毒和特洛伊木马。可以使用 ClamAV 软件包随附的 freshclam 实用程序自动更新 ClamAV 用于检测新建病毒的病毒签名。

可以在 ClamAV 的 Web 站点上找到有关 ClamAV 的更多信息。

14.6.1 ClamAV/Messaging Server 操作原理

Messaging Server 中的 ClamAV 集成使用了作为 ClamAV 软件包一部分提供的 clamd 守护进程。clamd 是一个多线程进程,可在套接字上侦听处理邮件的请求。处理邮件之后,它将发回响应并关闭连接。未使用 ClamAV 安装中的客户端部分 clamdscan。此功能由名为 libclamav.so 的共享库完成,该库是 Messaging Server 的一部分。

libclamav.so 的装入方式与 Brightmail SDK 相同。

14.6.2 ClamAV 要求和使用注意事项

ClamAV 可以在其自己的单独系统上、单一系统部署中与 Messaging Server 相同的系统上或两层部署中与 MTA 相同的系统上运行。如果在 MTA 和消息存储之间使用本地邮件传输协议 (LMTP),则必须从 MTA 中调用过滤。不能从消息存储中调用过滤。如果在 MTA 和消息存储之间使用 SMTP,则既可以从 MTA 也可以从消息存储中调用过滤。

如果要使用运行了 ClamAV 的多个服务器,则必须在这些服务器的前面使用负载平衡器。配置 MTA,使其仅有一个 ClamAV 服务器地址。

其他注意事项。

14.6.3 部署 ClamAV

可执行以下步骤来部署 ClamAV:

Procedure使用 ClamAV 丢弃被病毒或特洛伊木马感染的电子邮件

以下示例将丢弃所有被 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 库中启用调试。

    hostport 分别指定运行 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 病毒关键字来更改 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_debugslave_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 格式的行组成。必须设置的一个选项为 HOST。必须将其设置为运行 clamd 的系统的名称。即使 clamd 正在本地主机上运行,也必须设置此选项。

下面列出了可用于此选项文件的更多其他选项。

表 14–7 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 

ClamAV 插件必须先在内存中缓冲邮件,然后再将邮件发送到 ClamAV,这是由 clamdscan/clamd 接口的特性所决定的。内存缓冲区大小由此选项控制。默认值为 1,048,576 个字符。长度超过此值的邮件将会被截断,而不会完整地发送到 ClamAV。为了确保完整地扫描每个邮件,此值应反映 MTA 将接受的最大邮件大小。减小此值可能有助于加快病毒扫描速度,但可能会允许未检测的病毒通过。

1048576 

MODE

控制 ClamAV 结果向结论信息的转换。可以使用四种不同的模式: 

0 - 如果发现邮件包含病毒,则返回 VERDICT 选项指定的结论字符串;否则,将返回默认结论。如果 VERDICT 选项为空或未指定,则返回空结论。

1 - 如果发现邮件包含病毒,则返回 ClamAV 结果作为结论;否则,将返回默认结论。 

2 - 无条件返回 ClamAV 结果字符串作为结论;不返回默认结论或空结论,并且从不使用 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

指定模式 0 和 3 中使用的结论字符串。 

""