Интеграция с MTA в качестве фильтра

В этом разделе

Настройка параметров Dr.Web MailD

Настройка параметров MTA

Примеры настроек для некоторых MTA

Этот вариант интеграции предполагает подключение Dr.Web MailD к серверу электронной почты в качестве внешнего фильтра проверки сообщений. Поддерживаются все почтовые серверы (Exim, Sendmail, Postfix и др.), использующие интерфейсы Milter, Spamd, Rspamd. При использовании почтового сервера Postfix также возможна работа в режиме SMTP (подробнее о принципах работы режима SMTP см. Интеграция с Dr.Web vxCube).

Настройка параметров Dr.Web MailD

1. При подключении через интерфейсы Milter, Spamd, Rspamd

Для интеграции Dr.Web MailD с сервером электронной почты отредактируйте в конфигурационном файле значения следующих параметров в секции [MailD]:

Параметры интеграции Dr.Web MailD с MTA. Выберите интерфейс дия интеграции (Milter, Spamd или Rspamd) и установите параметры подключения MTA и параметры проверки сообщений, которые будут поступать на проверку через этот интерфейс. У всех параметров Dr.Web MailD для интеграции с конкретным интерфейсом в имени имеется соответствующий префикс (Milter*, Spamd*  или Rspamd*).

1.<interface>Socket — UNIX- или сетевой сокет, который будет использован Dr.Web MailD для получения проверяемых сообщений от MTA через соответствующий интерфейс.

2.Параметры, ограничивающие длительность и ресурсоемкость проверки сообщений (ScanTimeout, HeuristicAnalysis, PackerMaxLevel, ArchiveMaxLevel, MailMaxLevel, ContainerMaxLevel, MaxCompressionRatio). Если детальная настройка не требуется, не изменяйте значения этих параметров.

3.Для более детальной настройки правил фильтрации сообщений (в зависимости от условий) отредактируйте текст процедуры на языке Lua для их обработки, заданной по умолчанию.

Общие параметры работы Dr.Web MailD при проверке сообщений. Для параметра TemplateContacts укажите адрес администратора почтового сервера UNIX, которому будут пересылаться сообщения с обнаруженными угрозами; для параметра ReportLanguages — язык, который использовать при генерации служебных почтовых сообщений.
В значении параметра RepackPassword укажите способ генерации паролей для защищенных архивов с угрозами, добавляемых в сообщение при перепаковке. Более подробное описание параметров см. в соответствующем разделе.

После внесения изменений в настройки перезапустите Dr.Web для почтовых серверов UNIX, выполнив команду:

# drweb-ctl reload

Также вы можете перезапустить демон управления конфигурацией Dr.Web ConfigD с помощью команды:

# service drweb-configd restart

При взаимодействии с MTA через интерфейс Milter Lua-скрипт возвращает MTA действие, котоое будет применено по отношению к сообщению.

При взаимодействии через интерфейс Spamd Lua-скрипт возвращает переменную report, в значении которой содержится слово слово SPAM или THREAT. Полученный результат обрабатывается в соответствии с настройками на стороне MTA (например, в ACL для Exim): либо сообщение будет отклонено, либо получателю будет отправлено предупреждение.

При взаимодействии через интерфейс Rspamd Lua-скрипт возвращает переменную action, которая будет иметь значение ADD_HEADER либо REJECT. Полученный результат обрабатывается в соответствии с настройками на стороне MTA (например, в ACL для Exim): либо к сообщению будет добавлен заголовок, после чего оно будет отправлено получателю, либо оно будет отклонено.

2. При подключении в режиме SMTP

Для интеграции Dr.Web MailD с сервером электронной почты отредактируйте в конфигурационном файле значения следующих параметров в секции [MailD]:

1.SmtpSocket — сокет, который будет использован Dr.Web MailD для получения проверяемых сообщений от MTA. Допускается использование UNIX-сокета или сетевого сокета.

2.SmtpSenderRelay — сокет MTA, который будет использован Dr.Web MailD для отправки прошедших проверку сообщений. Допускается использование UNIX-сокета или сетевого сокета.

