[Назад] [Содержание] [Вперёд]

# 4. Фильтрация данных

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

По каждому правилу ведётся подсчёт как прямого так и обратного направления передачи. Т.е. из очередного пакета берутся данные источника и приёмника и проверяются через фильтр, у соответствующих правил изменяется "прямая" статистика. Затем, данные источника и приёмника меняются местами и эта информация повторно проверяется через фильтр, у соответствующих правил изменяется "обратная" статистика. Т.е. каждое правило имеет два счётчика байт ("sent" - отправлено и "recv" - получено).

После подготовки фильтра его необходимо передать tv3 с помощью rexx-скрипта <директория tv3>\REXX\setfilter.cmd :

setfilter.cmd имя_файла

Тоже самое можно сделать через WEB-интерфейс (http://localhost:5462/setfilter.html). Установка нового фильтра не требует перезапуска tv3.

Проще всего понять логику работы фильтра на конкретном примере.

## 4.1. Пример фильтра

Рассмотрим простую задачу подсчёта трафиков интернет-шлюза, имеющего почтовый сервис (smtp) и proxy-сервер. Необходимо подсчитывать статистику каждого пользователя proxy-сервера и трафик приходящий на почтовый сервис из Интернет. Допустим, адрес локальной сети - 192.168.33.0 маска сети - 255.255.255.0 , адрес шлюза в локальной сети - 192.168.33.1 , реальный адрес шлюза со стороны Интернет - 195.72.224.229 , порт smtp - 25, proxy - 8080. Пользователи: 192.168.33.2, 192.168.33.3, 192.168.33.4 . Схематически правила нашего фильтра будут выглядеть следующим образом:

- 1. источник: любой, приёмник: 195.72.224.229
  TCP порт источника: любой, приёмника: 25
  если правило сработало - остановить просмотр фильтра.
- 2. источник: 192.168.33.0/255.255.255.0 приёмник: 192.168.33.1
  TCP порт источника: любой, приёмника: 8080

- 2.1. источник: 192.168.33.2
  если правило сработало - остановить просмотр фильтра.
- 2.2. источник: 192.168.33.3
  если правило сработало - остановить просмотр фильтра.
- 2.3. источник: 192.168.33.4
  если правило сработало - остановить просмотр фильтра.

Как видим, правило 2 имеет вложенные правила, это сделано для того, чтобы не указывать для каждого пользователя адрес и порт назначения: вложенные правила будут просматриваться только если выполнились условия родительского правила. Это не только упрощает задание правил, но и повышает производительность работы фильтра: правила пользователей не будут вообще просматриваться, если пакет не является запросом к proxy-серверу из внутренней сети.

В виде XML этот фильтр будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<filter>
<rule stop="Y">
<path>Internet/SMTP</path>
<dst>195.72.224.229/32</dst>
<proto name="tcp">any:25</proto>
</rule>
<rule>
<src>192.168.33.0/255.255.255.0</src>
<dst>192.168.33.1/255.255.255.255</dst>
<proto name="tcp">any:8080</proto>
<rule stop="Y">
<path>PROXY/Boss</path>
<src>192.168.33.2/32</src>
</rule>
<rule stop="Y">
<path>PROXY/workstation A</path>
<src>192.168.33.3/32</src>
</rule>
<rule stop="Y">
<path>PROXY/workstation B</path>
<src>192.168.33.4/32</src>
</rule>
</rule>
</filter>

## 4.2. Описание элементов фильтра

rule - правило фильтра, атрибуты: stop (Y/N) - если правило сработало, суммировать статистику и остановить просмотр правил данного уровня вложенности. dataonly (Y/N) - подсчитывать общую длину пакета, включая заголовок протокола (N), либо только размер данных (Y). При подсчёте заголовок пакета обычно учитывается, ситуация когда необходимо считать только объём передаваемых протоколом данных довольно специфична и на практике используется редко. Реальный передаваемый объём информации в некоторых условиях (плохие линии связи, неоптимальная настройка сетевых служб) может значительно превышать объём данных за счёт фрагментации пакетов.

path - этот элемент на работу фильтра не влияет, однако используется клиентами для отображения статистики в виде древовидной структуры, узлы целевого дерева, которое строится на основании элементов path, разделяются символом "/". Так, из нашего фильтра пользователю будет предоставлена следующая наглядная структура:

Internet
статистика SMTP
PROXY
статистика Boss
статистика workstation A
статистика workstation B

Если элемент path не указан - статистика данного правила пользователю не отображается, далее будет показано как это может быть использовано.

src/dst - адреса, соответственно, источника и приёмника в виде: IP-адрес/маска_сети. Если маска не указана, её значение принимается равным 255.255.255.255 . Маска может быть задана либо в виде 4х чисел, разделённых точками, либо в виде одного числа, указывающего количество бит адреса маски. В одном правиле допускается указание до 255ти адресов источников и/или приёмников. В качестве адреса допускаются ключевые слова: HOST - любой IP-адрес принадлежащий данному компьютеру (на котором запущен tv3), OTHER - любой IP-адрес не принадлежащий данному компьютеру. Также, может быть задан MAC-адрес, например 00:15:f2:d6:fa:f5, в этом случае будут использоваться IP-адреса соответствующие данному MAC-адресу из локальной ARP-таблицы. Если элемент src(dst) не указан, то принимаются пакеты с любыми адресами источника(приёмника).

proto - протокол и порты источника и приёмника (UDP, TCP), либо тип протокола (ICMP). Атрибут name указывает протокол и может принимать значения UDP, TCP, ICMP, OTHER (ни один из предыдущих трёх) или ANY (любой). Значение элемента - списки портов источника и приёмника, разделённые символом ":". Списки могут указывать множество портов через запятую: 25,110,80 и/или диапазоны: 100-3000. Также указываются логические значения больше/меньше/не суффиксами, соответственно "gt","lt","!". Вместо указания портов источника или приёмника можно использовать значение "any" или "*" (любой).

Например:

> <proto name="tcp">gt1023:25,110</proto> - TCP-пакет с порта источника больше 1023 на порт приёмника 25 или 110

> <proto name="udp">!gt1024:100-3000,3050</proto> - UDP-пакет с порта источника 1024 или меньше на порт приёмника от 100 до 3000 включительно, или 3050

> <proto name="icmp">0,9:0,9</proto>

Отдельно нужно отметить, что для указания типа (номера) протокола ICMP оба значения до и после разделителя ":" должны быть одинаковыми. Для типа OTHER оба значения должны быть "*" (или any).

В правиле может быть указано несколько элементов proto. Если не задан ни один элемент proto, то проверка на принадлежность пакета к какому-либо протоколу не осуществляется и учитываются пакеты любых протоколов.

## 4.3. Правила-"ловушки"

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

<rule>
<dst>195.72.224.229/32</dst>
<proto name="tcp">any:25</proto>
<rule stop="Y">
<src>192.168.33.0/255.255.255.0</src>
</rule>
<rule>
<path>Internet/SMTP</path>
</rule>
</rule>

Таким образом, все пакеты на порт 25 из локальной сети на адрес внешнего интерфейса нашего сервера будут попадать в первое вложенное правило, а пакеты из Интернет - во второе. Обратим внимание на то, что элемент path задан только в одном правиле, именно это правило ведёт подсчёт нужной нам статистики. Статистика родительского и первого вложенного правила нас не интересует, поэтому для них задавать path нет смысла и они не будут отображаться клиентами tv3.

## 4.4. Отладка фильтра - «прослушка» правил

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

Удобней всего это сделать через WEB-интерфейс: перейдите в раздел "Filter" (http://localhost:5462/filter) и щёлкните на заголовке интересующего правила. Появится окно в котором, после авторизации, каждые 5-10 секунд будет отображаться информация о нескольких последних попавших в правило пакетах (направление передачи, адреса источника и приёмника, длинна пакета).

Если какая-либо запись в этом списке имеет направление "both" - это означает, что соответствующий пакет повлиял как на «прямую», так и на «обратную» статистику правила, чего не может быть в правильно построенном фильтре.

Для получения этих данных из командной строки используется скрипт <директория tv3>\observer.cmd .

[Назад] [Содержание] [Вперёд]