Before-queue интеграция с использованием динамически подгружаемой библиотеки

21 августа 2023

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 с использованием динамически подгружаемой библиотеки, выполните следующие действия:

  1. Убедитесь, что почтовый сервер Exim поддерживает функцию контентной фильтрации dlfunc. Для этого выполните команду exim -bV.

    Положительным ответом является результат: Expand_dlfunc.

  2. Сделайте резервную копию конфигурационных файлов Exim.
  3. Внесите изменения в список контроля доступа для 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.
  4. Скомпилируйте модуль .so согласно параметрам вашей операционной системы (опционально).
  5. Добавьте пользователя kluser к группе, к которой принадлежит процесс exim.
  6. В файле настроек фильтров, klms_filter.conf, в секции [global] установите значение false для параметра header-guard.
  7. Откройте файл /var/opt/kaspersky/klms/installer.dat (для Linux) или /var/db/kaspersky/klms/installer.dat (для FreeBSD).
  8. Добавьте в файл следующую строку:

    EXIM_INTEGRATION_TYPE=dlfunc

  9. Перезапустите службу klms.
  10. Перезапустите почтовый сервер Exim.

Пакет установки Kaspersky Security 8 для Linux Mail Server содержит скомпилированную динамически подгружаемую библиотеку dlfunc для всех поддерживаемых программой операционных систем. Необходимые исходные файлы для библиотеки dlfunc находятся в директории /opt/kaspersky/klms/share/src/dlfunc (для Linux) или в директории /usr/local/share/klms/src/dlfunc (для FreeBSD).

Но в некоторых случаях требуется ручная компиляция.

Чтобы выполнить ручную компиляцию динамически подгружаемой библиотеки dlfunc, выполните следующие действия:

  1. Установите исходные библиотеки почтового сервера Exim.
  2. Установите библиотеку libevent версии 2.0.10 или выше.
  3. Установите библиотеку boost версии 1.47.0 или выше.
  4. Перейдите в директорию /opt/kaspersky/klms/share/src/dlfunc (для Linux) или в директорию /usr/local/share/klms/src/dlfunc (для FreeBSD).
  5. Выполните команду ./configure --with-exim=<path to exim headers> --with-boost=<path to boost> --with-libevent=<path to libevent>.
  6. Выполните следующую команду: # make.

В текущей директории появится файл libklms-exim.so.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!