Формат Правил

Формат Правил

Каждое Правило обработки писем записывается в виде строки и имеет вид:

CONDITION stop|cont [SETTINGS]

где:

CONDITION – условие, которое должно быть истинно для некоторого письма, чтобы при его проверке использовались настройки и/или действия, указанные в части SETTINGS.

SETTINGS – настройки и/или действия, которые нужно выполнить при проверке письма, если для него оказалось истинным условие CONDITION.

Обратите внимание, что раздел SETTINGS в Правиле может отсутствовать. Это может быть в двух случаях:

1.Если Правило не несет в себе специфических настроек, а является только "правилом-фильтром";

2.Если используемые для проверки письма настройки загружаются прямо в процессе выполнения проверке CONDITION из внешнего источника (используется Lookup из LDAP, БД, файл и т.п.).

Директива, стоящая после CONDITION, определяет, какие действия следует выполнить, если условие в CONDITION оказалось истинным для письма:

ostop – прекратить поиск подходящих Правил ниже;

ocont – продолжить просматривать список Правил вниз.

Если условие CONDITION для некоторого письма оказалось ложным, то указанная после него директива не оказывает никакого влияния: будет продолжен просмотр списка Правил.

warning

Если при записи Правило получается слишком длинным и не помещается в одну строку, в конце строки ставится знак "\", и описание Правила продолжается на следующей строке.

Условия (CONDITION) Правил

Каждое из условий CONDITION представляется в виде логической комбинации единичных логических термов:

BOOL_TERM [<log_op> BOOL_TERM]

где BOOL_TERM – логический терм, либо принимающий в значение «ложь» или «истина» в результате проверки некоторого параметра письма (задается выражением [param_name:][value]), либо тождественно равный true или false. Формально логический терм представляется в виде:

<[param_name:][value]> | true | false

param_name - имя параметра, а value - его значение.

warning

Между именем параметра и значением (т.е. сразу после двоеточия) в логическом терме не должно быть пробелов.

Названия параметров, которые могут быть использованы в условиях Правил, представлены в таблице:

Имя параметра

Описание

Тип значения

any

Либо адрес отправителя, либо адрес получателя сообщения.

Пример:

any:regex:*@domain.com

Или отправитель, или получатель сообщения должны иметь адрес в домене domain.com.

from,

sender

Адрес отправителя сообщения.

Пример:

from:admin@domain.com

Oтправителем письма должен быть владелец адреса admin@domain.com.

to,

rcpt

Адрес получателя сообщения.

Пример:

"rcpt:ldap:///??sub?(mail=$s)"

Все получатели письма должны быть найдены в LDAP по полю mail.

block

Имя объекта или причины, вызвавшей блокировку письма некоторым подключаемым модулем.

Блокировкой письма считается применение к нему каким-либо модулем действия reject. В этом случае модуль, заблокировавший письмо, возвращает список строк, описывающих причины блокировки (их может быть больше одной). Например, модуль Drweb, в случае если был обнаружен вирус (или другая известная угроза) вернет его имя. Если блокировка была вызвана по другой причине, (например, по выполнению реакции на событие SkipObject), то он возвращает полное строки конфигурации "<параметр>: <значение>", выполнение которой привело к блокировке письма. Например, модуль HeadersFilter может возвращать сообщение, что письмо было заблокировано по причине отсутствия заголовка <header>, указанного в параметре MissingHeader, в следующем виде: "MissingHeader: <header>".

Примеры:

1) block:file:viruses.txt

Имя объекта или причины, вызвавшей блокировку письма некоторым подключаемым модулем, должно быть в списке, взятом из файла (подразумевается, что это имя некоторой найденной угрозы).

2) "block:regex:.*skip.*"

Описание причины, вызвавшей блокировку письма некоторым подключаемым модулем, должно содержать подстроку "skip" (например, выполнение реакции на событие SkipObject).

client-ip

IP-адрес отправителя письма (если получение информации об IP-адресе отправителя было задано в настройках компонента Maild core).

Обратите внимание, что в качестве аргумента нельзя использовать формат CIDR.

Пример:

client-ip:127.0.0.1

Письмо должно быть отправлено с локальной машины.

client-port

Порт клиента, отправившего письмо.

Пример:

client-port:1234

Письмо должно быть отправлено с порта 1234.

Номер порта

server-unix-socket

Абсолютный путь к файлу UNIX-сокета, на котором было принято соединение.

Пример:

server-unix-socket:/var/drweb/ipc/sock1

Путь к UNIX-сокету

server-ip

IP-адрес интерфейса, на котором Receiver принял письмо.

Обратите внимание, что в качестве аргумента нельзя использовать формат CIDR.

