Messaging Server 支持使用常见且可免费获取的第三方病毒扫描程序 ClamAV,以检测邮件是否感染了病毒和特洛伊木马。可以使用 ClamAV 软件包随附的 freshclam 实用程序自动更新 ClamAV 用于检测新建病毒的病毒签名。
可以在 ClamAV 的 Web 站点上找到有关 ClamAV 的更多信息。
Messaging Server 中的 ClamAV 集成使用了作为 ClamAV 软件包一部分提供的 clamd 守护进程。clamd 是一个多线程进程,可在套接字上侦听处理邮件的请求。处理邮件之后,它将发回响应并关闭连接。未使用 ClamAV 安装中的客户端部分 clamdscan。此功能由名为 libclamav.so 的共享库完成,该库是 Messaging Server 的一部分。
libclamav.so 的装入方式与 Brightmail SDK 相同。
ClamAV 可以在其自己的单独系统上、单一系统部署中与 Messaging Server 相同的系统上或两层部署中与 MTA 相同的系统上运行。如果在 MTA 和消息存储之间使用本地邮件传输协议 (LMTP),则必须从 MTA 中调用过滤。不能从消息存储中调用过滤。如果在 MTA 和消息存储之间使用 SMTP,则既可以从 MTA 也可以从消息存储中调用过滤。
如果要使用运行了 ClamAV 的多个服务器,则必须在这些服务器的前面使用负载平衡器。配置 MTA,使其仅有一个 ClamAV 服务器地址。
其他注意事项。
ClamAV 是免费提供的。可以在 http://clamav.net 上找到该软件和文档。
可以为用户、域或通道启用与 MTA 集成的 ClamAV。
ClamAV 软件包提供一个用于定期更新病毒签名的实用程序。该实用程序名为 freshclam。有关更多信息,请参阅 ClamAV 软件包文档。
Messaging Server 2006Q4 及更高版本在默认情况下包含 libclamav.so 库。
可执行以下步骤来部署 ClamAV:
安装和配置 ClamAV。请参阅 ClamAV 软件文档,以获得有关安装和配置的信息。另请参见 14.6.5 ClamAV 选项。
装入和配置 ClamAV 客户端库。此操作包括向 MTA 指定客户端库 libclamav.so 和配置文件(必须创建此文件)。请参见14.2.1 装入和配置垃圾邮件过滤软件客户端库。
指定要进行垃圾邮件过滤的邮件。用户、域或通道均可以过滤邮件。请参见14.2.2 指定要过滤的邮件。
指定要对病毒邮件执行的操作。请参见14.2.3 指定要对垃圾邮件执行的操作。
根据需要设置其他过滤器配置参数。请参见 14.6.5 ClamAV 选项
以下示例将丢弃所有被 ClamAV 检测到包含病毒或特洛伊木马的邮件。未使用结论字符串。
创建 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 结果字符串作为结论。
修改 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 操作。
指定要过滤的邮件。
要过滤传入本地消息存储的所有邮件,请通过在 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 |
重新编译配置并重新启动服务器。
只需要重新启动 MTA。无需执行 stop-msg。
# imsimta cnbuild # imsimta restart |
启动 clamd 守护进程。
要测试 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 |
ClamAV 选项文件是典型的邮件服务器样式的选项文件,由多个 option=value 格式的行组成。必须设置的一个选项为 HOST。必须将其设置为运行 clamd 的系统的名称。即使 clamd 正在本地主机上运行,也必须设置此选项。
下面列出了可用于此选项文件的更多其他选项。
表 14–7 ClamAV 选项
选项 |
说明 |
默认值 |
|
---|---|---|---|
DEBUG |
从 ClamAV 界面模块启用或禁用调试输出。(clamd 自身的调试输出由 clamd 命令行上的选项控制。)值越大,生成的调试输出越多。0 不生成任何输出。1 提供基本调试。2 增加来自 clamd 的 TCP 通信日志记录。 |
0 |
|
FIELD |
指定 ClamAV 结果字符串前缀。通常,ClamAV 结果字符串看起来类似以下条目之一:
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 选项指定的结论字符串。 |
0 |
|
PORT |
指定运行 clamd 的端口。 |
3310 |
|
SOCKS_HOST |
指定中间 SOCKS 服务器的名称。如果指定了此选项,则间接通过指定的 SOCKS 服务器建立 clamd 连接。 |
3310 |
|
SOCKS_PORT |
指定运行中间 SOCKS 服务器的端口。 |
1080 |
|
SOCKS_PASSWORD |
指定通过 SOCKS 服务器建立连接所使用的密码。是否需要用户名/密码取决于 SOCKS 服务器配置。 |
"" |
|
SOCKS_USERNAME |
指定通过 SOCKS 服务器建立连接所使用的用户名。 |
"" |
|
VERDICT |
指定模式 0 和 3 中使用的结论字符串。 |
"" |