<< Кликните, чтобы показать Содержание >> Полезные приёмы |
В этом разделе описаны приёмы, которые помогут отлаживать и тестировать фильтры.
Метки времени
Метки времени (<action name="datetime" value="label-name">) можно использовать не только в конце и в начале обработки сообщения, но и в каждом правиле – тогда можно будет узнать, когда оно было обработано относительно начала фильтрации всего сообщения в целом. Для этого действие "datetime" можно указывать непосредственно перед терминирующим действием.
Пример:
<rule name="rule2" enabled="1"> <match> <c name="attach-exist"/> </match> <action name="datetime" value="rule2-end" /> <action name="accept" /> </rule> |
---|
В данном примере после обработки сообщения правилом у сообщения будет установлена метка "rule2-end", показывающая время, когда сообщение было принято этим правилом к дальнейшей обработке (ACCEPT).
Выполнение некоторых действий может занимать довольно длительное время (например, DNS-разрешение имён, проверка сообщения внешними антивирусами и т.п.). Так как все действия выполняются последовательно, то можно замерить время выполнения этого длительного действия, добавив к нему действия "datetime".
Пример:
<rule name="rule2" enabled="1"> <match> <c name="attach-exist"/> </match> <action name="datetime" value="rule2-dns-start" /> <action name="dns" /> <action name="datetime" value="rule2-dns-end" /> </rule> |
---|
В этом примере после обработки сообщения правилом можно будет сравнить значение меток "rule2-dns-start" и "rule2-dns-end" и узнать время, которое занимала операция DNS.
Теги правил
Вы можете использовать действие "tag" (установка тега в соообщении) во всех правилах, и при этом имя тега ставить таким же, как имя правила. Тогда после прохождения сообщения через фильтр в нём будет история обработки сообщения правилами. Это может быть полезно для тестирования фильтров и отслеживания "путей" прохождения ими обрабатываемых объектов, когда фильтр сложный и содержит много правил и таблиц.
Пример:
<rule name="rule-attach" enabled="1"> <match> <c name="attach-exist"/> </match> <action name="tag" value="rule-attach" /> </rule>
<rule name="rule-bad-words" enabled="1"> <match> <c name="text" op="all" value="tel, respect" /> </match> <action name="tag" value=" rule-bad-words" /> </rule>
<rule name="rule-only-for-dns" enabled="1"> <action name="dns" /> <action name="tag" value=" rule-only-for-dns" /> </rule>
<rule name="accept-all" enabled="1"> <action name="tag" value="accept-all" /> <action name="accept" /> </rule> |
---|
Также можно поступить и с метками времени, в этом случае будет видно не только через какие правила прошло сообщение, но и в какое время.
"От простого к сложному"
Выполнение некоторых действий может занимать довольно длительное время (DNS-разрешение имён, проверка сообщения внешними антивирусами и т.п.). Следует размещать такие действия как можно ближе к концу обработки сообщения, чтобы было как можно меньше ситуаций, когда выполняется длительная операция, а потом применяется для сообщения действие DROP из-за того, что поле FROM не прошло проверку. Лучше сначала проверить FROM и отсеять на нём часть сообщений, и лишь потом выполнять для них DNS или другие длительные операции вроде проверки антивирусами.