Правила проверки трафика

На главную  Назад  Вперед

Правила представляют собой цепочку продукций вида ЕСЛИ <условная часть> ТО <часть действий>. При этом в части <условная часть> перечисляются проверки вида «Переменная (не) имеет заданное значение» или «Значение переменной (не) входит в указанное множество», а в <часть действий> содержит набор (не менее одного) действий, каждое из которых представляет собой конечную резолюцию (пропустить или заблокировать проверяемый объект) или модифицирующее действие вида «Изменить свойства проверяемого объекта», «Присвоить указанной переменной заданное значение» или «Добавить заданное значение к множеству значений указанной переменной».

Часть действий правила выполняется, только если истинна условная часть. Если условная часть правила ложна, то действия, указанные в этом правиле, не выполняются и осуществляется переход к следующему правилу. Правила перебираются сверху вниз до тех пор, пока не сработает какая-либо конечная резолюция. После этого все нижележащие правила (если имеются) игнорируются. Важно, что действия в <части действий> при срабатывании правила выполняются в порядке их перечисления слева направо, при этом, если в цепочке действий встречается конечная резолюция, прерывающая обработку правил, оставшаяся часть действий, указанная в <части действий>, не выполняется.

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

Формат продукции правила имеет вид:

[<условие>[, <условие>[, ]]] : <действие>[, <действие>[, …]]

Условная часть правила (перед символом ':') может отсутствовать, в этом случае часть действий выполняется безусловно. Если условная часть правила отсутствует, то разделитель ':' может быть опущен. Запятая между условиями в условной части и действиями в части действий играет роль конъюнкции (т.е. логического «И»): условная часть считается истинной, только если истинны все перечисленные в ней условия, а все действия, указанные в части действий, выполняются в порядке их перечисления слева направо до момента встречи конечной резолюции, прерывающая обработку правил. Ключевые слова, имена переменных и параметров из конфигурации в правилах не чувствительны к регистру.

Условия

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

Условие

Смысл условия

<переменная> <значение>

Значение указанной переменной совпадает с заданным.

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

<переменная> [not] in <множество значений>

Значение указанной переменной содержится в указанном множестве значений (для not – не совпадает ни с одним из значений указанного множества).

<переменная> [not] match <множество значений>

Значение указанной переменной соответствует любому регулярному выражению из указанного набора (для not – не соответствует ни одному из выражений в указанном наборе).

Регулярные выражения записываются с использованием синтаксиса POSIX (BRE, ERE) или Perl (PCRE, PCRE2).

<переменная> [not] gt <значение>

Значение указанной переменной (не) больше заданного.

Может быть использовано только для переменных, которые принимают единственное числовое значение.

<переменная> [not] lt <значение>

Значение указанной переменной (не) меньше заданного.

Может быть использовано только для переменных, которые принимают единственное числовое значение.

*) Необязательное ключевое слово not обозначает отрицание.

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

Запись

Смысл

(<значение 1>[, <значение 2>[, ...]])

В скобках перечисляется непосредственно множество проверяемых значений (не менее одного). Для случая с одним значением и использованием условия in скобки можно опустить (получится случай <переменная> <значение>).

"<секция>.<параметр>"

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

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

file("<имя файла>")

Перечень значений считывается из текстового файла <имя файла> (одна строка файла – один элемент списка, ведущие и завершающие пробелы в строках не учитываются). Путь к файлу должен быть абсолютным. Кавычки и апострофы, если они встречаются в <имя файла>, необходимо экранировать символом косой черты '\'.

Размер файла не должен быть больше 64 МБ.

Содержимое файла считывается и подставляется в правила один раз – при загрузке файла конфигурации. Если указанный файл отсутствует или его размер слишком велик, при загрузке настроек будет выдана ошибка x102.

В случае если содержимое файла изменено в процессе работы программного комплекса, для применения внесенных изменений необходимо после сохранения файла перезагрузить программный комплекс, используя команду drweb-ctl reload.

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

<тип_LOOKUP_запроса>@<тег>[@<значение>]

Множество значений запрашивается через Dr.Web LookupD у внешнего источника данных (LDAP, ActiveDirectory), где <тип_LOOKUP_запроса> – это тип источника (LDAP или AD); <тег> – это имя секции, описывающей подключение для выборки проверяемого параметра, а необязательное <значение> – значение, которое должно находиться в множестве значений, извлеченных из источника данных.

