.. _fwgl: Межсетевой экран ================ В ПАК “Фортикс” межсетевой экран (далее по тексту МЭ, firewall) обеспечивает фильтрацию трафика, модификацию пакетов и трансляцию адресов (NAT). Все настройки МЭ осуществляются на следующем уровне конфигурации: :: [edit firewall] .. _zonefirewall: Зонный межсетевой экран ----------------------- .. _zone: Зоны ~~~~ Основная единица защиты в зонном firewall — зона, формирование которой осуществляется по следующему принципу: интерфейсы со схожими назначениями объединяются в зоны, и, в зависимости от уровня доверия между ними, выстраиваются соответствующие правила доступа для них. При этом один интерфейс может принадлежать только одной зоне или не принадлежать никакой. Самый простой пример — две зоны, одна из которых для “внешних” интерфейсов, трафику с которых нельзя доверять, вторая — для “внутренних”. Кроме того, возможно добавление зоны DMZ для серверов, компрометация которых не должна привести к проникновению во “внутреннюю” зону. Настройка зон осуществляется на следующем уровне конфигурации: :: [edit firewall zone ] |noindent| где ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``drop-policy to-zone|from-zone|both`` – указать блокируемые соединения, где ``to-zone`` – входящие соединения от других зон или интерфейсов, не принадлежащих ни одной зоне, ``from-zone`` – исходящие соединения, ``both`` – входящие и исходящие соединения; - ``interface `` – указать интерфейс, водящий в зону, где ```` – имя существующего интерфейса. Настройка ``drop-policy`` применяется для базовой настройки доступа в зонах и обладает наименьшими привилегиями. Данная настройка не оказывает никакого влияния на трафик, проходящий внутри зоны. Пример конфигурации зон: :: firewall { zone lan { interface en2 interface en3 drop-policy to-zone } zone wan { interface en0 drop-policy from-zone } zone dmz { interface en1 drop-policy from-zone } } В данном примере заданы три зоны (``lan``, ``wan``, ``dmz``), между которыми распределены интерфейсы ``en0``,\ ``en1``,\ ``en2``,\ ``en3``, определены базовые ограничения настройкой ``drop-policy``. Таблица :numref:`%s ` отображает, какие соединения разрешены в зонах, а какие запрещены (в строках указаны интерфейсы, на которые приходит первый пакет соединения, в столбцах — через которые он отсылается согласно таблице маршрутизации). .. _table-firewall-zone-config-example: .. list-table:: Пример настройки зон :header-rows: 1 - - Интерфейс - en0 - en1 - en2 - en3 - local - - en0 - ``+`` (self) - ``-`` (from wan) - ``-`` (from wan, to lan) - ``-`` (from wan, to lan) - ``-`` (from wan) - - en1 - ``-`` (from dmz) - ``+`` (self) - ``-`` (from dmz, to lan) - ``-`` (from dmz, to lan) - ``-`` (from dmz) - - en2 - ``+`` - ``+`` - ``+`` (self) - ``+`` (self) - ``+`` - - en3 - ``+`` - ``+`` - ``+`` (self) - ``+`` (self) - ``+`` - - local - ``+`` - ``+`` - ``-`` (to lan) - ``-`` (to lan) - ``+`` (self) Символом “+” отмечен трафик, который пропускается настройками ``drop-policy`` (в скобках указано ``self``, если трафик проходит внутри одной зоны и не может быть ограничен настройками ``drop-policy``). Символом “-” отмечен трафик, который блокируется (в скобках указано, каким именно правилом: например, запись ``from wan`` означает, что трафик заблокирован настройкой ``drop-policy from-zone`` зоны ``wan``, ``to lan`` — ``drop-policy to-zone`` зоны ``lan``). Для управления трафиком, источником или получателем которого является ПАК “Фортикс”, применяется специальная псевдозона ``local`` (в таблице обозначена как интерфейс ``local``). К трафику данной зоны неприменимы настройки ``drop-policy``, для его фильтрации применяются политики (см. подпункт :numref:`{number} {name} `). .. _fwfilters: Фильтры ~~~~~~~ Для более точного отбора трафика в зонном firewall используются фильтры, которые объединяются в политики (см. подпункт :numref:`{number} {name} `). Фильтр зонного firewall состоит из списка правил (``rule``), по которым осуществляется отбор трафика. Каждое правило из списка состоит из критериев отбора и действия ``action``, которое применяется в случае выполнения критериев. При формировании списка правил важен порядок их указания в конфигурации: чем раньше указано правило в конфигурации (чем выше правило в списке), тем оно приоритетнее. Первый пакет соединения проходит по очереди через все правила до тех пор, пока не попадёт в первое, соответствующее ему и имеющее действие ``action``, отличное от отключающего применение правила (``disabled``). Фильтры применяются отдельно к IPv4- и IPv6-трафику. Настройка фильтров осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 filter ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание фильтра, где ```` – строка; - ``rule `` – указать правило, соответствующее данному фильтру, где ```` – имя правила (см. ниже). Настройка правил фильтра осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 filter rule ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание правила, где ```` – строка; - ``from address
|file-list |network `` – (критерий отбора) указать адрес(а) источника, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``to address
|file-list |network `` – (критерий отбора) указать адрес(а) назначения, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя файла существующего списка сетей (см. подпункт :numref:`{number} {name} `); - ``from-port `` – (критерий отбора) указать исходящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – числа от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``to-port `` – (критерий отбора) указать входящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – числа от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``from-interface `` – (критерий отбора) указать интерфейс источника, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``to-interface `` – (критерий отбора) указать интерфейс назначения, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``dscp [value ] [mask ]`` – (критерий отбора) указать значения поля dscp, по которым осуществляется отбор трафика, где ```` – hex-значение ``0x00..0x3f`` или одно из представленных в командной строке стандартных значений, ```` – hex-значение ``0x00..0x3f`` или одно из представленных в командной строке стандартных значений; - ``protonum `` – (критерий отбора) указать номер протокола, по которому осуществляется отбор трафика, где ```` – число от 0 до 255; - ``tcp|udp|icmp`` (для IPv4-трафика) – (критерий отбора) указать протокол, по которому осуществляется отбор трафика, и перейти на уровень конфигурации протокола (не может быть задано вместе с настройкой ``protonum``); - ``tcp|udp|icmpv6`` (для IPv6-трафика) – (критерий отбора) указать протокол, по которому осуществляется отбор трафика, и перейти на уровень конфигурации протокола (не может быть задано вместе с настройкой ``protonum``); - ``timestart `` – (критерий отбора) указать начальное время выполнения правила, где ```` – строка в формате ``HH:MM[:SS]``; - ``timestop `` – (критерий отбора) указать конечное время выполнения правила, где ```` – строка в формате ``HH:MM[:SS]``; - ``datestart `` – (критерий отбора) указать начальную дату (и время) выполнения правила, где ```` – строка в формате ``YYYY-MM-DD[THH:MM[:SS]]``, по умолчанию – 00:00:00; - ``datestop `` – (критерий отбора) указать конечную дату (и время) выполнения правила, где ```` – строка в формате ``YYYY-MM-DD[THH:MM[:SS]]``, по умолчанию – 00:00:00); - ``connlimit `` – (критерий отбора) указать максимальное число активных соединений, попадающих под критерии отбора, для которых выполняется правило, где ```` – число от 0 до 4294967295; - ``log`` – перейти на уровень конфигурации журналирования пакетов (см. подраздел :numref:`{number} {name} `); - ``counter `` – указать счётчик срабатывания правила, где ```` – имя счётчика (см. пункт :numref:`{number} {name} `); - ``action `` – указать действие, применяемое при выполнении критериев отбора, где ```` – строка (см. ниже). Предусмотрены следующие действия для настройки ``action``: - ``disabled`` — отключить применение правила (применяется для временного отключения правила, например, если необходимо временно предоставить доступ к некоторому ресурсу); - ``accept`` — разрешить соединение и прекратить его дальнейшую проверку зонным firewall; - ``drop`` — запретить соединение без отправки ICMP-уведомления; - ``reject`` — запретить соединение с отправкой источнику ICMP-уведомления (ICMPv6-уведомления для IPv6) ``port-unreachable``; - ``return`` — прекратить обработку пакета в данном фильтре (в таком случае соединение обрабатывается настройкой ``default-action`` политики (см. подпункт :numref:`{number} {name} `) или настройкой ``drop-policy``). .. _networklistandservice: Списки сетей и сервисы ^^^^^^^^^^^^^^^^^^^^^^ Для указания нескольких адресов источника или назначения возможно использование списков сетей. Настройка списков сетей осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 network ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание списка сетей, где ```` – строка; - ``address
`` – указать адрес, входящий в данный список сетей, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации; - ``network `` – указать существующий список сетей, содержимое которого включается в данный список, где ```` – имя существующего списка сетей. Пример конфигурации списка сетей: :: firewall { ipv4 { network blocklist-common { address 1.1.1.0/24 address 3.3.0.0/16 address 7.8.1.2 } network blocklist-lan { network blocklist-common address 4.4.4.4 } } } Возможно хранение списка сетей в файле. Настройка файла списка сетей осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 file-list ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание файла списка сетей, где ```` – строка; - ``path `` – указать путь к файлу списка сетей, где ```` – полное имя файла. Каждая запись файла списка сетей начинается с новой строки и может являться: - IP-адресом (например, ``192.168.1.1``); - сетью (например, ``192.168.0.0/24``); - диапазоном (например, ``192.168.0.100-192.168.0.200``). Пример конфигурации файла списка сетей: :: firewall { ipv4 { file-list geoip-RU path /share/list-RU.nft } } При выполнении команды ``commit`` после настройки файла списка сетей его содержимое считывается и преобразовывается в список сетей ``geoip-RU``. Для обновления списка сетей, полученного из файла списка сетей, без перезагрузки подсистемы firewall применяется команда: :: > firewall update file-list ipv4|ipv6 |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – псевдоним файла списка сетей в конфигурации. Пример применения команды для обновления списка сетей, полученного из файла ``/share/list-RU.nft``: :: > firewall update file-list ipv4 geoip-RU Для указания нескольких входящих и исходящих портов возможно использование списков портов (сервисов). Настройка сервисов осуществляется на следующем уровне конфигурации: :: [edit firewall service ] |noindent| где ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание сервиса, где ```` – строка; - ``tcp `` – указать TCP-порт(ы), входящий(ие) в данный сервис, где ```` – строка в формате ``n[-m]`` (``n``, ``m`` – числа от 1 до 65535); - ``udp `` – указать UDP-порт(ы), входящий(ие) в данный сервис, где ```` – строка в формате ``n[-m]`` (``n``, ``m`` – числа от 1 до 65535); - ``service `` – указать существующий сервис, содержимое которого включается в данный сервис, где ```` – имя существующего сервиса. Пример конфигурации сервиса: :: firewall { service http { tcp 80 tcp 443 } } Пример ^^^^^^ Пример конфигурации фильтров: :: firewall { ipv4 { filter allow-http { rule 1 { to-port service http to address 192.168.130.4 action accept } } filter blocklist-common { rule 1 { to network blocklist-common action drop } } filter blocklist-lan { rule 1 { to network blocklist-lan action drop } } filter allow-admin { rule 1 { from address 192.168.2.87 action accept } } } } .. _politics: Политики ~~~~~~~~ Политики зонного firewall определяют настройки доступа для соединений одного направления между двумя зонами. Каждая политика содержит фильтры (см. пункт :numref:`{number} {name} `) и (опционально) действие по умолчанию ``default-action``, которое выполняется в случае неприменимости фильтров. Возможно определение политики для соединения из зоны в саму себя, применяемой для трафика между интерфейсами одной зоны. Настройка политик осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 policy to ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – имя существующей зоны, из которой осуществляется соединение; - ```` – имя существующей зоны, в которую осуществляется соединение. На данном уровне конфигурации доступны следующие настройки: - ``filter `` – указать имя фильтра, относящегося к данной политике, где ```` – имя существующего фильтра, возможно указание нескольких настроек данного уровня конфигурации; - ``default-action `` – указать действие по умолчанию для политики, если ни один фильтр политики неприменим, где ```` – строка (см. ниже). Предусмотрены следующие действия по умолчанию ```` для настройки ``default-action ``: - ``accept`` – разрешить соединение и прекратить его дальнейшую проверку зонным firewall; - ``disabled`` – отключить применение политики; - ``drop`` – запретить соединение без отправки ICMP-уведомления; - ``reject`` – запретить соединение с отправкой источнику ICMP-уведомления (ICMPv6-уведомления для IPv6) ``port-unreachable``. Пример конфигурации политик: :: firewall { ipv4 { policy dmz to wan { default-action accept filter blocklist-common } policy wan to dmz filter allow-http policy lan to dmz filter allow-http policy lan to wan { filter blocklist-lan } policy local to wan { filter blocklist-common } policy lan to local { default-action drop filter allow-admin } } } Алгоритм отбора трафика ~~~~~~~~~~~~~~~~~~~~~~~ 1) Если к соединению применимы правила фильтров, выполняется действие ``action`` первого из применимых правила фильтра. Дальнейший отбор трафика не осуществляется. 2) Если к соединению не применим ни один фильтр, но применимы политики, применяется ``default-action`` первой из применимых политики. Дальнейший отбор трафика не осуществляется. 3) Если к соединению не применимы ни фильтры, ни политики, применяются настройки ``drop-policy``. Пример настройки зонного межсетевого экрана ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Объединённая из примеров выше конфигурация зонного firewall: :: firewall { service http { tcp 80 tcp 443 } zone lan { interface en2 interface en3 drop-policy to-zone } zone wan { interface en0 drop-policy from-zone } zone dmz { interface en1 drop-policy from-zone } ipv4 { network blocklist-common { address 1.1.1.0/24 address 3.3.0.0/16 address 7.8.1.2 } network blocklist-lan { network blocklist-common address 4.4.4.4 } policy dmz to wan { default-action accept filter blocklist-common } policy wan to dmz filter allow-http policy lan to dmz filter allow-http policy lan to wan { filter blocklist-lan } policy local to wan { filter blocklist-common } policy lan to local { default-action drop filter allow-admin } filter allow-http { rule 1 { to-port service http to address 192.168.130.4 action accept } } filter blocklist-common { rule 1 { counter cnt-blocklist to network blocklist-common action drop } } filter blocklist-lan { rule 1 { counter cnt-blocklist to network blocklist-lan action drop } } filter allow-admin { rule 1 { counter cnt-allow-admin from address 192.168.2.87 action accept } } } } В данном примере: - созданы четыре фильтра, каждый из которых состоит из одного правила: - фильтры ``blocklist-common`` и ``blocklist-lan`` блокируют соединения к сетям из списков сетей; - фильтр ``allow-http`` разрешает соединения к web-серверу; - фильтр ``allow-admit`` разрешает соединения от источника с адресом 192.168.2.87; - разрешён трафик из зоны ``dmz`` в зону ``wan``; - разрешён доступ к web-серверу, расположенному в зоне ``dmz``, из остальных зон; - добавлены два списка блокировки трафика в зоне ``wan``: - для зоны ``lan``; - для зон ``lan``, ``dmz`` и псевдозоны ``local``; - разрешён доступ к самому маршрутизатору только для администратора из зоны ``lan``. Настройки ``drop-policy`` данного примера подробно описаны в Таблице 3. Трансляция адресов (NAT) ------------------------ Механизм NAT применяется для преобразования адресов и портов проходящих пакетов. Предусмотрены замены двух типов: - SNAT (замена адреса источника); - DNAT (замена адреса назначения). При этом замена осуществляется только в первом пакете соединения. После прохождения первого пакета для соединения создаётся специальная ассоциация, которая, в зависимости от направления, заменяет адрес назначения или источника. Например, если у первого пакета заменён адрес назначения при помощи механизма DNAT, у ответного пакета заменяется адрес источника. Настройка NAT осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 nat] |noindent| где ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6. SNAT (замена адреса источника) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Механизм SNAT представляет собой набор правил, который применяется к трафику из выходного интерфейса или выходной зоны. Настройка механизма SNAT осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 nat source] |noindent| где ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6. На данном уровне конфигурации доступны следующие настройки: - ``ruleset `` – указать набор правил, применяемый к механизму SNAT, где ```` – имя набора правил (см. ниже). Настройка наборов правил осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 nat source ruleset ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``to-interface `` – указать выходной интерфейс, к которому применяется набор правил, где ```` – имя существующего интерфейса; - ``to-zone `` – указать выходную зону, к которой применяется набор правил, где ```` – имя существующей зоны; - ``rule `` – указать правило, входящее в набор правил, где ```` – имя правила (см. ниже). Настройка правил осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 nat source ruleset rule ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``log`` – перейти на уровень конфигурации журналирования пакетов (см. подраздел :numref:`{number} {name} `); - ``from address
|file-list |network `` – (критерий отбора) указать адрес(а) источника, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``to address
|file-list |network `` – (критерий отбора) указать адрес(а) назначения, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``from-port `` – (критерий отбора) указать исходящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – число от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``to-port `` – (критерий отбора) указать входящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – число от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``from-interface `` – (критерий отбора) указать интерфейс источника, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``to-interface `` – (критерий отбора) указать интерфейс назначения, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``snat-ip
`` – изменить адрес источника на известный заранее, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации; - ``snat-netmap
`` – отобразить в указанную подсеть, причём младшая часть адреса остается неизменной (например, настройка ``snat-natmap 10.3.0.0/16`` приведёт к замене адреса ``192.168.85.132`` на ``10.3.85.132``), где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации; - ``snat-masquerade`` – изменить адрес источника на адрес выходного интерфейса; - ``snat-port `` – (в комбинации с ``snat-ip``, ``snat-masquerade`` или ``snat-netmap``) изменить порт источника, где ```` – число от 1 до 65535; - ``return`` — прекратить обработку пакета в данном фильтре (в данном случае соединение обрабатывается настройкой ``default-action`` политики (см. подпункт :numref:`{number} {name} `) или настройкой ``drop-policy``). Пример конфигурации механизма SNAT для дополнения примера подраздела :numref:`{number} {name} `: :: firewall { ipv4 { nat { source { ruleset out { to-zone wan rule 1 { snat-masquerade } } } } } } В данном примере для доступа в зону ``wan`` отображаются адреса источника пакетов на адрес выходного интерфейса. DNAT (замена адреса назначения) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Механизм DNAT аналогичен SNAT, но заменяет адрес назначения, а не источника. Настройка механизма DNAT осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 nat destination] |noindent| где ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6. На данном уровне конфигурации доступны следующие настройки: - ``ruleset `` – указать набор правил, применяемый к механизму DNAT, где ```` – имя набора правил (см. ниже). Настройка набора правил осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 nat destination ruleset ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``from-interface `` – указать входной интерфейс, к которому относится набор правил, где ```` – имя существующего интерфейса; - ``from-zone `` – указать входную зону, к которой относится набор правил, где ```` – имя существующей зоны; - ``rule `` – указать правило, входящее в набор, где ```` – имя правила (см. ниже). Настройка правил осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 nat source ruleset rule ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – имя набора правил (строка длиной от 1 до 128 символов); - ```` – имя правила (строка длиной от 1 до 128 символов). На данном уровне конфигурации доступны следующие настройки: - ``log`` – перейти на уровень конфигурации журналирования пакетов; - ``from address
|file-list |network `` – (критерий отбора) указать адрес(а) источника, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``to address
|file-list |network `` – (критерий отбора) указать адрес(а) назначения, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``from-port `` – (критерий отбора) указать исходящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – число от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``to-port `` – (критерий отбора) указать входящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – число от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``from-interface `` – (критерий отбора) указать интерфейс источника, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``to-interface `` – (критерий отбора) указать интерфейс назначения, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``dnat-ip
`` – изменить адрес назначения на известный заранее, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации; - ``dnat-netmap
`` – отобразить в указанную подсеть, причём младшая часть адреса остаётся неизменной (например, настройка ``dnat-natmap 10.3.0.0/16`` приведёт к замене адреса ``192.168.85.132`` на ``10.3.85.132``), где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации; - ``dnat-masquerade`` – изменить адрес назначения на адрес входного интерфейса (перенаправить трафик в зону ``local``); - ``dnat-port `` – (в комбинации с ``dnat-ip``, ``dnat-masquerade`` или ``dnat-netmap``) изменить порт назначения, где ```` – число от 1 до 65535; - ``return`` — прекратить обработку пакета в данном фильтре (в данном случае соединение обрабатывается настройкой ``default-action`` политики (см. подпункт :numref:`{number} {name} `) или настройкой ``drop-policy``). Пример конфигурации DNAT: :: firewall { ipv4 { nat { destination { ruleset in { from-zone wan rule 1 { to-port service http dnat-ip 192.168.130.4 } } } } } } В примере подраздела :numref:`{number} {name} ` адрес HTTP-сервера — ``192.168.130.4``, при этом по данному адресу сервер не доступен из зоны ``wan``. После применения данной конфигурации все соединения на порты 80 и 443 (см. ``service http`` в подпункте :numref:`{number} {name} `) перенаправляются на HTTP-сервер. Основной межсетевой экран (Netfilter) ------------------------------------- Основной межсетевой экран ``netfilter`` позволяет работать попакетно и модифицировать пакеты. Подсистема ``netfilter`` работает независимо от зонного firewall, то есть, если пакет принят в одном из firewall, он может быть отброшен в другом. Настройка основного МЭ осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 netfilter] |noindent| где ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6. На данном уровне конфигурации доступны следующие настройки: - ``application `` – задать имя списка приложений, где ```` – строка длиной от 1 до 128 символов (см. пункт :numref:`{number} {name} `); - ``filter `` – перейти на уровень конфигурации фильтра основного МЭ, где ```` – строка длиной от 1 до 128 символов (см. ниже); - ``forward`` – (цепочка применения фильтра) применить фильтр к пакетам, передаваемым от одного интерфейса к другому; - ``local-in`` – (цепочка применения фильтра) применить фильтр к пакетам, передаваемым на ПАК “Фортикс”; - ``local-out`` – (цепочка применения фильтра) применить фильтр к пакетам, передаваемым с ПАК “Фортикс”; - ``prerouting`` – (цепочка применения фильтра) применить фильтр к входящим пакетам до их маршрутизации; - ``postrouting`` – (цепочка применения фильтра) применить фильтр к выходящим пакетам. Для каждой цепочки указывается точка перехвата (хук) согласно следующему списку: - ``fragged`` — точка перехвата до дефрагментации пакета; - ``raw`` — точка перехвата до работы conntrack; - ``mangle`` — основная точка перехвата, в которой предполагается большая часть работы с пакетами; - ``after-zone`` — точка перехвата после работы зонного firewall; - ``after-nat`` — точка перехвата после работы NAT. При этом точка перехвата ``fragged`` доступна только в цепочке ``prerouting``, ``raw`` — только в цепочках ``prerouting`` и ``local-out``. Критерий отбора ``state`` недоступен на данных точках перехвата, так как на этапе применения точек перехвата модуль ``conntrack`` ещё не соотнёс пакеты с какими-либо соединениями. Для применения фильтра к точке перехвата используется команда: :: [edit firewall ipv4|ipv6 netfilter] # set filter |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – цепочка применения фильтра (см. выше); - ```` – точка перехвата (см. выше); - ```` – имя существующего фильтра. Данная настройка является обязательной для использования фильтра основного firewall. Фильтр проходит через все точки перехвата, к которым данный фильтр применен. Пример конфигурации применённого к точке перехвата фильтра: :: firewall { ipv4 { netfilter { prerouting mangle filter in-filter } } } .. _filters: Фильтры ~~~~~~~ Настройка фильтров основного МЭ осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 netfilter filter ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание фильтра, где ```` – строка; - ``limit `` – перейти на уровень конфигурации ограничений на число срабатываний правила, где ```` – имя существующего ограничения (см. подпункт :numref:`{number} {name} `); - ``rule `` – указать правило, принадлежащее данному фильтру, где ```` – имя правила (см. ниже). Правила фильтра основного межсетевого экрана ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Настройка правил фильтров основного межсетевого экрана ``netfilter`` осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 netfilter filter rule ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов. Критерии отбора зонного межсетевого экрана также применимы для основного МЭ. Предусмотрены следующие дополнительные критерии отбора для основного МЭ (по сравнению с зонным МЭ): - ``content offset `` – перейти на уровень конфигурации критерия отбора по содержимому (см. подпункт :numref:`{number} {name} `); - ``dont-fragment true|false`` (только для ipv4) – указать значение флага don’t fragment, по которому осуществляется отбор, где ``true`` – флаг установлен, ``false`` – флаг не установлен; - ``more-fragment true|false`` (только для ipv4) – указать значение флага more fragment, по которому осуществляется отбор, где ``true`` – флаг установлен, ``false`` – флаг не установлен; - ``length [min ] [max ]`` – указать ограничения на длину пакетов, по которым осуществляется отбор, где ```` – число от 20 до 65535; - ``limit `` – указать ограничение на количество срабатываний правила, где ```` – имя существующего ограничения; - ``ndpi`` (только ipv4) – перейти на уровень конфигурации глубокого исследования пакетов (см. пункт :numref:`{number} {name} `); - ``state `` – указать состояние ``conntrack``, по которому осуществляется отбор (см. ниже); - ``ttl [min ] [max ]`` (только ipv4) – указать значение поля TTL, по которому осуществляется отбор, где ```` – число от 0 до 255; - ``hop-limit [min ] [max ]`` (только ipv6) – указать значение поля Hop Limit, по которому осуществляется отбор, где ```` – число от 0 до 255; - ``encrypted true|false`` – указать, для каких пакетов (зашифрованных/незашифрованных) осуществляется отбор, где ``true`` – зашифрованные, ``false`` – незашифрованные. Настройки правил фильтров основного МЭ аналогичны настройкам правил фильтров зонного МЭ. Для правил фильтров основного МЭ возможно указание следующих состояний ``conntrack``: - ``new`` – состояние соединения при отправке начального пакета; - ``established`` – состояние установленного соединения (после прохождения хотя бы по одному пакету в обе стороны); - ``related`` – состояние для expected-соединений (ожидаемые ответные соединения), которое принимается до ``established`` (подробнее см. подраздел :numref:`{number} {name} `); - ``invalid`` – состояние соединения для пакетов, не соответствующих требованиям протокола. Для указания состояния, по которому осуществляется отбор, применяется команда: :: [edit firewall ipv4|ipv6 netfilter filter rule ] # set state |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – имя существующего фильтра; - ```` – имя существующего правила; - ```` – состояние ``conntrack``. Пример конфигурации с указанием состояния соединения: :: firewall { ipv4 { netfilter { filter in-filter { rule 1 { state invalid drop } rule 2 { state established state related accept } } } } } Применение данной конфигурации позволяет: - запретить пакеты, которые не относятся к существующим соединениям, при этом не начинают нового (например новый tcp-пакет без флага SYN); - разрешить пакеты, относящиеся к уже установленным соединениям (как в зонном firewall). Для основного МЭ, в отличие от зонного МЭ, отсутствует настройка ``action``, так как действия указываются непосредственно в правиле, при этом возможно указание только одного действия в одном правиле. Кроме действий зонного МЭ для основного МЭ доступны следующие: - ``goto `` – прекратить обработку пакета в текущем фильтре и перейти к указанному, где ```` – имя существующего фильтра; - ``call `` – обработать пакет в другом фильтре (если в другом фильтре для пакета не будет применимо действие, завершающее обработку пакета (т.е. ``accept``, ``drop`` или ``reject``), он продолжит прохождение текущего фильтра), где ```` – имя существующего фильтра; - ``set-dscp `` – указать DSCP пакета, где ```` – значение DSCP в формате ``0x``; - ``set-ttl `` – указать TTL пакета, где ```` – число от 0 до 255; - ``adjust-mss `` – настроить MSS TCP-пакета, где ```` – число от 0 до 65535. Пример конфигурации для вызова фильтра из другого: :: firewall { ipv4 { netfilter { filter in-filter { rule 3 { to address 192.168.130.4 to-port service http call http-filter } } } } } Применение конфигурации из данного примера позволяет вызвать фильтр ``http-filter`` из фильтра ``in-filter``. .. _limits: Ограничения на количество срабатываний ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Настройка ограничений на количество срабатываний правила осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 netfilter filter limit ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``bytes`` – перейти к уровню конфигурации ограничения на количество байт за единицу времени; - ``packets`` – перейти к уровню конфигурации ограничения на количество пакетов за единицу времени; - ``per day|hour|minute|second|week`` – указать единицу времени для ограничения, где ``day`` – за день, ``hour`` – за час, ``minute`` – за минуту, ``second`` – за секунду, ``week`` – за неделю. Для настройки ``bytes`` предусмотрены следующие параметры: - ``count `` – указать максимальное количество байт, для которых возможно срабатывание правила, за единицу времени, где ```` – строка в формате ``(kbytes,mbytes,gbytes,kbit,mbit,gbit)``; - ``burst `` – указать запас для увеличения максимального количества байт, для которых возможно срабатывание правила, за единицу времени при пиковых нагрузках, где ```` – строка в формате ``(kbytes,mbytes,gbytes,kbit,mbit,gbit)``. Для настройки ``packets`` предусмотрены следующие параметры: - ``count `` – указать максимальное количество пакетов, для которых возможно срабатывание правила, за единицу времени, где ```` – число от 0 до 4294967295; - ``burst `` – указать запас для увеличения максимального количества пакетов, для которых возможно срабатывание правила, за единицу времени при пиковых нагрузках, где ```` – число от 0 до 4294967295. Пример конфигурации ограничения на количество срабатываний правила: :: firewall { ipv4 { netfilter { filter http-filter { limit lim-http { packets count 5 per second } rule 1 { limit lim-http accept } rule 2 { drop } } } } } Применение данной конфигурации позволяет разрешить только 5 соединений в секунду к http-серверу. .. _contentfilter: Фильтрация по содержимому ^^^^^^^^^^^^^^^^^^^^^^^^^ Настройка фильтрации по содержимому пакета осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 netfilter filter rule content offset ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов; - ```` – уровень заголовка, от которого считается отступ (``link-layer``, ``network-header``, ``transport-header``); - ```` – число байт от 0 до 65535. Так как в шестнадцатеричном представлении заголовка одному байту соответствует два символа, отступ в символах равен удвоенному значению ````. Возможные значения уровня заголовка ``layer``: - ``link-layer`` – отступ считается от начала заголовка канального уровня (например, Ethernet); - ``network-header`` – отступ считается от начала заголовка сетевого уровня (например, IPv4 или IPv6); - ``transport-header`` – отступ считается от начала заголовка транспортного уровня (например, TCP или UDP). На данном уровне конфигурации доступны следующие настройки: - ``length `` – указать длину проверяемого фрагмента в байтах, где ```` – число байт от 1 до 16; - ``value `` – указать значение, с которым сравнивается фрагмент, где ```` – строка в формате ``0xHEX``; - ``mask `` – указать маску, применяемую к фрагменту перед сравнением, где ```` – строка в формате ``0xHEX``, по умолчанию – ``0xFFFF..``. В значениях настроек ``mask `` и ``value `` подстрока ``HEX`` – подряд идущие значения байтов, указанные в шестнадцатеричной системе счисления, где одному байту соответствует два символа (например, возможно значение настройки ``0x0102``, где 01 – значение первого байта, 02 – значение второго байта). Длина подстроки ``HEX`` соответствует значению настройки ``length ``, то есть равна удвоенному значению настройки ``length ``. Перед сравнением в проверяемом фрагменте обнуляются биты, не установленные в значении настройки ``mask``, а затем полученное значение сравнивается со значением настройки ``value``. Если значения не совпадают, правило не применяется. Пример конфигурации фильрации по содержимому: :: firewall { ipv4 { netfilter { filter nofrag { rule 1 { content network-header offset 6 { length 1 value 0x00 mask 0x40 } drop } } } } } В данном примере проверяется второй бит седьмого байта IP-заголовка, то есть флаг Don’t Fragment. Если он не установлен, пакет отбрасывается. .. _ndpi: DPI ~~~ DPI – подсистема Deep Packet Inspection (глубокое исследование пакета), позволяющая через исследование содержимого пакета соотнести его с одним из L7-протоколов. Для работы данной подсистемы необходимо задать список "приложений" DPI. При этом каждое приложение DPI представляет из себя список ассоциированных с ним L7-протоколов. Настройка списка приложений осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4 netfilter application ] |noindent| где ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``protocol `` – указать протокол, где ```` – название протокола DPI (список поддерживаемых протоколов см. в Приложении А). Пример конфигурации списка приложений: :: firewall { ipv4 { netfilter { application DNS { protocol dns } application Ftp { protocol ftp } application Social { protocol instagram protocol twitter protocol whatsapp protocol youtube } application Torrent { protocol bittorrent } application Vk { protocol vk } application YandexMusic { protocol yandexmusic } } } } Настройка применения списка приложений осуществляется на следующем уровне конфигурации: :: [edit firewall ipv4 netfilter filter rule ndpi] |noindent| где - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``proto `` – применить список приложений, где ```` – имя существующего списка приложений; - ``in-progress `` – применить список не полностью обнаруженных приложений, где ```` – имя существующего списка приложений. Пример конфигурации механизма DPI в фильтре netfilter: :: firewall { ipv4 { netfilter { filter web-filter { rule 1 { ndpi proto A drop } rule 2 { ndpi in-progress A log { prefix "Forbidden app?" snaplen 1500 } } } } } } .. _helper: Модули conntrack (helper) ------------------------- Некоторых протоколы (например, FTP) используют несколько соединений в рамках одной сессии. Для корректной работы firewall на таких протоколах (например, чтобы соединение, устанавливаемое ответной стороной, не заблокировалось зонным firewall и правильно обработалось NAT) используются специальные модули conntrack (так называемые – helper). Настройки helper осуществляются на следующем уровне конфигурации: :: [edit firewall ipv4|ipv6 helper ] |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание helper, где ```` – строка; - ``log`` – перейти на уровень конфигурации журналирования пакетов; - ``protocol tcp|udp`` – указать протокол; - ``to address
|file-list |network `` – (критерий отбора) указать адрес(а) назначения, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``to-port `` – (критерий отбора) указать входящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``n[-m]`` (``n``, ``m`` – числа от 1 до 65535); - ``type`` – указать тип helper (``H.245``, ``Q.931``, ``RAS``, ``amanda``, ``ftp``, ``irc``, ``netbios-ns``, ``pptp``, ``sane``, ``sip``, ``snmp``, ``tftp``). Пример конфигурации helper: :: firewall { ipv4 { helper hlp-ftp { protocol tcp to-port 21 type ftp to address 192.168.130.4 } } } Bridge firewall --------------- Для фильтрации трафика, проходящего через bridge-интерфейсы, используется bridge firewall. Трафик, проходящий в рамках одного интерфейса типа ``bridge``, не попадает в другие firewall’ы, поэтому bridge firewall – единственный способ фильтрации такого трафика. Настройка bridge firewall осуществляется на следующем уровне конфигурации: :: [edit firewall bridge] На данном уровне конфигурации доступны следующие настройки: - ``filter `` – перейти на уровень конфигурации фильтра bridge firewall, где ```` – имя фильтра (см. ниже); - ``forward`` – (цепочка применения фильтра) применить фильтр к кадрам, передаваемым от одного интерфейса к другому; - ``local-in`` – (цепочка применения фильтра) применить фильтр к кадрам, передаваемым на ПАК “Фортикс”; - ``local-out`` – (цепочка применения фильтра) применить фильтр к кадрам, передаваемым с ПАК “Фортикс”; - ``prerouting`` – (цепочка применения фильтра) применить фильтр к входящим кадрам до их маршрутизации; - ``postrouting`` – (цепочка применения фильтра) применить фильтр к выходящим кадрам. Настройка фильтров bridge firewall осуществляется на следующем уровне конфигурации: :: [edit firewall bridge filter ] |noindent| где ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание фильтра, где ```` – строка; - ``limit `` – перейти на уровень конфигурации ограничений на число срабатываний правила, где ```` – имя существующего ограничения (см. подпункт :numref:`{number} {name} `); - ``rule `` – указать правило, соответствующее данному фильтру, где ```` – имя правила (см. ниже). Настройка правил фильтров bridge firewall осуществляется на следующем уровне конфигурации: :: [edit firewall bridge filter rule ] |noindent| где - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``description `` – указать описание правила, где ```` – строка; - ``from-interface `` – (критерий отбора) указать интерфейс источника, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``to-interface `` – (критерий отбора) указать интерфейс назначения, по которому осуществляется отбор трафика, где ```` – имя существующего интерфейса; - ``timestart `` – (критерий отбора) указать начальное время выполнения правила, где ```` – строка в формате ``HH:MM[:SS]``; - ``timestop `` – (критерий отбора) указать конечное время выполнения правила, где ```` – строка в формате ``HH:MM[:SS]``; - ``datestart `` – (критерий отбора) указать начальную дату (и время) выполнения правила, где ```` – строка в формате ``YYYY-MM-DD[THH:MM[:SS]]``, по умолчанию – 00:00:00; - ``datestop `` – (критерий отбора) указать конечную дату (и время) выполнения правила, где ```` – строка в формате ``YYYY-MM-DD[THH:MM[:SS]]``, по умолчанию – 00:00:00; - ``content offset `` – перейти на уровень конфигурации критерия отбора по содержимому (см. подпункт :numref:`{number} {name} `); - ``encrypted true|false`` – указать, для каких пакетов (зашифрованных/незашифрованных) осуществляется отбор, где ``true`` – зашифрованные, ``false`` – незашифрованные; - ``log`` – перейти на уровень конфигурации журналирования кадров; - ``counter `` – указать счётчик срабатывания правила, где ```` – имя счётчика (см. пункт :numref:`{number} {name} `); - ``trace`` – применить трассировку кадров. - ``from-mac `` – (критерий отбора) указать адрес источника, по которому осуществляется отбор трафика, где ```` – MAC-адрес в формате ``xx:xx:xx:xx:xx:xx``; - ``to-mac `` – (критерий отбора) указать адрес назначения, по которому осуществляется отбор трафика, где ```` – MAC-адрес в формате ``xx:xx:xx:xx:xx:xx``; - ``vlan`` – (критерий отбора) использовать виртуальную локальную сеть (VLAN) и перейти на уровень её конфигурации: - ``id `` – (критерий отбора) указать идентификатор виртуальной локальной сети (VLAN Identifier), где ```` – число от 0 до 4095; - ``pcp [value ] [mask ]`` – (критерий отбора) указать приоритет трафика в VLAN (Priority Code Point), где ```` – hex-значение в формате ``0x00..0x3f``, ```` – hex-значение в формате ``0x00..0x3f``; - ``dei`` – (критерий отбора) указать индикатор допустимости удаления (Drop Eligible Indicator); - ``ipv4|ipv6|arp`` – (критерий отбора) указать протокол и перейти на уровень его конфигурации (см. ниже). На уровне конфигурации протоколов IPv4 и IPv6 доступны следующие критерии отбора: - ``from address
|file-list |network `` – (критерий отбора) указать адрес(а) источника, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``to address
|file-list |network `` – (критерий отбора) указать адрес(а) назначения, по которому(ым) осуществляется отбор трафика, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]`` или IPv6-адрес в формате ``A:B:..:H[/mask]`` в зависимости от уровня конфигурации, ```` – имя существующего списка сетей, ```` – имя существующего файла списка сетей (см. подпункт :numref:`{number} {name} `); - ``from-port `` – (критерий отбора) указать исходящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – число от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``to-port `` – (критерий отбора) указать входящий порт, по которому осуществляется отбор трафика, где ```` – строка в формате ``tcp|udp n[-m]`` (``n``, ``m`` – число от 1 до 65535) или имя существующего списка портов (см. подпункт :numref:`{number} {name} `); - ``protonum `` – (критерий отбора) указать номер протокола, где ```` – число от 0 до 255; - ``tcp|udp|icmp`` (для ipv4) – (критерий отбора) указать протокол и перейти на уровень конфигурации протокола (не может быть задано вместе с ``protonum``); - ``tcp|udp|icmpv6`` (для ipv6) – (критерий отбора) указать протокол и перейти на уровень конфигурации протокола (не может быть задано вместе с ``protonum``). На уровне конфигурации протокола ARP доступны следующие критерии отбора: - ``arp-operation inreply|inrequest|nak|reply|request|rreply|rrequest`` – указать код операции ARP; - ``from-mac `` – указать mac-адрес источника в ARP-пакете, где ```` – MAC-адрес в формате ``xx:xx:xx:xx:xx:xx``; - ``to-mac `` – указать mac-адрес назначения в ARP-пакете, где ```` – MAC-адрес в формате ``xx:xx:xx:xx:xx:xx``; - ``from
`` – указать IPv4-адрес источника в ARP-пакете, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]``; - ``to
`` – указать IPv4-адрес назначения в ARP-пакете, где ``
`` – IPv4-адрес в формате ``A.B.C.D[/mask]``. Действия в bridge firewall указываются непосредственно в правиле, как и в основном МЭ. Доступны следующие действия: - ``accept`` — разрешить соединение и прекратить дальнейшую его проверку зонным firewall; - ``drop`` — запретить соединение без отправки ICMP-уведомления; - ``reject`` — запретить соединение с отправкой источнику ICMP-уведомление (ICMPv6-уведомление для IPv6) ``port-unreachable``; - ``return`` — прекратить обработку кадра в данном фильтре (в данном случае соединение обрабатывается ``default-action`` политики (см. подпункт :numref:`{number} {name} `) или ``drop-policy``). - ``goto `` – прекратить обработку кадра в текущем фильтре и перейти к указанному, где ```` – имя существующего фильтра; - ``call `` – обработать кадр в другом фильтре (если в другом фильтре для кадра не будет применимо действие, завершающее обработку кадра (т.е. ``accept``, ``drop`` или ``reject``), он продолжит прохождение текущего фильтра), где ```` – имя существующего фильтра; - ``set-src-mac `` – изменить адрес источника кадра, где ```` – MAC-адрес в формате ``xx:xx:xx:xx:xx:xx``; - ``set-dst-mac `` – изменить адрес назначения кадра, где ```` – MAC-адрес в формате ``xx:xx:xx:xx:xx:xx``. Последние два действия позволяют задать трансляцию MAC-адресов. В отличие от NAT данная трансляция выполняется не для некоторого соединения, а покадрово, в частности при замене адреса источника у ответного кадра не заменяется адрес назначения. Схема работы firewall --------------------- Схема прохождения пакета через все компоненты firewall представлена на рис. :numref:`%s `. .. figure:: images/fw-scheme2.drawio.png :alt: Схема работы firewall :name: fig-firewall-architecture Схема работы firewall .. _counters: Счётчики -------- Для отслеживания количества срабатываний правила фильтра используются счётчики ``counter``. .. warning:: В случае зонного firewall счётчик увеличивается только при срабатывания на первые пакеты соединений, т.к. зонный firewall применим только для них. Для создания счётчика применяется команда: :: [edit firewall ipv4|ipv6 filter rule ] # set counter |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – строка длиной от й ; - ```` – строка длиной от 1 до 128 символов; - ```` – строка длиной от 1 до 128 символов. Пример конфигурации счётчиков: :: firewall { ipv4 { filter blocklist-common { rule 1 { counter cnt-blocklist } } filter blocklist-lan { rule 1 { counter cnt-blocklist } } filter allow-admin { rule 1 { counter cnt-allow-admin } } } } Для просмотра значения счётчиков применяется команда: :: > show firewall counter ipv4|ipv6 |noindent| где - ``ipv4|ipv6`` – уровень конфигурации IPv4/IPv6; - ```` – имя существующего счётчика. Пример применения команды для просмотра значения счётчика: :: > show firewall counter ipv4 cnt-blocklist Для просмотра всех загруженных в ядро правил применяется команда: :: > show firewall raw .. warning:: 1) Если в нескольких правилах задано одно и то же имя счётчика, создаётся один счётчик, который вычисляет сумму всех срабатываний правил, в которых он используется. 2) Счётчики с одинаковыми именами, заданные в разных подсистемах (ipv4/ipv6/bridge), различны. Каждый счётчик относится только к одной подсистеме. 3) После выполнения команды ``commit`` счётчики сбрасываются. .. _log: Журналирование пакетов ---------------------- Запись пакетов в ПАК “Фортикс” осуществляется в журнал МЭ (см. ниже). Для журналирования пакетов в правиле (``rule``) фильтра firewall возможно применение настройки ``log``. Настройка журналирования пакетов осуществляется на следующем уровне конфигурации: :: [edit firewall ... rule log] |noindent| где ```` – строка длиной от 1 до 128 символов. На данном уровне конфигурации доступны следующие настройки: - ``prefix `` – указать описание, по которому идентифицируется журналируемое правило, где ```` – строка в двойных кавычках, допустимо указание одного слова без кавычек; - ``snaplen `` – указать длину записываемого фрагмента пакета, где ```` – число байт от 0 до 65535, по умолчанию записывается весь пакет; - ``journal alert|info`` – указать уровень события для записи пакета в системный журнал, без указания данной настройки в системный журнал пакеты не записываются. Пример конфигурации журналирования правила фильтра: :: firewall { ipv4 { netfilter { filter in-filter { rule 3 { to address 192.168.130.4 to-port service http log { prefix "http catched" snaplen 1500 } call http-filter } } } } } Для просмотра журнала МЭ применяется команда: :: > show firewall journal Для изменения формата выводимой по данной команде информации используются следующие параметры: .. _table-firewall-log-command-params: .. list-table:: Параметры команды для просмотра журнала :widths: 30 70 :header-rows: 1 - - Настройка - Описание - - verbose - вывести журнал в режиме подробного отображения - - since - вывести пакеты, пришедшие после указанного времени - - until - вывести пакеты, пришедшие до указанного времени - - count - вывести первые записей - - tail - вывести последние записей - - ascii|hex|hex-ascii - применить режим вывода содержимого пакета - - follow - вывести пакеты в режиме реального времени - - resolve - вывести IP-адреса, преобразованные при помощи DNS - - alert - вывести только пакеты с флагом ``alert`` - - write - экспортировать пакеты в файл в формате tcpdump - - archive - вывести содержимое указанного файла журнала МЭ (см. ниже) - - forward - вывести пакеты только из цепочки ``forward`` - - local-in - вывести пакеты только из цепочки ``local-in`` - - local-out - вывести пакеты только из цепочки ``local-out`` - - postrouting - вывести пакеты только из цепочки ``postrouting`` - - prerouting - вывести пакеты только из цепочки ``prerouting`` - - in - вывести пакеты, пришедшие на указанный интерфейс - - out - вывести пакеты, выходящие через указанный интерфейс - - ipv4 - вывести только IPv4-пакеты - - ipv6 - вывести только IPv6-пакеты - - pcap - вывести только пакеты, отобранные по pcap-фильтру Дата/время в параметрах могут быть заданы в одном из следующих форматов: - ``YYYY-mm-dd``; - ``HH:MM``; - ``HH:MM:SS``; - ``YYYY-mm-ddTHH:MM:SS``; - ``YYYY-mm-ddTHH:MM:SS``. |noindent| где - YYYY – год (четырёхзначное число); - mm – месяц (число от 1 до 12); - dd – день (число от 1 до 31); - HH – часы (от 0 до 23); - MM – минуты (от 0 до 59); - SS – секунды (от 0 до 59). Настройки журналирования ~~~~~~~~~~~~~~~~~~~~~~~~ Настройка журналирования МЭ осуществляется на следующем уровне конфигурации: :: [edit firewall journal] На данном уровне конфигурации доступны следующие настройки: - ``file-count `` – указать максимальное число файлов журнала МЭ, где ```` – число от 1 до 65535; - ``file-size `` – указать максимальный размер одного файла журнала МЭ, где ```` – число Мбит от 1 до 4294967295; - ``kernel-size `` – указать максимальный размер буфера для передачи сообщений из ядра, где ```` – число Кбит от 128 до 4294967295. Пример конфигурации журналирования: :: firewall journal { file-size 20 file-count 5 kernel-size 2048 } При превышении максимального размера одного файла журнала создаётся новый файл журнала. При превышении максимального числа файлов журнала удаляются наиболее старые файлы журнала. При переполнении буфера (как правило из-за ограничения скорости записи журнала на носитель) пакеты отбрасываются без записи в журнал. Полное имя файла журнала МЭ, в который осуществляется текущая запись – ``/log/kernel.fwlog``. При его переполнении создаётся файл ``/log/kernel.fwlog-YYYY-mm-ddTHH:MM:SS``, в который помещаются записи файла ``/log/kernel.fwlog``, файл ``/log/kernel.fwlog`` очищается. Трассировка пакетов ------------------- Трассировка пакетов применяется для отладки прохождения пакетов через firewall в правилах фильтров firewall netfilter или firewall bridge. Для использования трассировки пакетов применяется команда: :: [edit firewall ... rule ] # set trace |noindent| где ```` – строка длиной от 1 до 128 символов. Пример конфигурации трассировки пакетов: :: firewall ipv4 netfilter { filter trace rule 1 { icmp { icmp-type echo-reply icmp-type echo-request } trace } prerouting fragged filter trace } В данной конфигурации трассировка применяется ко всем входящим в ПАК “Фортикс” и проходящим через него ping-пробам, причём признак трассировки устанавливается в самом раннем месте из возможных. Для просмотра трассировки пакетов применяется команда: :: > show firewall trace .. note:: Трассировка пакетов не сохраняется во внешнюю среду, её просмотр доступен только в конфигурации.