3.Дополнительные параметры (таймаут, доступные протоколы подключения, вывод в отладочный журнал). Имеют префикс Smtp. Если детальная настройка не требуется, не изменяйте значения этих параметров.

4.Для более детальной настройки правил фильтрации сообщений (в зависимости от условий) отредактируйте текст процедуры на языке Lua для их обработки, заданной по умолчанию.

После внесения изменений в настройки перезапустите Dr.Web для почтовых серверов UNIX, выполнив команду:

# drweb-ctl reload

Также вы можете перезапустить демон управления конфигурацией Dr.Web ConfigD с помощью команды:

# service drweb-configd restart

Настройка параметров MTA

1. При подключении через интерфейсы Milter, Spamd, Rspamd

Для обеспечения взаимодействия между MTA и Dr.Web MailD необходимо внести следующие изменения в конфигурацию почтового сервера:

1.Указать интерфейс, через который MTA будет взаимодействовать с Dr.Web MailD при проверке сообщений (Milter, Spamd, Rspamd).

2.Задать параметры подключения MTA к Dr.Web MailD через выбранный интерфейс (используемый сокет должен совпадать с тем, который указан в параметре <interface>Socket для соответствующего интерфейса в настройках Dr.Web MailD).

3.Задать действие, которое MTA будет выполнять по результатам проверки сообщения.

После внесения изменений в настройки MTA следует перезапустить его.

2. При подключении в режиме SMTP

Для обеспечения взаимодействия между MTA Postfix и Dr.Web MailD необходимо внести следующие изменения в конфигурацию почтового сервера:

1.Задать параметры клиента для отправки сообщений на проверку в Dr.Web MailD.

2.Задать параметры MTA для отправки проверенных сообщений.

3.Задать параметры подключения MTA к Dr.Web MailD через указанный сокет.

Примеры настроек для некоторых MTA

Ниже приведены типовые примеры настроек для MTA Postfix, Sendmail, Exim и CommuniGate Pro для подключения Dr.Web MailD в качестве внешнего фильтра почтовых сообщений через интерфейсы Milter, Spamd и Rspamd, а также в режиме SMTP.

В приведенных ниже примерах необходимо заменить значения <сокет MailD>, <IP-адрес MailD> и <порт MailD> на параметры того сокета Dr.Web MailD, который задан в настройках Dr.Web MailD в параметре <interface>Socket, где <interface> — префикс в имени параметра, соответствующий выбранному для сопряжения с MTA интерфейсу, или в параметре SmtpSocket (в режиме SMTP). В режиме SMTP также необходимо заменить значение <сокет Postfix> на значение сокета Postfix, который задан в настройках Dr.Web MailD в параметре SmtpSocketRelay.

Например, если планируется интегрировать Dr.Web MailD с MTA через интерфейс Milter, с использованием сетевого сокета, при этом MTA и Dr.Web MailD работают оба на локальном узле, и Dr.Web MailD прослушивает порт 12345 для соединений через Milter, то это значение необходимо указать как значение параметра MilterSocket в секции [MailD] в файле конфигурации Dr.Web для почтовых серверов UNIX. В качестве переменной <сокет MailD> в настройках MTA следует использовать значение 127.0.0.1:12345, переменной <IP-адрес MailD> — адрес 127.0.0.1, а переменной <порт MailD> — значение 12345.

В настройках некоторых MTA необходимо предварить адрес сокета, используемого для взаимодействия с Dr.Web MailD, префиксом <тип>, указывающим тип используемого соединения (inet, inet6, unix).

1. Postfix

Milter:

Добавьте следующие строки в файл настроек MTA main.cf:

smtpd_milters = <тип>:<сокет MailD>
milter_content_timeout = 300s
milter_default_action = tempfail
milter_protocol = 2

К обязательным настройкам относятся параметры smtpd_milters и milter_protocol, остальные могут быть опущены.

 

В режиме SMTP:

Добавьте следующие строки в файл настроек MTA master.cf:

# Настройки клиента для отправки сообщений на проверку в MailD

scan      unix  -       -       n       -       10      smtp

       -o smtp_send_xforward_command=yes

       -o disable_mime_output_conversion=yes

       -o smtp_generic_maps=

 

# Настройки почтового сервера для отправки проверенных сообщений

<сокет Postfix> inet  n       -       n       -       10      smtpd

   -o content_filter=

   -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters

   -o smtpd_helo_restrictions=

   -o smtpd_client_restrictions=

   -o smtpd_sender_restrictions=

   -o smtpd_relay_restrictions=

   -o smtpd_recipient_restrictions=permit_mynetworks,reject

   -o mynetworks=127.0.0.0/8

   -o smtpd_authorized_xforward_hosts=127.0.0.0/8

Добавьте следующие строки в файл настроек MTA main.cf:

content_filter = scan:<сокет MailD>

receive_override_options = no_address_mappings

Если Dr.Web MailD и Postfix размещены на разных хостах, требуется заменить значения mynetworks и authorized_xforward_hosts на соответствующие хосту Dr.Web MailD.

2. Sendmail

Milter:

Добавьте в образец конфигурационного файла sendmail.mc следующую строку:

INPUT_MAIL_FILTER(`drweb-milter', `S=<сокет MailD>, F=T')

После изменения образца sendmail.mc преобразуйте его в действующий конфигурационный файл sendmail.cf с помощью любой из команд:

make -C /etc/mail
sendmailconfig
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

Все вышеприведенные команды предполагают, что файлы конфигурации Sendmail располагаются в каталоге /etc/mail.

3. Exim

Spamd:

Добавьте следующие строки в конфигурационный файл exim.conf:

spamd_address = <сокет MailD>
acl_smtp_data = acl_check_data
 
acl_check_data:
warn spam  = nobody:true
add_header = X-Spam_score: $spam_score\n\
X-Spam_score_int: $spam_score_int\n\
X-Spam_bar: $spam_bar\n\
X-Spam_report: $spam_report

deny message = This message scored $spam_score spam points.
spam = nobody:true
condition = ${if >{$spam_score_int}{10000}{true}{false}}

accept message = This message scored $spam_score spam points.
spam = nobody:true
condition = ${if >{$spam_score_int}{1000}{true}{false}}
remove_header = Subject
add_header = Subject: [SPAM] $rh_Subject

Rspamd:

Добавьте следующие строки в конфигурационный файл exim.conf:

spamd_address = <сокет MailD> variant=rspamd
acl_smtp_data = acl_check_data

acl_check_data:
# Add header fields
warn spam  = nobody:true
add_header = X-Spam_score: $spam_score\n\
 X-Spam_score_int: $spam_score_int\n\
 X-Spam_bar: $spam_bar\n\
 X-Spam_report: $spam_report

# Reject the message with proper description if Rspamd filter tells to do so
deny spam = nobody:true
message = ${extract{2}{:}{$spam_action}}
condition = ${if eq{${extract{1}{:}{$spam_action}}}{reject}}

# Accept the message otherwise
accept

Указанные примеры настроек предполагают использование Exim версии 4.6 или более поздней, собранного с опцией WITH_CONTENT_SCAN=yes.

4. CommuniGate Pro

Rspamd:

1.Для взаимодействия с CommunigatePro используется дополнительный модуль, который включен в репозиторий Dr.Web и устанавливается при помощи стандартного менеджера пакетов.

Для Debian, Ubuntu, Mint:

# apt-get install drweb-cgp-plugin

Для Red Hat Enterprise Linux и CentOS:

# yum install drweb-cgp-plugin

Для Fedora:

# dnf install drweb-cgp-plugin

2.Модуль будет установлен в каталог /opt/drweb.com/share/cgp/. По завершении установки перейдите в этот каталог и сделайте файл CgpDrweb_AS_AV.py исполняемым:

# cd /opt/drweb.com/share/cgp/
# chmod +x CgpDrweb_AS_AV.py

3.Выполните настройку CommuniGate Pro в веб-интерфейсе управления:

Перейдите Settings → General → Helpers и подключите модуль к CommuniGate Pro:

в разделе Content Filtering установите новый фильтр и переключите его в состояние Enabled,

укажите имя фильтра (например, CgpDrweb_AS_AV),

в параметре Program Path укажите путь к файлу скрипта (для GNU/Linux — /opt/drweb.com/share/cgp/CgpDrweb_AS_AV.py), а также опции, с которыми скрипт будет запускаться (-r — адрес и порт сокета, -u или --rspamd-unix-socket — путь к UNIX-сокету, --debug — включение режима отладки).

Чтобы раздел Helpers был доступен, в веб-интерфейсе CommunigatePro должен быть включен режим просмотра Advanced или Expert (см. в настройках: Preferences Interface).
Подробную информацию о возможных опциях можно просмотреть с помощью команды:

# ./CgpDrweb_AS_AV.py --help

Сохраните изменения.

Перейдите Settings → Mail → Rules.

Укажите имя нового правила (например, CgpDrweb_AS_AV) и нажмите Add Rule.

Выберите приоритет правила Highest и сохраните изменения.

Нажмите Edit справа от имени правила.

В выпадающем списке Data выберите Message Size, в поле Operation выберите less than, а в поле Parameter укажите значение 40960000.

В поле Action выберите значение ExternalFilter, в Parameter — имя фильтра, созданного ранее (CgpDrweb_AS_AV в данном примере).

Сохраните изменения.

Добавьте правило реакции на обнаружение угроз, укажите его имя (например, Drweb_threats) и нажмите Add Rule.

Укажите приоритет правила 5, сохраните изменения.

Нажмите Edit справа от имени правила. Дважды добавьте условия для правила:

·В выпадающем списке Data выберите Header Field, в поле Operation выберите is, а в поле Parameter укажите значение X-Spam-Action: reject.

·В выпадающем списке Data выберите Header Field, в поле Operation выберите is, а в поле Parameter укажите значение X-Spam-Symbol-1: threat*.

В поле Action выберите значение Reject with, в Parameter укажите текстовое сообщение (например, The message contains threat(s)).

Сохраните изменения.

Добавьте правило реакции на обнаружение угроз, укажите его имя (например, Drweb_spam) и нажмите Add Rule.

Укажите приоритет правила 5, сохраните изменения.

Нажмите Edit справа от имени правила. Добавьте условия для правила:

·в выпадающем списке Data выберите Header Field,

·в поле Operation выберите is,

·в поле Parameter укажите значение X-Spam-Action: tag.

В поле Action выберите значение Tag Subject, в Parameter укажите префикс, добавляемый к заголовку (например, [SPAM]).

Сохраните изменения.

4.Скопируйте содержимое приведенного ниже файла в текстовый документ и сохраните его под именем hook.lua.

-- Процедура проверки сообщений,
-- поступивших по протоколу Rspamd

function rspamd_hook(ctx)

-- Проверка сообщения на наличие угроз
if ctx.message.has_threat() then
  return {
    score = 900,
    threshold = 100,
    action = "reject",
    symbols = {
      {
        name = "threat",
        score = 900
      }
    }
  }
end

-- Проверка сообщения на спам
if ctx.message.spam.score > 100 then
  return {
    score = ctx.message.spam.score,
    threshold = 100,
    action = "tag",
    symbols = {
      {
        name = "spam",
        score = ctx.message.spam.score
      }
    }
  }
end

return {
   score = ctx.message.spam.score,
   threshold = 100,
   action = "accept",
   symbols = {
    {
      name = "The message is clean",
      score = 0
    }
   }
  }
end

5.Выполните:

# drweb-ctl cfset MailD.RspamdHttpSocket <адрес сокета>:<порт>
# drweb-ctl cfset MailD.RspamdHook <путь к хуку>

Если вы будете изменять код хука, то после внесения изменений потребуется перезапустить Dr.Web ConfigD:

# service drweb-configd restart