Не для всех переменных можно получать значения через Dr.Web LookupD. Также не для всех переменных используется условие <проверка>. Для каждой переменной ниже указывается, можно ли использовать для проверки ее значений значения, получаемые через Dr.Web LookupD.

 

dnsxl(<DNSxL-сервер 1>[: [mask] <IP>][, ...])

В скобках перечисляется перечень DNSxL-серверов (DNSBL и т.п.), которые должны проверить вхождение IP-адреса, или FQDN (предварительно разрешенного до IP-адреса) в свои списки IP-адресов.

Если проверяемый IP-адрес зарегистрирован в списках некоторого из перечисленных в скобках DNSxL-серверов, то в ответе этого сервера присутствует одна или более DNS-записей типа A, причем возвращаемый сервером фиктивный IP-адрес может содержать в себе причину, по которой проверяемый IP-адрес был внесен в списки данного сервера (как правило, тип причины определяется значением последнего октета возвращенного фиктивного IP-адреса). Для каждого DNSxL-сервера в списке можно указать проверку на ожидаемое возвращенное значение фиктивного IP-адреса. Проверка указывается после двоеточия в форме:

<DNSxL-сервер>: <IP-адрес>

<DNSxL-сервер>: mask <IP-адрес>

В первом случае указывается требование, чтобы возвращенный сервером <DNSxL-сервер> фиктивный IP-адрес в точности совпадал бы с указанным адресом <IP-адрес>. Во втором случае указывается требование, чтобы возвращенный сервером <DNSxL-сервер> фиктивный IP-адрес в точности равнялся бы указанной маске в ее ненулевых октетах. Если параметры проверки не указаны, то условие сработает, если <DNSxL-сервер> вернет любой фиктивный IP-адрес в ответ на запрос.

Примеры:

<IP> in dnsxl("dnsxl.server.org") – для IP-адреса, содержащегося в переменной <IP>, сервер должен вернуть любой фиктивный IP-адрес;
<IP> in dnsxl("dnsxl.server.org": 127.0.0.2) – для IP-адреса, содержащегося в переменной <IP>, сервер должен вернуть фиктивный IP-адрес 127.0.0.2;
<IP> in dnsxl("dnsxl.server1.org": mask 0.0.0.8, "dnsxl.server2.org": 127.0.0.3, "dnsxl.server3.org") – для IP-адреса, содержащегося в переменной <IP>, либо первый сервер вернет фиктивный IP-адрес с младшим октетом 8, либо второй – фиктивный IP-адрес 127.0.0.3, либо третий – любой фиктивный IP-адрес.

Использование инструкции проверки <переменная> in dnsxl(<список серверов>) допустимо только в том случае, если <переменная> представляет собой IP-адрес или доменное имя, которое может быть разрешено службой DNS до IP-адреса (FQDN).

Таким образом, в качестве переменной для данного условия могут быть использованы только следующие переменные: src_ip, url_host (см. ниже).

 

Если переменная имеет множественное значение, то условие <переменная> in <множество значений> истинно, если пересечение множества текущих значений указанной переменной <переменная> с указанным множеством <множество значений> не пусто. Условие not in истинно в противоположном случае. Например, пусть X – переменная, текущее значение которой – множество, содержащее значения a, b, c. Тогда:

X in (a, b) – истинно, так как значения а и b встречаются в обоих множествах;

X in (a, d, e) – истинно, так как значение а встречается в обоих множествах;

X in (d, e) – ложно, так как ни одно из значений переменной (a, b, c) не встречается в множестве (d, e).

X in () – ложно, так как множество значений переменной не пусто.

X not in () – истинно, множество значений переменной не пусто.

X not in (d, e) – истинно, так как ни одно из значений переменной (a, b, c) не встречается в множестве (d, e).

X not in (a, d, e) – ложно, так как значение а встречается в обоих множествах.

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

Действия

Действия делятся на конечные резолюции, определяющие запрет или разрешение на пропуск объекта; модифицирующие резолюции, не прерывающие проверку, а фиксирующие действие, которое должно быть применено к проверяемому объекту по достижении конечной резолюции, разрешающей пропуск объекта, и действия, изменяющие значения некоторой переменной, что может быть использовано при проверке условий в нижележащих правилах.

Конечные резолюции

Резолюция

Описание (смысл)

Общие резолюции

PASS

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

