Атрибут ExtendedAction

Атрибут ExtendedAction задает дополнительные условия для срабатывания правила и/или дополнительные действия, которые должны быть применены при выполнении условий срабатывания правила. Условия (действия) задаются в виде синтаксической конструкции "процедура". То есть указывается имя и именованные параметры в угловых скобках.

Синтаксис

ExtendedAction = inspect_tcp <…>

ExtendedAction = inspect_ftp <…>

ExtendedAction = tcp_flags <…>

ExtendedAction = classify_mark <...>

ExtendedAction = ipsec <...>

ExtendedAction = bit_check <…>

Значение

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

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

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

Параметры для inspect_tcp и inspect_ftp

Имя параметра

Тип

Значения

По умолчанию

flags

список значений ЦЕЛОЕ32

AUDIT, NOALERT

включены предупреждения, отключен аудит

timeout

ЦЕЛОЕ32

 

берется из FirewallParameters.TCPEstablishedTimeout

AUDIT – формировать сообщения при закрытии состояния со статистической информацией.

NOALERT – не формировать сообщения о потенциальных атаках (попытках взлома).

timeout – время хранения информации о неактивном соединении, этот парамeтр переопределяет время жизни установившегося соединения.

 

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

Параметры для inspect_tcp и inspect_ftp

Имя параметра

Тип

Значения

По умолчанию

set

список значений ЦЕЛОЕ32

SYN, FIN, ACK, PSH, RST, URG

нет требований

clear

список значений ЦЕЛОЕ32

SYN, FIN, ACK, PSH, RST, URG

нет требований

any_set

список значений ЦЕЛОЕ32

SYN, FIN, ACK, PSH, RST, URG

нет требований

any_clear

список значений ЦЕЛОЕ32

SYN, FIN, ACK, PSH, RST, URG

нет требований

set – флаги, которые обязательно должны быть выставлены.

clear – флаги, которые должны быть сброшены.

any_set – любой из указанных флагов может быть выставлен для совпадения.

any_clear – любой из указанных флагов может быть сброшен для совпадения.

Флаги задаются константами, значение которых соответствует кодированию в заголовке TCP. Если флаги заданы списком, значения объединяются операцией "логическое или". Можно задать несколько флагов сразу одним числом. Например, следующие записи эквивалентны:

14h

ACK, RST

4, 10h

4, 4, 4, 16

Флаги, выставленные в TCP-заголовке пакета, должны совпадать с флагами, заданными по set, clear и одному из any_set или any_clear.

classify_mark – проверяет и/или выставляет TOS-байт в IP-пакетах.

Параметры для classify_mark

Имя параметра

Тип

Значения

По умолчанию

tos_set

ЦЕЛОЕ32

0-255

0

tos_set_mask

ЦЕЛОЕ32

0-255

0, значение TOS-байта не меняется

tos_match

список значений ЦЕЛОЕ32

0-255

байт TOS не влияет на совпадения фильтра

tos_match_mask

ЦЕЛОЕ32

0-255

маска должна быть отлична от нуля, если список tos_match не пуст

tos_set, tos_set_mask – если маска не нулевая, то в TOS-байте заголовка пакета будут выставлены биты, соответствующие tos_set.

tos_match, tos_match_mask – задают дополнительные ограничения на совпадение фильтра. Фильтр будет считаться подходящим только в том случае, если одно из значений tos_match совпадет со значением TOS-байта пакета в битах, ограниченных tos_match_mask.

 

ipsec – указывает, что пакет должен быть обработан с помощью IPsec.

Параметры для ipsec

Имя параметра

Тип

Значения

По умолчанию

sa

список IPsecAction

 

обязательное поле

fallback_action

ЦЕЛОЕ32

REQUEST_SA,PASS,DROP

REQUEST_SA

sa_requests_max

ЦЕЛОЕ32

 

8

packets_waiting_max

ЦЕЛОЕ32

 

8

sa – список IPsec-правил, которые могут быть использованы для создания SA, прикрепленных к данному правилу. Инициатор всегда использует первое IPsecAction

fallback_action – действие, выполняемое в случае отсутствия SA. По умолчанию – REQUEST_SA.

