使用动态连接执行前端队列集成
2023年8月21日
ID 43915
要使用“前端队列”集成方法,您必须指定通过源代码编译相应动态库时需要 dlfunc 支持。某些 Linux 分发的存储库已包含编译的 Exim 版本,在其他情况下需要手动编译。
如果手动编译,您必须将以下行添加到 Makefile:
EXPAND_DLFUNC=yes
EXTRALIBS= -export-dynamic
当使用通过动态库进行前端队列集成时,过滤器必须通过 ServiceSocket
将要扫描的邮件传输给 ScanLogic。此套接字必须在配置程序时指定。
根据操作系统的具体分发,您必须修改 Exim 邮件服务器的一个或多个配置文件。例如,在 Debian 和 Ubuntu 中,Exim 邮件服务器配置可能包含 /etc/exim/conf.d 目录下的几个文件,或仅包含一个文件。
使用动态加载的库执行 Kaspersky Security 8 for Linux Mail Server 与 Exim 的前端队列列集成:
- 确保 Exim 邮件服务器支持基于 dlfunc 的内容过滤。为此,请运行
exim-bV
命令。以下为积极结果:
Expand_dlfunc
。 - 对 Exim 配置文件进行备份。
- 修改
acl_smtp_data
的访问控制列表。为此,在 Exim 配置文件中查找以下行:acl_smtp_data = acl_check_data
(此行可能包含其他访问控制列表,而不是acl_check_data
)并在行
acl_check_data:
(or line containing another access control list)后面添加以下行:
#klms-filter-begin
warn set acl_m_klms_headers =
set acl_m_klms_result =
set acl_m_klms_answer = ${dlfunc{
LIBDIR/libklms-exim.so}{scan}{${spool_directory}/input}}
defer condition = ${if eq {$acl_m_klms_answer}{}{yes}{no}}
log_message = LMS check failed (empty answer)
message = Temporary local problem - please try later
defer condition = ${if match {$acl_m_klms_answer}{\N^451\N}{yes}{no}}
log_message = LMS check defer: ${if match {$acl_m_klms_answer} \
{\N^451 Mail processing aborted(.+\n?.*\n)*$\N}{$1}{}}\\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
message = Temporary local problem - please try later
defer condition = ${if match {$acl_m_klms_answer}{\N^452\N}{yes}{no}}
log_message = LMS check defer: ${if match{$acl_m_klms_answer} \
{\N^451 Mail processing timed out(.+\n?.*\n)*$\N}{$1}{}}\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
message = Temporary local problem - please try later
deny condition = ${if match {$acl_m_klms_answer}{\N^550\N}{yes}{no}}
log_message = LMS check reject: ${if match {$acl_m_klms_answer} \
{\N^550 Rejected by malware filter(.+\n?.*\n)*$\N}{$1}{}}\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
deny condition = ${if match {$acl_m_klms_answer}{\N^554\N}{yes}{no}}
log_message = LMS check reject: ${if match {$acl_m_klms_answer} \
{\N^554 Mail processing failed(.+\n?.*\n)*$\N}{$1}{}}\
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}\
, temporary file $acl_m_klms_tempfile
message = ${if match {$acl_m_klms_answer} \
{\N^554 Mail processing failed(.+\n?.*\n)*$\N} \
{Mail processing failed:$1}{}}
warn condition = ${if match {$acl_m_klms_answer}{\N^250\N}{yes}{no}}
logwrite = LMS check accept: ${if match {$acl_m_klms_answer} \
{\N^250 (.+)$\N}{$1}{}} \
${if eq {$acl_m_klms_result}{}{}{, result is \
'$acl_m_klms_result\'}}
set acl_m_klms_answer =
warn condition = ${if eq {$acl_m_klms_answer}{}{no}{yes}}
logwrite = LMS check: $acl_m_klms_answer
#klms-filter-end
其中,LIBDIR – libklms-exim.so 库的路径:
- 对于 FreeBSD(32 位)- /usr/local/lib/kaspersky/klms/libklms-exim.so,
- 对于 FreeBSD(64 位)- /usr/local/lib/kaspersky/klms/compat64/libklms-exim.so,
- 对于 Linux(32 位)- /opt/kaspersky/klms/lib/libklms-exim.so,
- 对于 Linux(64 位)- /opt/kaspersky/klms/lib64/libklms-exim.so。
- 根据您的操作系统设置编译
.so
模块(可选)。 - 将用户
kluser
添加到exim
进程所属的组。 - 在
[global]
区域中,为 klms_filter.conf 过滤器设置文件的header-guard
设置设置false
值。 - 打开文件 /var/opt/kaspersky/klms/installer.dat(Linux 环境下)或 /var/db/kaspersky/klms/installer.dat(FreeBSD 环境下)。
- 在文件中添加下列行:
EXIM_INTEGRATION_TYPE=dlfunc
- 重新启动 klms 服务。
- 重新启动 Exim 邮件服务器。
Kaspersky Security 8 for Linux Mail Server 安装包为程序支持的所有操作系统都包含一个已编译的动态加载 dlfunc 库。dlfunc 库所需的源文件位于目录 /opt/kaspersky/klms/share/src/dlfunc(Linux 环境下)或 /usr/local/share/klms/src/dlfunc(FreeBSD 环境下)下。
在某些情况下,需要手动编译。
执行动态加载的 dlfunc 库的手动编译:
- 安装 Exim 邮件服务器的源库。
- 安装 libevent 库(版本 2.0.10 或更高)。
- 安装 boost 库(版本 1.47.0 或更高)。
- 更改到 /opt/kaspersky/klms/share/src/dlfunc 目录(在 Linux 上)或 /usr/local/share/klms/src/dlfunc 目录(在 FreeBSD 上)。
- 运行以下命令:
./configure --with-exim=<exim 标头的路径> --with-boost=<boost 的路径> --with-libevent=<libevent 的路径>。
- 运行以下命令:
# make
。
libklms-exim.so 文件将出现在当前文件夹中。