server-port

Порт сервера, на котором было принято соединение

Номер порта

id

Уникальный идентификатор компонета Receiver, принявшего письмо (если был задан в настройках компонента Receiver).

Строка-идентификатор

auth

Прошел ли авторизацию клиент, отправивший письмо.

Обратите внимание, что параметр не имеет аргумента.

Пример:

auth:

Отсутствует

size

Размер сообщения.

Перед размером можно указывать оператор сравнения:

!= – Не равно.

== – Равно (совпадает).

< – Меньше, чем.

> – Больше, чем.

<= – Меньше или равно.

>= – Больше или равно.

Если отношение не указано, то по умолчанию предполагается, что это <=.

Размер указывается в килобайтах, мегабайтах или гигабайтах, для чего после числа указывается соответствующий суффикс (k, m, g).

Пример:

"size:>=10m"

Размер или оператор сравнения

score

Счет сообщения.

Перед размером можно указывать оператор сравнения. Если оператор не указан, то по умолчанию предполагается, что это <=.

Пример:

"score:!=1000"

Число или оператор сравнения

Обратите внимание, что:

Если имя параметра в логическом терме не указано, то по умолчанию используется параметр any (например, запись user@domain.com stop <some_settings> эквивалентна Правилу any:user@domain.com stop <some_settings>).

Если в значении параметра содержатся пробелы или символы '|', '&', ')', '(' '!' '=' ',' то его надо заключать в кавычки. Чтобы задать символ '"' (кавычка) внутри кавычек, его надо предварять (экранировать) знаком '\'.

Если в Правиле нужно использовать пустое значение адреса, то следует использовать запись вида "", а использовать угловые скобки (<>) в данном случае нельзя (например from:"" stop scan=no).

В качестве логических операторов используются AND ('&&'), OR ('||'), NOT ('!'). При помощи них можно составлять сложные условия из простых логических термов. Также можно использовать скобки для управления старшинством логических операций. Минимально условие правила состоит из одного логического терма.

Пример 1:

true stop <some_settings>

Настройки <some_settings> будут применяться всегда, если до этого Правила дошла очередь при проверке (условие тождественно истинно для любого письма). Более никакие нижележащие Правила применены не будут, т.к. будет выполнена директива stop.

Пример 2:

sender:test && "size:>=10k" cont scan=no

Данное условие будет истинным, если отправителем письма является "test" и размер письма больше 10 килобайт. В этом случае сообщение будет пропущено без проверки. Обратите внимание на использование кавычек: они тут необходимы.

Пример 3:

!("rcpt:ldap:///??sub?(mail=$s)" OR auth:) stop

Данное Правило сработает, если хотя бы один получатель письма, взятый из TO: не найден в LDAP по полю mail и отправитель не является авторизованным.

Настройки (SETTINGS) Правил

Часть SETTINGS правил имеет вид перечисления пар Параметр = Значение:

[plugin_name/]param = value, [plugin_name/]param = value ...

где plugin_name (если указано) – название подключаемого модуля, к которому относится параметр, param – название параметра, а value – его значение.

Если имя модуля не указано, то это означает, что переопределяется значение параметра из основного конфигурационного файла Dr.Web MailD (имя секции не указывается). Например, указание в Правиле директивы AdminMail=root@domain означает переопределение для данного письма параметра AdminMail в секции [Notifier] конфигурационного файла Dr.Web MailD.

В перечислении должно присутствовать не менее одной пары Параметр = Значение. Элементы списка разделяются запятыми, поэтому, если в значении value содержится запятая, то перед ней следует поставить обратный слэш "\" (экранировать).

Пример 1:

sender:a@drweb.com cont headersfilter/Action = pass, vaderetro/max_size = 100k

При срабатывании этого Правила (для отправителя a@drweb.com) выбирается значение параметра Action = pass для подключаемого модуля Dr.Web HeadersFilter и максимальный размер проверяемого сообщения (max_size), равный 100k, для подключаемого модуля Vaderetro, после чего будет продолжен поиск подходящих Правил ниже (т.к. указана директива cont).

Пример 2:

to:a@drweb.com cont drweb/ProcessingErrors = pass\, redirect(err@drweb.com)

Обратите внимание, что задается один параметр ProcessingErrors для подключаемого модуля Drweb, имеющий в качестве значения два значения, разделенных запятой (pass, redirect(err@drweb.com)).  Поэтому данном случае нельзя заключать его в кавычки, так как в этом случае парсер конфигурации будет воспринимать его как одно значение и не разбивать на подстроки при разборе параметра ProcessingErrors. Запятая в данном случае экранируется.