Для правил обработки почты имеет смысл команды пропуска письма к получателю, применив к нему все накопленные изменения (т.е. все сработавшие действия REPACK, ADD_HEADER, CHANGE_HEADER, см. ниже).

BLOCK as <reason>

Заблокировать трафик (отказать в создании соединения, передаче объекта получателю). Последующие правила (если имеются) не используются..

В журнале фиксируется, что блокировка случилась по причине <reason>. Эта же причина используется для определения, какую страницу с уведомлением показать пользователю в браузере. В качестве <reason> для BLOCK может быть использовано две стандартные причины:

BlackList – считается, что данные заблокированы по причине попадания в черный список пользователя.

_match – причиной блокировки является попадание веб-ресурса или файла с угрозой в категорию, из-за которой сработало правило (для условий *_category in (...)). Переменная _match хранит список блокируемых категорий, для которых сработало соответствие.

Для правил обработки почты данное действие является синонимом действия REJECT. Причина блокировки <reason> при этом игнорируется

Специальные резолюции для правил обработки почты

REJECT ["<description>"]

Отклонить письмо (не допустить его прием или отправку). Последующие правила (если имеются) не используются.

В случае работы с данными, передаваемыми по протоколу SMTP, сформировать код ответа SMTP 541 (класс постоянных ошибок). Необязательный параметр <description>, если указан, будет использован в качестве ответа. При проверке письма, поступившего от MTA через интерфейс Spamd/Rspamd, <description> будет использовано как значение заголовка 'Message', добавленного к письму после сообщения результатов проверки.

TEMPFAIL ["<description>"]

Ответить отправителю ошибкой типа «временная ошибка». Последующие правила (если имеются) не используются.

В случае работы с данными, передаваемыми по протоколу SMTP, сформировать код ответа SMTP 451 (класс временных ошибок). Необязательный параметр <description>, если указан, будет использован в качестве ответа. При проверке письма, поступившего от MTA через интерфейс Spamd/Rspamd, <description> будет использовано как значение заголовка 'Message', добавленного к письму после сообщения результатов проверки.

DISCARD

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

Особенности обработки конечных резолюций:

BLOCK as BlackList всегда отрабатывает как «попал в черный список» (вне зависимости от того, что за условие указано в правиле с данной резолюцией).

BLOCK as _match, если в _match не пусто, отрабатывает как «попал в _match категорию(и)».

BLOCK as _match, если в _match пусто, отрабатывает как «попал в черный список» (вне зависимости от того, что за условие указано в правиле с данной резолюцией).

Если были просмотрены все правила, а ни одно правило с резолюцией не сработало (или резолюции отсутствуют в правилах), то это равносильно применению к соединению действия PASS.

Модифицирующие резолюции

Модифицирующие резолюции не прерывают проверку правил, а фиксируют действия, которые должны быть применены к проверяемым данным по достижении разрешающей резолюции PASS.

Резолюция

Описание (смысл)

REPACK [<reason>]

Перепаковать сообщение, т.е. создать (на основе одного из предопределенных шаблонов) новое сообщение, содержащее содержимое из старого сообщения и некоторый текст, информирующий получателя о наличии угроз. Вырезанное нежелательное содержимое помещается в архив, защищенный паролем. Данный архив будет добавлен к сообщению, отправленному получателю, как вложение. Продолжить проверку почтового сообщения до достижения резолюции PASS. Имеются следующие предопределенные шаблоны перепаковки:

1.Сообщение признано спамом;

2.Наличие в сообщении одной или более угроз;

3.Наличие в сообщении одного или более вредоносных/нежелательных URL;

4.Нарушение сообщением политик безопасности, указанных администратором.

В журнале фиксируется, что перепаковка случилась по причине <reason>. Эта же причина используется для определения, на основании какого из четырех шаблонов сформировать письмо-уведомление получателю. В качестве <reason> для REPACK могут быть использованы следующие причины:

as _match – причиной перепаковки является признание письма спамом, попадание веб-ресурса или файла с угрозой, содержащихся в письме, в категорию, из-за которой сработало правило (для условий *_category in (...)). Переменная _match хранит список нежелательных категорий, для которых сработало соответствие. Для перепаковки выбирается шаблон 1, 2 или 3 (см. выше), в зависимости от того, что было обнаружено в сообщении:

если сообщение признано спамом, то выбирается шаблон 1;

если найдена хотя бы одна угроза, то выбирается шаблон 2;

если найден хотя бы один вредоносный/нежелательный URL, то шаблон 3;

