Атрибут ExtendedAction

Атрибут ExtendedAction задает дополнительные условия для срабатывания правила и/или дополнительные действия, которые должны быть применены при выполнении условий срабатывания правила.

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

Синтаксис

ExtendedAction = inspect_tcp <…>

ExtendedAction = inspect_ftp <…>

ExtendedAction = tcp_flags <…>

ExtendedAction = classify_mark <...>

ExtendedAction = ipsec <...>

ExtendedAction = bit_check <…>

ExtendedAction = app_fw <…>

Значение

      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, прикрепленных к данному правилу. Инициатор проверяет, существует ли уже построенный 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)

      app_fw – задает дополнительную фильтрацию содержимого пакетов в Smart Firewall на уровне приложений. Не имеет параметров.

 

Примечание:

Очень сильно замедляется обработка пакетов, попавших под этот фильтр.

 

Настройка Smart Firewall выполняется в конфигурационном файле /opt/VPNagent/etc/smartfw.ini (для С-Терра Клиент файл расположен в каталоге с установленным Продуктом).

 

Smart Firewall (SmartFW)умеет обрабатывать следующие типы пакетов (L4):

      UDP – фильтрация и блокирование пакета по заданным в smartfw.ini сигнатурам (последовательностям байтов).

      TCP – фильтрация и блокирование потока в следующих случаях:

     Нахождение в потоке заданных в smartfw.ini сигнатур.

     Нахождение в потоке попыток загрузки исполняемых файлов с удалённых серверов по HTTP.

     Нахождение в потоке заблокированных в smartfw.ini HTTP-методов.

Остальные типы пакетов проходят без фильтрации.

 

Описание smartfw.ini

Файл конфигурации состоит из секций:

 

Секция [Filtration]

Используется для описания правил фильтрации пакетов.

Имеет в себе следующие поля:

      http_application_filter – включает или выключает фильтрацию загрузок исполняемых файлов по HTTP.

Значения: yes | no.

 

Не имеет значения по умолчанию. Требуется явно определить. При неуказании значения Smart Firewall не сможет запуститься.

      tcp_signature_filter – задаёт сигнатуры, при наличии которых TCP-поток будет блокироваться.

Состоит из бинарных сигнатур, записанных в шестнадцатеричном формате, разделённых запятыми.

Бинарная сигнатура являет из себя набор байт, записываемых в формате \xAB, где AB – шестнадцатеричное значение байта. Большие и маленькие буквы не различаются. Пробелы пропускаются.

 

      udp_signature_filter – задаёт сигнатуры, при наличии которых UDP-пакет будет блокироваться

Состоит из бинарных сигнатур, записанных в шестнадцатеричном формате, разделённых запятыми.

Бинарная сигнатура являет из себя набор байт, записываемых в формате \xAB, где AB – шестнадцатеричное значение байта. Большие и маленькие буквы не различаются. Пробелы пропускаются.

      blocked_http_methods – задаёт заблокированные HTTP-методы.

Представляет из себя битовую маску операции ИЛИ из кодов заблокированных методов.

Список допустимых методов и их кодов:

    GET – 1

    HEAD – 2

    POST – 4

    PUT – 8

    DELETE – 16

    CONNECT – 32

    OPTIONS – 64

    TRACE – 128

    PATCH – 256.

 

Секция [Logging]

Используется для описания параметров логирования в syslog.

Имеет поле:

      loglevel – определяет уровень логирования.

Значения: EMERG|ALERT|CRIT|ERR|WARNING|NOTICE|INFO|DEBUG

 

Секция [System]

Используется для описания параметров взаимодействия со средой выполнения.

Имеет поле:

      disable – отвечает за отключение от драйвера. Используется по причине единственности интерфейса взаимодействия между драйвером и smartfw/proxy

Значения: yes заставляет сервис не использовать драйвер для получения пакетов.

 

Smart Firewall может посылать следующие сообщения в syslog (на консоль):

 

Blocked udp-packet %IP1(%PORT1) -> %IP2(%PORT2) len: %LEN reason: UDP-filter #%FN

 

udp-пакет с данными параметрами был заблокирован по причине наличия в нем сигнатуры №%FN.

 

Описание параметров:

      %IP1, %PORT1, %IP2, %PORT2ip-адреса и порты источника и назначения udp-пакета.

      %LEN – длина udp-пакета.

      %FN – номер сигнатуры, приведшей к блокировке пакета.

Уровень лога: WARNING

 

Blocked TCP-stream %IP1(%PORT1) -> %IP2(%PORT2) reason: TCP-filter #%FN

 TCP-поток с данными параметрами был заблокирован по причине наличия в нем сигнатуры №%FN.

 

Описание параметров:

      %IP1, %PORT1, %IP2, %PORT2ip-адреса и порты источника и назначения TCP-потока.

      %FN – номер сигнатуры, приведшей к блокировке TCP-потока.

Уровень лога: WARNING

 

Blocked TCP-stream %IP1(%PORT1) -> %IP2(%PORT2) reason: found application in stream

TCP-поток с данными параметрами был заблокирован по причине наличия в нём мобильного кода.

 

Описание параметров:

      %IP1, %PORT1, %IP2, %PORT2ip-адреса и порты источника и назначения TCP-потока.

      %FN – номер сигнатуры, приведшей к блокировке TCP-потока.

Уровень лога: WARNING

 

Blocked TCP-stream %IP1(%PORT1) -> %IP2(%PORT2) reason: found blocked http-method %METHOD

TCP-поток с данными параметрами был заблокирован по причине наличия в нем заблокированного HTTP-метода.

 

Описание параметров:

      %IP1, %PORT1, %IP2, %PORT2ip-адреса и порты источника и назначения TCP-потока

      % METHOD – имя метода, приведшего к блокировке TCP-потока

Уровень лога: WARNING

Значение по

умолчанию

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

Примечание

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

 

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

 

inspect_tcp inspect_ftp

tcp_flags

classify_mark

bit_check

ipsec

app_fw

NetworkInterface.InputFilter

NetworkInterface.OutputFilter

+

+

+

+

+

IPsecAction.InputFilter

IPsecAction.OutputFilter

+

+

+

NetworkInterface.InputClassification

NetworkInterface.OutputClassification

+

+

+

NetworkInterface.IPsecPolicy

+