Вся обработка Правил происходит по порядку, сверху вниз и слева направо, поэтому:

Если в одном и том же Правиле (в его части SETTINGS) значение одного и того же параметра задается несколько раз, то последующее значение параметра замещает значение предыдущее.

Если сработало несколько Правил, в которых (в части SETTINGS) присваиваются разные значения одному и тому же параметру, то неизменным сохраняется первое присвоенное значение, а попытки последующих изменений будут проигнорированы.

Пример 3 (одно Правило с несколькими значениями одного и того же параметра):

true cont html=yes, html=no

Параметру html (о параметре html см. ниже) будет присвоено значение no.

Пример 4 (несколько сработавших Правил с разными значениями одного и того же параметра):

true cont html=yes
true cont html=no

Параметру html будет присвоено значение yes.

Описанное выше поведение относится ко всем параметрам, кроме параметров, которые обладают накапливающей ("аддитивной") семантикой. Каждый раз, когда встречается параметр с накапливающей семантикой, новое его значение, взятое из очередного сработавшего Правила, не конфликтует с предыдущим значением, присвоенным параметру, а добавляется к нему. В результате все найденные значения параметра объединяются в единый список-значение. При этом директива stop, встреченная в очередном сработавшем Правиле, для таких параметров работает как обычно – просмотр дальнейших Правил прекращается, параметр получает в качестве значения накопленный к этому моменту список значений. В данном документе параметры, обладающие аддитивной семантикой, отмечаются в их описании пиктограммой in_rule_aggr.

Кроме того, имеется также особый тип параметров, называющихся клонирующими. Эти параметры обрабатываются для каждого получателя отдельно: т.е. если у двух получателей письма, в результате срабатывания разных Правил, для какого-либо параметра будут указаны разные значения, то для каждого из получателей будет создана отдельная копия письма, к которой будут применены свои настройки обработки. В данном документе параметры, поддерживающие клонирование, отмечаются в их описании пиктограммой in_rule_clon.

Параметры, используемые в настройках (SETTINGS) Правил

В части SETTINGS Правил могут использоваться параметры следующих видов:

те, которые встречаются только в Правилах.

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

В данном документе параметры, которые могут использоваться в Правилах, отмечаются в их описании пиктограммой in_rule.

1. Параметры, используемые только в Правилах:

Параметр поддерживает клонирование в Правилах

html = {логический}

Использовать ли HTML-форматирование уведомлений MailD.

В случае если указано Yes, уведомления MailD генерируются в формате HTML, в противном случае – в текстовом виде.

Обратите внимание, что этот параметр не управляет видом DSN.

 

quarantine = {логический}

Разрешение перенаправления отвергнутых писем в Карантин.

В случае если указано Yes, разрешается перемещать письма в Карантин, в случае если они не пройдет проверку подключаемыми модулями.

В противном случае письмо не попадет в Карантин, даже в случае, если оно будет отвергнуто подключаемыми модулями.

Параметр поддерживает клонирование в Правилах

scan = {текст}

Параметр определяет, какие подключаемые модули Dr.Web MailD, из заданных в секции [Filters], будут использованы для проверки письма.

Если указано значение All, будут задействованы все модули. Если указано No, то никакие модули не будут использоваться.

Также имеется возможность указать выборочный список используемых подключаемых модулей. Разделителем между именами модулей служит двоеточие ":". Чтобы исключить из использования какие-либо модули, следует перед их именем ставить знак минус "-" без пробела между минусом и именем модуля. Обратите внимание, что при указании значения All не разрешается использовать имена подключаемых модулей без знака минус, так как это является бессмысленным.

Примеры:

scan = All - использовать все модули;

scan = no - не использовать ни одного модуля;

scan = All:-plugin1 - использовать все подключаемые модули, кроме plugin1;

scan = Plugin1:Plugin2 - использовать только подключаемые модули Plugin1 и Plugin2;

scan = All:Plugin1 - неверно, т.к. нельзя использовать имена модулей без "-" после All;

scan = -Plugin1:All - неверно, т.к. All может быть только на первой позиции;

scan = -Plugin1 - неверно, т.к. в начале отсутствует All.

Параметр обладает аддитивной семантикой в Правилах

notify[.<тип уведомления>] = {allow | block}
[(<типы адресов>)]

Данный параметр управляет отправкой уведомлений MailD разных типов.

Значение allow разрешает вывод соответствующего уведомления, а значение block – запрещает. Если тип уведомления не указан, то значение параметра применяется ко всем уведомлениям.

Возможные типы уведомлений зависят от того, какие виды уведомлений поддерживает компонент Notifier. Дополнительно установленные подключаемые модули могут добавлять свои собственные типы уведомлений.