если угроз не обнаружено, то выбирается шаблон 4.

"текстовое сообщение" – письмо перепаковано в силу срабатывания настроек, заданных администратором, а сообщение указывает произвольное сообщение от администратора. Например: REPACK "Virus found!". Для перепаковки будет выбран шаблон 4.

ADD_HEADER("<Name>", "<Value>")

Добавить в письмо заголовок <Name> со значением <Value> и продолжить проверку письма до достижения резолюции PASS. Например: ADD_HEADER ("X-SPAM", "Virus found!").

Значение перекодируется в ASCII в соответствии с RFC 2047.

CHANGE_HEADER("<Name>", "<Value>" | _value [+ "<Value>" | _value [+ ...]])

Заменить значение первого найденного заголовка с именем <Name>. Новое значение – конкатенация значений после запятой, разделённых символом '+'. Каждое значение может быть либо строковым литералом в кавычках, либо специальной переменной _value, в которую подставляется исходное значение модифицируемого заголовка. Продолжить проверку письма до достижения резолюции PASS. Например: CHANGE_HEADER("Subject", "[SPAM] '" + _value + "' (do not read!)").

 

Для правил SpIDer Gate, управляющих не почтовыми соединениями, срабатывание почтовой резолюции равносильно BLOCK as BlackList (дополнительно в журнале будет зафиксировано сообщение о применении неизвестного действия).

Изменение значения переменной

Для изменения значения переменной используется инструкция

SET <переменная> = ([<значение 1>[, <значение 2>[, ...]]])

Если скобки пустые – это означает очистку списка значений переменной. Для случая с одним значением скобки необходимо опустить, т.е. использовать синтаксис

SET <переменная> = <значение>

Переменные, используемые в правилах

При указании переменных в правилах регистр символов не учитывается. Переменные, название которых состоит из нескольких слов, могут быть записаны с использованием подчеркивания для разделения слов, или записаны без подчёркивания. Таким образом, записи variable_name, VariableName и variablename представляют одну и ту же переменную. В данном разделе все переменные записаны с использованием подчеркивания (т.е. используется вариант написания variable_name).

Переменные общего назначения

Переменная

Описание

Может быть использована в

условной части

части действия (SET)

protocol

Тип сетевого протокола, используемого соединением.

Переменная может принимать множество значений.

Возможные значения: HTTP, SMTP, IMAP, POP3.

Особенности использования:

Значение переменной определено, только если не используется SSL/TLS или было разрешено вскрытие SSL.

В правилах для Dr.Web ICAPD не имеет смысл указывать значение, отличное от HTTP: для него протокол может быть только HTTP.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

protocol in (HTTP, SMTP)
protocol in (POP3)
protocol in file("/etc/file")

Да

Нет

sni_host

SNI (адрес) узла, с которым устанавливается соединение через SSL/TLS.

Особенности использования:

Если SSL не используется, то значение переменной не определено, условие будет ложным.

Не имеет смысл использовать в правилах для Dr.Web ICAPD (он не обрабатывает SSL, поэтому условие всегда будет ложным).

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

sni_host not in ('vk.com', 'ya.ru')
sni_host in "LinuxFirewall.BlackList"
sni_host in file("/etc/file")

Да

Нет

sni_category

Список категорий, к которым в базах категорий веб-ресурсов относится узел (определенный по SNI), с которым устанавливается соединение через SSL/TLS (AdultContent, и т.п.).

Переменная может принимать множество значений.

Особенности использования:

Если SSL не используется, то значение переменной не определено, условие будет ложным.

Не имеет смысл использовать в правилах для Dr.Web ICAPD (он не обрабатывает SSL, поэтому условие всегда будет ложным).

Для правил, используемых компонентами Dr.Web MailD и Dr.Web ICAPD, условие с not in будет истинным, даже если по результатам проверки узел не принадлежит никакой из предопределенных категорий («безопасный» узел). Для правил компонента Dr.Web Firewall для Linux (SpIDer Gate) условие в этом случае будет ложным.

Если базы данных категорий веб-ресурсов не установлены, то переменную нельзя использовать в правилах (попытка проверить истинность условия в правиле будет приводить к ошибке x112).

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

sni_category not in (AdultContent, Chats)
sni_category in "LinuxFirewall.BlockCategory"
sni_category in (FreeEmail)
sni_category not in file("/etc/file")

Да

Нет

