Уважаемые пользователи!
С 17 февраля 2026 года будет прекращена поддержка КLMS 8. «Лаборатория Касперского» рекомендует перейти на решение Kaspersky Secure Mail Gateway 3.0. Воспользуйтесь пошаговой инструкцией по экспорту параметров и настройке.
Before-queue интеграция с использованием динамически подгружаемой библиотеки
07 февраля 2025
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-beginwarn 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 laterdefer 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_tempfilemessage = Temporary local problem - please try laterdefer 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_tempfilemessage = Temporary local problem - please try laterdeny 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_tempfiledeny 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_tempfilemessage = ${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.