По умолчанию поддерживаются следующие типы уведомлений:

notify.Virus - уведомления об обнаруженных вирусах в почтовом сообщении;

notify.Cured - уведомления об излеченных вирусах в сообщении;

notify.Skip - уведомления о письмах, содержащих объекты, пропущенные при сканировании;

notify.Archive - уведомления о сообщениях, не проверенных в связи с ограничениями на проверку архивов;

notify.Error - уведомления об ошибках, возникших при проверке писем;

notify.Rule - уведомления о блокировании письма каким-либо правилом;

notify.License - уведомления о письмах, не проверенных в связи с лицензионными ограничениями;

notify.Malware - уведомления об обнаруженных вредоносных программах.

Следом за значением параметра в скобках может идти необязательный модификатор, указывающий, адресаты каких типов подпадают под действие этого значения параметра. Можно указать несколько видов адресов, разделенных двоеточиями. Возможные значения модификатора (типы адресата):

sender - отправитель письма;

rcpt - получатель письма;

admin - администратор;

any, либо модификатор отсутствует - адресат любого типа.

Примеры:

notify=block или notify=block (any) - блокирование всех уведомлений для всех адресатов.

notify.Virus=block (sender:admin) - блокирование уведомлений о найденных вирусах для администратора и отправителя письма.

Если для уведомления некоторого типа <type> не найдено правило notify.<type>, а также не найдено общее правило notify, то предполагается, что соответствующее уведомление отключено.

Обратите внимание, что эта настройка не управляет видом DSN.

 

NotificationNamesMap =
name1 file_name1,
name2 file_name2,
...

Этот параметр позволяет отображать названия используемых шаблонов уведомлений в новые. Например, может использоваться для формирования уведомлений разного вида в зависимости от конверта.

Здесь, соответственно:

nameN - имя запрашиваемого уведомления, для которого устанавливается новый файл шаблона. Список имен можно найти в описании параметра notify. Кроме того, здесь можно для шаблонов общих отчетов указывать слово report, а для DSN - dsn.

file_nameN - часть имени нового файла с шаблоном уведомления. Полное имя шаблона составляется по следующей схеме: в начало имени файла добавляется один из необходимых префиксов: sender_, rcpts_, admin_, report_ или dsn_, расширение файла меняется на .msg. В результате получается имя файла, например sender_file_nameN.msg, который будет искаться в каталоге, указанном в значении параметра TemplatesBaseDir секции настроек [Notifier].

Пример:

NotificationNamesMap = virus my-virus, archive my-arch

 

SenderAddress = {address1|address2|...}

Адрес, передаваемый компоненту Sender, чтобы тот отправил на него письмо.

Можно указывать несколько адресов, разделяя их знаком "|" (по аналогии с параметром Router из секции [Sender]).

При использовании параметра SenderAddress в Правилах вида:

<CONDITION> cont SenderAddress = address1|address2|address3

сообщение, удовлетворяющее условию <CONDITION>, будет послано на первый доступный адрес из этого списка. То есть, если address1 недоступен, то письмо будет отправлено на address2, а если и этот адрес не доступен, то на address3.

Данный параметр может использовать специальные макросы:

CLIENT-IP - IP-адрес клиента, от которого было получено письмо

CLIENT-PORT - Порт клиента, с которого было получено письмо

SERVER-IP - IP-адрес, который обслуживается Dr.Web MailD

SERVER-PORT - Порт, через который Receiver принял письмо.

Если Sender поддерживает данный параметр, то он передаст письмо именно на указанный адрес.

Например, Правило вида

true cont SenderAddress=inet:10025@CLIENT-IP

будет перенаправлять все исходящие письма на хост, с которого они получены, на порт 10025.

В текущей версии Dr.Web MailD параметр SenderAddress поддерживается только модулем drweb-sender с SMTP/LMTP методом отправки почты.

warning

Значения «по умолчанию» для параметров, перечисленных в таблице выше, задаются в «безымянной» секции [Rule] конфигурационного файла.

Для корректной работы макросов CLIENT-IP и CLIENT-PORT, используемых в параметре SenderAddress, необходимо установить значения следующих параметров:

В секции [Receiver]: RealClients = yes

В секции [Maild]: GetIpFromReceivedHeader = yes

2. Параметры из секций основного конфигурационного файла, которые могут быть использованы в Правилах:

Секция

Параметры

  RedirectMail

  MaxScore

  MaxScoreAction

  LicenseLimit

  EmptyFrom

  ProcessingErrors

  UseCustomReply

  ReplyEmptyFrom

  ReplyProcessingError

  ReplyMaxScore