REQUEST_SA – посылать запрос в демон, ставить пакет в очередь

PASS – пропускать пакет без IPsec-обработки

DROP – уничтожать пакет.

Входящие пакеты, попадающие на действие с флагом REQUEST_SA, также будут уничтожены.

sa_requests_max – максимальное количество неотвеченных запросов на создание SA bundle, отправленных в демон по данному правилу.
Есть и общее ограничение на количество запросов – значение можно задать через drv_mgr – параметр ipsec_breq_max (значение по умолчанию – 1000). Текущее количество запросов доступно через drv_mgr – параметр ipsec_breq_count.

packets_waiting_max – размер очереди в пакетах, ожидающих приход SA bundle.

bit_check – задает дополнительную фильтрацию по любым значимым полям IP-заголовка пакета и полям данных. Поля задаются в виде диапазона битов.

Параметры для bit_check

Имя параметра

Тип

Значения

По умолчанию

origin

 

IP_HDR – смещение считается от начала пакета (начала IP-заголовка) или IP_DATA – смещение считается начиная с первого байта данных после IP-заголовка.

IP_HDR

bit-range

диапазон битов

 

 

operation

 

EQUAL (равно), LESS (меньше), GREATER (больше)

EQUAL

value

неотрицательное число

 

 

origin – начальное смещение для bit-range.

bit-range – диапазон битов, которые проверяется. Задается в формате bit_offset1..bit_offset2, где bit_offset – неотрицательные смещения в пакете относительно origin в битах.
Допускается, чтобы bit_offset1 и bit_offset2 совпадали, но второе смещение должно быть не меньше первого. Диапазон должен закрывать не более 32 бит, следовательно, разница bit_offset2-bit_offset1 не должна быть больше 31.

operation – операция сравнения. Операция выполняется над значением, извлеченным из пакета по адресу bit-range и значением value. Данные пакета интерпретируются как неотрицательное число, bit_offset1 является старшим битом числа, bit_offset2 – младшим битом числа.

value – значение, с которым сравниваются данные пакета.

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

bit_check влияет именно на совпадение фильтра, а не приводит к каким-то дополнительным действиям, если совпадение обнаружено. Таким образом, поля Action, Log интерпретируются после проверки bit_check.

Если смещение bit_offset2 выходит за пределы пакета, пакет будет уничтожен.

Пакеты, подвергаемые проверке bit_check, не проходят сборку (IP reassembly). Но если важно, чтобы пакет не был собран до выполнения bit_check, необходимо помещать фильтры с bit_check вначало цепочки фильтров – другие фильтры могут вызывать сборку пакетов (например, фильтрация по TCP или UDP портам). Кроме того, действия inspect_tcp или inspect_ftp могут привести к сборке пакета, даже если фильтры с этими действиями стоят в цепочке позже, чем bit_check.

Пример

Ниже в первом правиле задано - не пропускать пакеты, у которых длина заголовка пакета больше 5: это 4-битовое поле (4..7) Header length имеет значение больше 5. Во втором правиле указано - уничтожать пакеты протокола 17, у которых номер порта "Destionation Port" свыше 300, а значение "Destination IP" - 7.7.7.212.

Filter (

       ExtendedAction = bit_check[[4..7, GREATER, 5]]

       Action = DROP

       LogEventID = "\"options in IP header\""

), Filter (

       ProtocolID = 17

       ExtendedAction = bit_check [[128..159,070707D4h],[IP_DATA,16..31,LESS,300]]

       LogEventID = "\"special packet\""

       Action = DROP

)

 

Допустимые значения ExtendedAction для разных применений FilterChain приведены в нижеследующей таблице.

 

inspect_tcp inspect_ftp

tcp_flags

classify_mark

bit_check

ipsec

NetworkInterface.InputFilter

NetworkInterface.OutputFilter

+

+

+

+

IPsecAction.InputFilter

IPsecAction.OutputFilter

+

+

+

NetworkInterface.InputClassification

NetworkInterface.OutputClassification

+

+

+

NetworkInterface.IPsecPolicy

+

Если ExtendedAction не соответствует применению FilterChain, выдается ошибка разбора конфигурации.

Значение по умолчанию   отсутствуют специальные действия над пакетом.