Приложение А. Правила проверки трафика

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

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

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

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

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

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

Условия

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

Условие

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

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

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

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

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

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

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

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

info

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

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

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

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

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

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

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

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

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

Запись

Смысл

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

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

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

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

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

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

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

info

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

Содержимое файла считывается и подставляется в правила один раз — при запуске Dr.Web для Интернет-шлюзов UNIX. Если указанный файл отсутствует или его размер слишком велик, при запуске Dr.Web для Интернет-шлюзов UNIX будет выдана ошибка x102.

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

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

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

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

info

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

Действия

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

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

Резолюция

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

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

PASS

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

BLOCK as <reason>

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

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

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

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

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

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

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

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

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

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

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

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")

Да

Нет

url

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

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

Для проверки значения переменной можно использовать 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.

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

Примеры:

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_category

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

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

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

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

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

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

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

Примеры:

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

Да

Нет

threat_category

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

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

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

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

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

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

Примеры:

threat_category in "ICAPD.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.

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

Примеры:

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")

Да

Нет

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")

Да

Нет

http_templates_dir

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

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

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

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

Примеры:

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

Нет

Да

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

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 ICAPD (указываются с префиксом ICAPD.):

Параметр

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

Whitelist

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

Примеры:

url_host not in "ICAPD.Whitelist" : BLOCK as BlackList

Blacklist

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

Примеры:

url_host in "ICAPD.Blacklist" : BLOCK as BlackList

Adlist

Рекламный список. Хранит перечень регулярных выражений, которые описывают рекламные сайты. Задается самим пользователем (или администратором).

Примеры:

url match "ICAPD.Adlist" : BLOCK as BlackList

BlockCategory

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

Примеры:

url_category in "ICAPD.BlockCategory" : BLOCK as _match

BlockThreat

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

Примеры:

threat_category in "ICAPD.BlockThreat" : BLOCK as _match