Универсальные правила являются мощным и гибким механизмом создания
фильтров с помощью булевой логики. Требуются лишь элементарные
знания математики и логики; синтаксис правил несложен для
понимания.
Обзор
Чтобы создать новое правило, задайте ему произвольное имя в
поле
Имя,
выберите действие
(Захват пакетов/Игнорировать пакеты),
в поле
Формула
задайте формулу, пользуясь синтаксисом, описанным ниже, и
нажмите
Добавить/Изменить.
Новое правило будет добавлено в список и немедленно активизировано.
Вы можете задать неограниченное количество правил, но активными из
них буду лишь те, возле которых будет установлена метка. Любое
правило можно включить/выключить, изменяя соответствующий флажок,
либо совсем удалить правило с помощью кнопки
Удалить.
Если активны сразу несколько правил, вы можете выполнить
комбинированное правило, нажав на кнопку
Оценить.
Обратите внимание, что отдельные правила объединяются логическим
оператором OR ("ИЛИ"). Пример: для трех активных правил RULE1,
RULE2, RULE3, результирующим будет правило RULE1 OR RULE2 OR
RULE3.
Можно пользоваться составными правилами совместно с обычными,
описанными в предыдущей главе. Однако, если вы владеете булевой
логикой, рекомендуем пользоваться только составными, так как они
более гибки. Обычные правила объединяются с составными с помощью
логического оператора AND ("И").
Описание синтаксиса
dir
– Направление пакета. Возможные значения - in (входящий), out
(исходящий) и pass (транзитный).
etherproto
– Протокол Ethernet (13-й и 14-й байты пакета). Допустимыми
значениями являются числа (например,
etherproto=0x0800
соответствует протоколу IP) или известные аббревиатуры
(например,
etherproto=ARP,
что соответствует 0x0806).
ipproto
– Протокол IP. Допустимыми значениями являются числа
(например,
ipproto!=0x06
соответствует протоколу TCP) или известные аббревиатуры
(например,
ipproto=UDP,
что соответствует 0x11).
smac
– MAC источника. Допустимыми значениями являются MAC-адреса
источников в шестнадцатеричном виде (например,
smac=00:00:21:0A:13:0F)
или
алиасы.
dmac
– MAC получателя.
sip
–
IP- или IPv6-адрес источника. Допустимыми значениями являются
IP-адреса, записанные через точку (например,
sip=192.168.0.1
или
sip= fe80::02c0:26ff:fe2d:edb5),
IP-адреса с карт-бланшами (например,
sip!=*.*.*.255,
кроме адресов IPv6), сетевые адреса с масками подсетей
(например,
sip=192.168.0.4/255.255.255.240
или
sip=192.168.0.5/28),
диапазоны IP-адресов (то есть,
sip from 192.168.0.15 to 192.168.0.18
или
sip in 192.168.0.15 ... 192.168.0.18)
или
алиасы.
Для работы с адресами IPv6 требуется версия Windows XP или выше, а
также установленный протокол IPv6.
dip
- IP-адрес получателя.
sport
– Номер порта-источника пакета TCP или UDP. Допустимыми значениями
являются числа (например,
sport=80
соответствует HTTP), диапазоны (то есть,
sport from 20 to 50
или
sport in 20..50
для любых портов в диапазоне от 20 до 50) или алиасы,
известные операционной системе (например,
sport=ftp,
что соответствует порту 21). Проверить список алиасов, известных
ОС, можно нажав
Вид => Информация о портах.
dport
– Порт-получатель пакетов TCP или UDP.
flag
– Флаг TCP. Допустимыми значениями являются числа (например,
0x18
соответствует PSH ACK), одна или несколько букв из следующего
списка:
F
(FIN),
S
(SYN),
R
(RST),
P
(PSH),
A
(ACK) и
U
(URG) или ключевое слово has, означающее, что флаг содержит
определённое значение. Например:
flag=0x18,
flag=SA,
flag has F.
size
– Размер пакета. Допустимыми значениями являются числа
(например,
size=1514)
или диапазоны (size
from 64 to 84
или
size in 64..84
для размеров с 64 до 84 байтов).
str
– Содержимое пакета. Задает условие, что пакет должен содержать
определённую строку. Функция имеет три аргумента: образец поиска,
местоположение, чувствительность к регистру. Первый аргумент –
строка, например,
'GET'.
Второй аргумент – число, показывающее смешение строки в пакете.
Счёт начинается с нуля – первый байт пакета надо искать, задавая
смещение равное 0. Чтобы искать строку в любом месте пакета,
задайте смещение равным –1. Третий аргумент устанавливает
чувствительность к регистру и может принимать значения
false
(без учёта регистра) или
true
(с учётом регистра). Второй и третий аргументы необязательны, по
умолчанию имеют значения –1 и
false
соответственно (искать во всём пакете, без учёта регистра).
Примеры:
str('GET',-1,false),
str('GET',-1),
str ('GET').
hex
- Содержимое пакета. Задает условие, что пакет должен содержать
определённый 16-ричный набор. Функция имеет два аргумента:
образец поиска и местоположение. Первый аргумент – 16-ричная
величина, например,
0x4500.
Второй аргумент – число, задающее смещение внутри пакета. Отсчёт
ведется с нуля, т. е. первый байт пакета соответствует смещению,
равному 0. Чтобы искать во всём пакете, задайте смещение равным –1.
Второй аргумент необязателен, по умолчанию имеет значение –1
(искать во всём пакете). Пример:
hex(0x04500, 14)
,
hex(0x4500, 0x0E),
hex (0x010101).
bit
- Содержимое пакета. Задает условие, что пакет должен содержать по
указанному смещению определённый бит, имеющий значение 1. В этом
случае функция вернёт код возврата
true.
Если же искомый бит имеет значение 0 или находится за пределами
пакета - функция вернёт код возврата
false.
Первый аргумент – номер бита в байте, начиная с нуля; допустимые
значения 0-7. Таким образом, если вы ищете восьмой бит, установите
номер равным семи. Второй аргумент – число, обозначающее смещение
байта в пакете, начиная с нуля, то есть, если нужен первый байт
пакета – смещение должно быть равно
0.
Оба аргумента обязательны, например:
bit(0, 14)
,
bit(5, 1).
Вышеописанные ключевые слова можно использовать со следующими
операторами:
and
- конъюнкция, булево И.
or
- дизъюнкция, булево ИЛИ.
not
- булево отрицание.
=
- Арифметическое равенство.
!=
- Арифметическое неравенство.
<>
- Арифметическое неравенство.
>
- Арифметическое условие "больше, чем".
<
- Арифметическое условие "меньше, чем".
( )
– скобки, управляющие порядком вычисления правил.
Числа могут быть в десятичной или шестнадцатеричной системе. Для
указания на шестнадцатеричную нотацию, используйте 0x перед
значением, например, 15 и 0x0F задают одно и тоже
число.
Примеры
Ниже приведены несколько примеров, поясняющих синтаксис правил. К
каждому правилу даны комментарии, отделяемые двойной косой
чертой.
·dir!=pass
// Захватывать только входящие и исходящие пакеты. Транзитные
пакеты игнорируются.
·(smac=00:00:21:0A:13:0E
or
smac=00:00:21:0A:13:0F)
and
etherproto=arp
// Захватывать пакеты ARP, посылаемые двумя компьютерами с MAC
00:00:21:0A:13:0E и 00:00:21:0A:13:0F.
·ipproto=udp
and
dport=137
// Захватывать пакеты UDP/IP, посылаемые в порт 137.
·dport=25
and
str('RCPT
TO:', -1, true)
// Захватывать пакеты TCP/IP или UDP/IP, содержащие строку "RCPT
TO:" и направляемые в порт 25.
·not
(sport>110)
// Захватывать все пакеты, кроме тех, что имеют порт-источник с
номером выше 110.
·(sip=192.168.0.3
and
dip=192.168.0.15)
or
(sip=192.168.0.15
and
dip=192.168.0.3)
// Захватывать только IP-пакеты, следующие между двумя хостами,
192.168.0.3 и 192.168.0.15. Все остальные игнорируются.
·((sip
from
192.168.0.3
to
192.168.0.7)
and
(dip
=
192.168.1.0/28))
and (flag=PA)
and (size
in
200..600)
// Захватывать TCP-пакеты, размер которых лежит в диапазоне
от 200 до 600 байтов, приходящие с IP-адресов в диапазоне
192.168.0.3 - 192.168.0.7, причем IP-адреса получателей
находятся в сегменте 192.168.1.0/255.255.255.240, и имеющие
TCP-флаг PSH ACK.
·Hex(0x0203,
89)
and
(dir<>in)
// Захватывать пакеты, содержащие 0x0203 в смещении 89, при этом
направление пакета - не "входящий".
|