[Notifier]

Параметр поддерживает клонирование в Правилах AdminMail

  FilterMail

Параметр поддерживает клонирование в Правилах NotifyLangs

[Filters]

Параметр поддерживает клонирование в Правилах <plug-in>/use - Параметр разрешает или запрещает использование указанного подключаемого модуля при проверке писем. Имеет логический тип {yes, no}. Обратите внимание, что этот параметр может быть использован только в Правилах и не задается в конфигурационном файле!

Параметр поддерживает клонирование в Правилах <plug-in>/max_size

  <plug-in>/log_level

  <plug-in>/log_ipc_level

  <plug-in>/syslog_facility

  <plug-in>/path_to_lib

3. Параметры подключаемых модулей, которые могут быть использованы в Правилах:

Модуль

Параметры

Drweb

  HeuristicAnalysis

  AddXHeaders

  Paranoid

Параметр обладает аддитивной семантикой в Правилах RegexsForCheckedFilename

  LicenseLimit

  Infected

  Suspicious

  Incurable

  Adware

  Dialers

  Jokes

  Riskware

  Hacktools

  SkipObject

  ArchiveRestriction

  ScanningErrors

  ProcessingErrors

  BlockByFilename

  UseCustomReply

  ReportMaxSize

  ReplyInfected

  ReplyMalware

  ReplySuspicious

  ReplySkipObject

  ReplyArchiveRestriction

  ReplyError

  ReplyBlockByFilename

Vaderetro

  FullCheck

  NoHamFrom

  AddVersionHeader

  AddXDrwebSpamStateNumHeader

  AddXSpamLevel

  AddXHeaders

  CheckDelivery

  SubjectPrefix

  NotifySubjectPrefix

  UnconditionalSpamThreshold

  UnconditionalSubjectPrefix

  SpamThreshold

  UnconditionalAction

  Action

  NotifyAction

  SpamCustomReply

Параметр обладает аддитивной семантикой в Правилах WhiteList

Параметр обладает аддитивной семантикой в Правилах BlackList

  CheckForViruses

  AllowRussian

  AllowCJK

  UseCustomReply

  FromProtectedNetworkScoreAdd

  ProtectedNetworkReplyCacheLifeTime

  ReplyToProtectedNetworkScoreAdd

HeadersFilter

  ScanEncodedHeaders

Параметр обладает аддитивной семантикой в Правилах RejectCondition

Параметр обладает аддитивной семантикой в Правилах AcceptCondition

  FilterParts

Параметр обладает аддитивной семантикой в Правилах RejectPartCondition

Параметр обладает аддитивной семантикой в Правилах AcceptPartCondition

Параметр обладает аддитивной семантикой в Правилах MissingHeader

  Action

  UseCustomReply

  ReplyRuleFilter

Modifier

  Encoding

  UseCustomReply

  ReplyRuleFilter

Параметр обладает аддитивной семантикой в Правилах LocalRules - Локальные правила проверки писем модулем (аналогичен по формату параметру GlobalRules подключаемого модуля). Обратите внимание, что этот параметр модуля может быть использован только в Правилах и не задается в самом конфигурационном файле подключаемого модуля! О формате правил модуля см. в описании подключаемого модуля.

Обратите внимание, что логика работы параметра <plug-in>/use аналогична логике работы параметра scan (включение или исключение модуля в список используемых для проверки). Однако он может использоваться для дополнительного включения или выключения подключаемых модулей при срабатывании разных Правил, т.к. параметр scan не обладает накапливающей семантикой.

Пример:

Если в результате срабатывания двух Правил требуется отключить подключаемые модули Drweb и Vaderetro, то использование Правил вида

to:regex:test@.* cont scan=all:-vaderetro
to:regex:test@.* cont scan=all:-drweb

приведет к тому, что отключится только модуль Vaderetro (поскольку повторное изменение параметра scan будет отброшено). Однако, если переписать второе Правило следующим образом:

to:regex:test@.* cont scan=all:-vaderetro
to:regex:test@.* cont drweb/use=no

то после срабатывания первого Правила отключится Vaderetro, а после второго также и Drweb. Тот же эффект будет достигнут, если в SETTINGS-части первого правила заменить scan=all:-vaderetro на vaderetro/use=no.

Для использования в SETTINGS-части Правила значений параметров из некоторой именованной группы настроек (задается как секция с заданным названием [Rule:<название_секции>] в основном конфигурационном файле), используется директива rule=<имя группы>. В текущей версии Dr.Web MailD в каждом Правиле обработки писем может быть использовано не более одного параметра rule (примеры см. в описании секции [Rule]).