url

URL, запрошенный клиентом. Может быть сравнен с указанной строкой или регулярным выражением.

Особенности использования:

Можно использовать только в правилах для Dr.Web ICAPD.

Для проверки значения переменной можно использовать Dr.Web LookupD.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

url match ("drweb.com", "example\..*", "aaa\.ru/")
url match "ICAPD.Adlist"
url not match LDAP@BadURLs
url match file("/etc/file")

Да

Нет

url_host

URL/узел, с которым устанавливается соединение.

Особенности использования:

Значение переменной определено, только если не используется SSL/TLS или было разрешено вскрытие SSL.

Для проверки значения переменной можно использовать Dr.Web LookupD.

Данная переменная может быть проверена на вхождение в черные списки DNSxL (DNSBL и т.п.).

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

url_host in ('vk.com', 'ya.ru')
url_host not in "ICAPD.Whitelist"
url_host in LDAP@hosts
url_host not in file("/etc/file")
url_host not in dnsxl("multi.surbl.org": 127.0.0.2, "multi2.surbl.org")

Да

Нет

url_category

Список категорий, к которым (по базам категорий веб-ресурсов или по ответу из Dr.Web Cloud) относится URL/узел, с которым установлено соединение.

Переменная может принимать множество значений.

Особенности использования:

Значение переменной определено, только если не используется SSL/TLS или было разрешено вскрытие SSL.

Для правил, используемых компонентами Dr.Web MailD и Dr.Web ICAPD, условие с not in будет истинным, даже если по результатам проверки URL/узел не принадлежит никакой из предопределенных категорий («безопасный» URL/узел). Для правил компонента Dr.Web Firewall для Linux (SpIDer Gate) условие в этом случае будет ложным.

Если базы данных категорий веб-ресурсов не установлены, то переменную нельзя использовать в правилах (попытка проверить истинность условия в правиле будет приводить к ошибке x112).

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

url_category not in (AdultContent, Chats)
url_category in "LinuxFirewall.BlockCategory"
url_category in (FreeEmail)
url_category in file("/etc/file")

Да

Нет

threat_category

Список категорий, к которым по информации из вирусных баз относится угроза, обнаруженная в передаваемых данных.

Переменная может принимать множество значений.

Особенности использования:

Значение переменной определено, только если не используется SSL/TLS или было разрешено вскрытие SSL.

Для правил, используемых компонентами Dr.Web MailD и Dr.Web ICAPD, условие с not in будет истинным, даже если по результатам проверки объект не содержит угроз ни из одной из предопределенных категорий («безопасный» объект). Для правил компонента Dr.Web Firewall для Linux (SpIDer Gate) условие в этом случае будет ложным.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

threat_category in "LinuxFirewall.BlockThreat"
threat_category not in (Joke)
threat_category in file("/etc/file")

Да

Нет

user

Имя пользователя, с правами которого запущен процесс-отправитель (или получатель) трафика.

Особенности использования:

В правилах для Dr.Web ICAPD имеет смысл имени пользователя, прошедшего аутентификацию на прокси-сервере (если прокси-сервер поддерживает аутентификацию). Если прокси-сервер не аутентифицирует пользователей, переменная имеет пустое значение.

Для проверки значения переменной можно использовать Dr.Web LookupD.

Если требуется проверить вхождение пользователя в некоторую группу пользователей, используйте источник данных LDAP или Active Directory, возвращающий перечень групп. Также запрос должен содержать условие сравнения имени группы, которой принадлежит пользователь, с требуемым (используйте формат <тип источника LookupD>@<источник групп>@<требуемая группа>). Запросы к Active Directory (AD@) возвращают только перечни групп, поэтому для них использование части @<требуемая группа> обязательно.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

user in ('user1', 'user2')
user in AD@Winusergroups@Admins
user in LDAP@AllowedUsers
user not in file("/etc/file")

Да

Нет

src_ip

IP-адрес узла, со стороны которого следует соединение.

Особенности использования:

Для проверки значения переменной можно использовать Dr.Web LookupD.

Данная переменная не может быть использована в правилах Dr.Web MailD для интерфейса Spamd: этот протокол не предоставляет информацию об отправителе письма.

Данная переменная может быть проверена на вхождение в черные списки DNSxL (DNSBL и т.п.).

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

