Before-queue интеграция с использованием динамически подгружаемой библиотеки
04 июля 2024
ID 43915
Для использования метода интеграции "до передачи сообщения в очередь" (before-queue интеграции) при компиляции динамически подгружаемой библиотеки из исходных кодов требуется указать, что необходима поддержка dlfunc. В некоторых дистрибутивах Linux в хранилище содержатся скомпилированные версии Exim, в других случаях требуется ручная компиляция.
В случае ручной компиляции требуется добавить в Makefile следующие строки:
EXPAND_DLFUNC=yes
EXTRALIBS= -export-dynamic
При before-queue интеграции с использованием динамически подгружаемой библиотеки фильтр должен передавать сообщения для проверки модулю Scan Logic по сокету ServiceSocket
. Этот сокет требуется задать в конфигурации программы.
В зависимости от дистрибутива операционной системы вам требуется внести изменения в один или несколько конфигурационных файлов почтового сервера Exim. Например, в Debian и Ubuntu почтовый сервер Exim может конфигурироваться как с помощью нескольких файлов в директории /etc/exim/conf.d, так и с помощью одного файла.
Чтобы выполнить before-queue интеграцию Kaspersky Security 8 для 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:
(или строки, содержащей другой список контроля доступа)добавьте следующие строки:
#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-bit) - /usr/local/lib/kaspersky/klms/libklms-exim.so,
- для FreeBSD (64-bit) - /usr/local/lib/kaspersky/klms/compat64/libklms-exim.so,
- для Linux (32-bit) - /opt/kaspersky/klms/lib/libklms-exim.so,
- для Linux (64-bit) - /opt/kaspersky/klms/lib64/libklms-exim.so.
- Скомпилируйте модуль
.so
согласно параметрам вашей операционной системы (опционально). - Добавьте пользователя
kluser
к группе, к которой принадлежит процессexim
. - В файле настроек фильтров, klms_filter.conf, в секции
[global]
установите значениеfalse
для параметраheader-guard
. - Откройте файл /var/opt/kaspersky/klms/installer.dat (для Linux) или /var/db/kaspersky/klms/installer.dat (для FreeBSD).
- Добавьте в файл следующую строку:
EXIM_INTEGRATION_TYPE=dlfunc
- Перезапустите службу klms.
- Перезапустите почтовый сервер Exim.
Пакет установки Kaspersky Security 8 для 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=<path to exim headers> --with-boost=<path to boost> --with-libevent=<path to libevent>.
- Выполните следующую команду:
# make
.
В текущей директории появится файл libklms-exim.so.