src_ip not in (127.0.0.1, 10.20.30.41, 198.126.10.0/24)
src_ip in LDAP@AllowedAddresses
src_ip not in file("/etc/file")
src_ip in dnsxl("zen.spamhouse.org": mask 0.0.0.2, "zen2.spamhouse.org")

Да

Нет

proc

Процесс, устанавливающий соединение (полный путь к исполняемому файлу).

Особенности использования:

Не имеет смысл использовать в правилах для Dr.Web ICAPD (он не имеет информации о процессах, поэтому условие всегда будет ложным).

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

proc in ('/usr/bin/ls')
proc not in ('/home/user/myapp', '/bin/bin1')
proc in "LinuxFirewall.ExcludedProc"
proc in file("/etc/file")

Да

Нет

direction

Тип трафика, идущего по соединению.

Возможные значения: request (клиентский запрос), response (ответ сервера).

Переменная не может иметь множества значений, условия типа match и in неприменимы.

Примеры:

direction request
direction not response

Да

Нет

divert

Направление соединения.

Возможные значения: input (входящее – создано/инициировано извне локального узла), output (исходящее – создано/инициировано на локальном узле).

Переменная не может иметь множества значений, условия типа match и in неприменимы.

Примеры:

divert input
divert not output

Да

Нет

content_type

MIME-тип данных, передающихся по соединению.

Особенности использования:

Может быть определен, только если не используется SSL/TLS или было разрешено вскрытие SSL.

Выражению "*/*" соответствуют данные любого MIME-типа, а также HTTP-ответы без заголовка Content-Type.

Для проверки значения переменной можно использовать Dr.Web LookupD.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

content_type in ("multipart/byteranges", "application/octet-stream")
content_type not in ("text/*", "image/*")
content_type not in ("audio/*")
content_type in ("*/*")
content_type in LDAP@BlockedContent
content_type not in file("/etc/file")

Да

Нет

unwrap_ssl

Используется ли раскрытие защищенного трафика, передаваемого через SSL/TLS.

Возможные значения: true, false.

Особенности использования:

Переменная не может не иметь значения, т.е. инструкция SET unwrap_ssl = () недопустима.

Переменная не может использоваться в условиях, а нужна только для управления вскрытием SSL (например, чтобы продемонстрировать пользователю веб-страницу с уведомлением о блокировке от нашего имени).

Не имеет смысл использовать в правилах для Dr.Web ICAPD (он не обрабатывает SSL, изменение значения переменной никак не влияет на обработку правил).

Примеры:

SET unwrap_ssl = TRUE
set Unwrap_SSL = false

Нет

Да

http_templates_dir

Путь к каталогу, из которого брать шаблон страницы уведомления о блокировке HTTP-запроса/ответа.

Если путь начинается с / – это абсолютный путь, если с любого другого символа – то это относительный путь. Корнем при этом считается путь из параметра TemplatesDir.

Особенности использования:

Имеет смысл только для протокола HTTP(S).

Примеры:

SET http_templates_dir = "/etc/mytemplates"
set http_templates_dir = "templates_for_my_site"

Нет

Да

Переменные, используемые в правилах обработки почты

Переменная

Описание

Может быть использована в

условной части

части действия (SET)

header

Содержимое области заголовков письма.

Особенности использования:

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

Может быть проверен любой из заголовков, представленных в письме.

Сравнение нечувствительно к регистру, допустимо использовать Unicode.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

header match ("su..ect: sp.m", "From: sales.*@.*")
Header not match ("Subject: .*купи.*")
header match file("/etc/file")

Да

Нет

body

Текстовое содержимое тела письма.

Особенности использования:

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

Может быть проверена любая текстовая часть тела письма.

Сравнение нечувствительно к регистру, допустимо использовать Unicode.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

body match ("в.чност[ьи]")
body not match file("/etc/file")

Да

Нет

body_part_header

Заголовки частей тела письма (MIME part).

Особенности использования:

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

Могут быть проверены заголовки любой части тела письма.

Сравнение нечувствительно к регистру, допустимо использовать Unicode.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

body_part_header match ('Content-Disposition: attachment; .*filename="вирус.exe"')
BodyPartHeader not match ("Content-Disposition: attachment; .*")
body_part_header match file("/etc/file")

Да

Нет

attachment_name

Имена файлов, прикрепленных к письму.

Особенности использования:

Используется для сравнения имен файлов (Content-Disposition: attachment), прикрепленных к письму, со списком задаваемых шаблонов (используются регулярные выражения).

Сравнение нечувствительно к регистру, допустимо использовать Unicode.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

attachment_name match ("\.ex.$", "\.js$", "^virus.*")
attachment_name not match ("\.txt$", "\.rtf$")
attachment_name not match file("/etc/file")

Да

Нет

total_spam_score

Нормализованная оценка письма, как спама (от 0 до 1), полученная от Dr.Web ASE.

Нормализация балльной оценки спама, полученной от Dr.Web ASE, производится по следующим правилам:

1.Число баллов 0 и меньше – 0.0;

2.Число баллов 100 – 0.8;

3.Число баллов 1000 и больше – 1.0.

В указанных интервалах нормализованная оценка возрастает.

Особенности использования:

Переменная числовая, всегда имеет одно значение может использоваться только с условиями типа lt и gt.

Если Dr.Web ASE не установлен, то проверка писем на спам не производится, и переменную total_spam_score нельзя использовать в правилах (попытка проверить истинность условия в правиле будет приводить к ошибке «Dr.Web ASE не доступен»).

Пример:

total_spam_score gt 0.32
total_spam_score gt 0.5, total_spam_score lt 0.95

Да

Нет

smtp_mail_from

Адрес отправителя письма, переданный в рамках SMTP-сессии командой MAIL FROM.

Особенности использования:

Используется для сравнения имени отправителя, указанного в рамках SMTP-сессии, со списком задаваемых шаблонов (используются регулярные выражения).

Сравнение нечувствительно к регистру.

Эта переменная не может быть использована в правилах интерфейса Spamd: данный протокол не предоставляет информацию об отправителе письма.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

smtp_mail_from match ("^john@.*", ".*@domain.com$")
smtp_mail_from not match ("^user@domain.com$")
smtp_mail_from match file("/etc/file")

Да

Нет

smtp_rcpt_to

Перечень адресов получателей письма, переданный в рамках SMTP-сессии командой RCPT TO.

Особенности использования:

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

Сравнение нечувствительно к регистру.

Эта переменная не может быть использована в правилах интерфейса Spamd: данный протокол не предоставляет информацию о получателе письма.

Если перед match указано all, то условие с данной переменной будет истинно только в случае совпадения всех значений из перечня с указанными шаблонами.

Множество значений для проверки значения переменной можно получать из файла.

Примеры:

smtp_rcpt_to match ("^user1@domain.com$", ".*@domain2.com$")
smtp_rcpt_to all match ("^john@.*", ".*@domain.com$")
smtp_rcpt_to match file("/etc/file")

Да

Нет

maild_templates_dir

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

Если путь начинается с / – это абсолютный путь, если с любого другого символа – то это относительный путь. Корнем при этом считается путь из параметра TemplatesDir в секции [MailD].

Особенности использования:

Имеет смысл только для почтовых протоколов (POP3, IMAP, SMTP) и для интерфейсов MTA (Milter, Spamd, Rspamd).

Примеры:

SET maild_templates_dir = "/etc/my_mail_templates"
set MaildTemplatesDir = "templates_for_my_MTA"

Нет

Да

Категории нежелательных веб-сайтов и угроз

1.Категории нежелательных веб-сайтов (для переменных sni_category, url_category)

Обозначение

Категория веб-сайтов

InfectionSource

Сайты, содержащие вредоносное ПО («источники распространения вирусов»).

NotRecommended

Сайты, используемые для мошенничества («социальной инженерии») и не рекомендованные к посещению.

AdultContent

Сайты, содержащие материалы порнографического или эротического содержания, сайты знакомств и т. д.

Violence

Сайты, содержащие призывы к насилию, материалы о различных происшествиях с человеческими жертвами и т. д.

Weapons

Сайты, посвященные оружию и взрывчатым веществам, а также материалы с описанием их изготовления и т. д.

Gambling

Сайты, на которых размещены онлайн-игры на деньги, интернет-казино, аукционы, а также принимающие ставки и т. д.

Drugs

Сайты, пропагандирующие употребление, изготовление или распространение наркотиков и т. д.

ObsceneLanguage

Сайты, на которых содержится нецензурная лексика (в названиях разделов, статьях и пр.).

Chats

Сайты для обмена сообщениями в режиме реального времени.

Terrorism

Сайты, содержащие материалы агрессивно-агитационного характера, описания терактов и т. д.

FreeEmail

Сайты, предоставляющие возможность бесплатной регистрации электронного почтового ящика.

SocialNetworks

Социальные сети общего характера, деловые, корпоративные и тематические социальные сети, а также тематические сайты знакомств.

DueToCopyrightNotice

Сайты, ссылки на которые указаны правообладателями некоторого произведения, защищенного авторскими правами (кинофильмы, музыкальные произведения и т. д.).

В качестве значения переменных sni_category и url_category можно также использовать имена параметров, управляющих блокировкой (см. ниже).

2.Категории угроз (для переменной threat_category)

Обозначение

Категория угроз

KnownVirus

Известная угроза (вирус).

VirusModification

Модификация известной угрозы (вируса).

UnknownVirus

Неизвестная угроза, подозрительный объект.

Adware

Рекламная программа.

Dialer

Программа дозвона.

Joke

Программа-шутка.

Riskware

Потенциально опасная программа.

Hacktool

Программа взлома.

В качестве значения переменной threat_category можно также использовать имена параметров, управляющих блокировкой (см. ниже).

Параметры конфигурации, которые можно использовать в условиях правил

Параметры, используемые в правилах компонента Dr.Web Firewall для Linux (указываются с префиксом LinuxFirewall.):

Параметр

Описание и пример использования

Whitelist

Белый список. Хранит перечень доменов, доступ к которым разрешается, даже если эти домены находятся в базе категорий.

Примеры:

sni_host in "LinuxFirewall.Whitelist" : PASS
url_host not in "LinuxFirewall.Whitelist" : BLOCK as _match

Blacklist

Черный список. Хранит перечень доменов, доступ к которым запрещен самим пользователем (или администратором).

Примеры:

sni_host in "LinuxFirewall.Blacklist" : SET Unwrap_SSL = FALSE
url_host in "LinuxFirewall.Blacklist" : BLOCK as BlackList

BlockCategory

«Мета-параметр»: Его значениями является список названий категорий (Chats, AdultContent и т.д.), для которых соответствующие параметры Block* в секции [LinuxFirewall] установлены в Yes.

Примеры:

url_category in "LinuxFirewall.BlockCategory" : BLOCK as _match
sni_category in "LinuxFirewall.BlockCategory" : BLOCK as BlackList

BlockThreat

«Мета-параметр»: Его значениями является список названий типов угроз (KnownVirus, Joke и т.д.), для которых соответствующие параметры Block* в секции [LinuxFirewall] установлены в Yes.

Примеры:

threat_category in "LinuxFirewall.BlockThreat" : BLOCK as _match

ExcludedProc

Перечень доверенных процессов, трафик которых не должен проверяться.

Примеры:

proc in "LinuxFirewall.ExcludedProc" : PASS

Особенности сохранения правил в файл конфигурации

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

При записи в файл конфигурации безусловного правила (правила, содержащего только действия и не содержащего условной части), к нему будет добавлена пустая условная часть и знак разделителя ':'.

Например, следующее правило, не содержащее условной части, и состоящее только из действия:

BLOCK as _match

будет записано в файл конфигурации в следующем виде:

: BLOCK as _match

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

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

user in ('user1', 'user2') : SET http_templates_dir = "/etc/mytemplates", BLOCK as _match

будет записано в файл конфигурации в виде последовательности двух правил:

user in ('user1', 'user2') : SET http_templates_dir = "/etc/mytemplates"
user in ('user1', 'user2') : BLOCK as _match

Так как в записи правил не предусмотрено дизъюнкции (логическое «ИЛИ») условий в условной части, для реализации логического «ИЛИ» следует записать цепочку правил, в условии каждого из которых будет указано единственное условие-дизъюнкт. Например, следующие два правила эквивалентны правилу «Осуществить блокировку, если обнаружен вредоносный объект типа KnownVirus или URL из категории Terrorism»:

threat_category in (KnownVirus) : BLOCK as _match
url_category in (Terrorism) : BLOCK as _match

так как следующие записи логически эквивалентны: (a –> xb –> x); ((a –> x) /\ (b –> x)); ((a \/ b) –> x).

Как и для любого параметра конфигурации, значения параметров типа RuleSet (т.е. правила) могут быть просмотрены и изменены при помощи команд cfshow и cfset утилиты управления Dr.Web Ctl (модуль drweb-ctl). Подробнее о синтаксисе команд cfshow и cfset консольной утилиты управления Dr.Web Ctl (модуль drweb-ctl) см. в разделе Dr.Web Ctl.