Маршрутизация на основе политик

Маршрутизация на основе политик (Policy-based routing (PBR)) позволяет маршрутизировать трафик на основе политик, а не только адреса назначения. PBR дает гибкость в управлении потоками трафика, позволяя принимать решения на основе IP-адреса источника, протокола, порта, и других параметров.

Основные команды настройки PBR

  1. Определить политику машрутизации:

set policy route <route_name>

где <route_name> – идентификатор политики машрутизации.

  1. Задать краткое описание политики машрутизации:

set policy route <route_name> description <text>

где <text> – текстовое описание для политики машрутизации.

  1. Задать интерфейс, который будет использоваться для работы политики:

set policy route <route_name> rule <rule_number> interface <interface_name>

где <interface_name> – идентификатор интерфейса, к которому должна применяться политика.

  1. Включить логирование пакетов, которые вызывают срабатывание действия по умолчанию:

set policy route <route_name> default-log
  1. Создать правило политики машрутизации:

set policy route <route_name> rule <rule_number>

где <rule_number> – численный идентификатор правила. Возможно указать значение в диапазоне от «1» до «65535».

  1. Отключить правило политики машрутизации:

set policy route <route_name> rule <rule_number> disable

где <rule_number> – численный идентификатор правила. Возможно указать значение в диапазоне от «1» до «65535».

  1. Установить действие, которое должно быть выполнено для пакетов, соответствующих правилу политики машрутизации:

set policy route <route_name> rule <rule_number> action <action>

где <action> – действие для пакетов, соответствующих правилу. Возможно указать следующие значения:

  • <accept>;

  • <reject>;

  • <return>;

  • <drop>.

  1. Включить логирование пакетов, которые вызывают срабатывание правила:

set policy route <route_name> rule <rule_number> log
  1. Задать период, по которому происходит сопоставление правила:

set policy route <route_name> rule <rule_number> time <time-params> <time-value>

где:

  • <time-params> – параметры периода, по которым будет работать правило. Возможно указание следующих значений:

    • <monthdays> – дни месяца, по которым выполняется правило;

    • <startdate> – дата начала действия правила;

    • <starttime> – время начала действия правила;

    • <stopdate> – дата окончания действия правила;

    • <stoptime> – время окончания действия правила;

    • <utc> – интерпретировать значения startdate, stopdate, starttime и stoptime как время UTC;

    • <weekdays> – дни недели, по которым выполняется правило;

  • <time-value> – значение параметра.

Параметры соответствия

  1. Установить критерии соответствия в правиле на основе метки для маршутизации всех пакетов конкретного соединения (connection mark):

set policy route <route_name> rule <rule_number> connection-mark <conn-mark>

где <conn-mark> – метка для соответствия правилу. Возможно указать значение в диапазоне от «1» до «2147483647».

  1. Установить критерии соответствия в правиле на основе получателя:

set policy route <route_name> rule <rule_number> destination <address | group | port> <recipient>

где <recipient> – параметры получателя. Допустимые значения:

  • для <address> – соответствие для пакетов, предназначенных указанному узлу IPv4. Возможно указание следующих значений:

    • <x.x.x.x> – IPv4 адрес;

    • <x.x.x.x/x> – IPv4 подсеть;

    • <x.x.x.x>-<x.x.x.x> – диапазон IPv4 адре сов;

    • !<x.x.x.x> – все, кроме указанного IPv4 адреса;

    • !<x.x.x.x/x> – все, кроме указанной подсети;

    • !<x.x.x.x>-<x.x.x.x> – все, кроме указанного диапазона адресов.

  • для <group> – соответствие для пакетов, предназначенных указанной группе. Возможно указание следующих значений:

    • <address-group> – группа адресов;

    • <domain-group> – группа доменов;

    • <mac-group> – группа MAC-адресов;

    • <network-group> – группа сетей;

    • <port-group> – группа портов.

  • для <port> – соответствие для пакетов, предназначенных указанным портам. Возможно указание следующих значений:

    • <port-name> – наименование группы портов из «/etc/services», например – «http»;

    • <port> – порт в диапазоне от «1» до «65535»;

    • <start-end> – диапазон портов от «1» до «65535», например – «1-1001».

Допускается указание нескольких значений, разделённых запятой. Например – «telnet,http,123,1001-1005».

  1. Установить критерии соответствия в правиле на основе значения DSCP:

set policy route <route_name> rule <rule_number> dscp <dscp_num>

где <dscp_num> – значение DSCP. Возможно указание следующих значений:

  • <dscp> – значение DSCP в диапазоне от «0» до «63»;

  • <start-end> – диапазон значений DSCP, например – «10-12».

  1. Установить критерии соответствия в правиле на основе исключения значения DSCP:

set policy route <route_name> rule <rule_number> dscp-exclude <dscp_num>

где <dscp_num> – значение DSCP. Возможно указание следующих значений:

  • <dscp> – значение DSCP в диапазоне от «0» до «63»;

  • <start-end> – диапазон значений DSCP, например – «10-12».

  1. Установить критерии соответствия в правиле на основе фрагментов пакетов:

set policy route <route_name> rule <rule_number> fragment <match-frag | match-non-frag> <frag-params>

где:

  • <match-frag> – для второго и последующих фрагментов фрагментированных пакетов;

  • <match-non-frag> – для фрагментов заголовка или нефрагментированных пакетов;

  • <frag-params> – параметры фрагментов.

  1. Установить критерии соответствия в правиле на основе параметров ICMP:

set policy route <route_name> rule <rule_number> icmp <code | type | type-name> <ICMP-params>

где:

  • <code> – код ICMP. Для <ICMP-params> возможно указать значение в диапазоне от «0» до «255»;

  • <type> – тип ICMP. Для <ICMP-params> возможно указать значение в диапазоне от «0» до «255»;

  • <type-name> – код и тип ICMP. Возможно указание следующих значений:

    • «echo-reply» – ICMP тип 0;

    • «destination-unreachable» – ICMP тип 3;

    • «source-quench» – ICMP тип 4;

    • «redirect» – ICMP тип 5;

    • «echo-request» – ICMP тип 8;

    • «router-advertisement» – ICMP тип 9;

    • «router-solicitation» – ICMP тип 10;

    • «time-exceeded» – ICMP тип 11;

    • «parameter-problem» – ICMP тип 12;

    • «timestamp-request» – ICMP тип 13;

    • «timestamp-reply» – ICMP тип 14;

    • «info-request» – ICMP тип 15;

    • «info-reply» – ICMP тип 16;

    • «address-mask-request» – ICMP тип 17;

    • «address-mask-reply» – ICMP тип 18.

  1. Установить критерии соответствия в правиле на основе протокола IPsec:

set policy route <route_name> rule <rule_number> ipsec <match-ipsec | match-none>

где:

  • <match-ipsec> – пакеты, соответствующие протоколу IPsec;

  • <match-none> – пакеты, которые не соответствуют протоколу IPsec.

  1. Установить критерии соответствия в правиле на основе ограничения скорости с использованием token bucket фильтра:

set policy route <route_name> rule <rule_number> limit <burst | rate> <limit-value>

где:

  • <burst> – максимальное количество пакетов, передающихся со скоростью выше лимита. Для <limit-value> возможно указать значение в диапазоне от «0» до «4294967295»;

  • <match-none> – максимальная средняя скорость совпадения с правилом. Для <limit-value> возможно указать значение в диапазоне от «0» до «4294967295»;

  • <limit-value> – значение ограничения.

  1. Установить критерии соответствия в правиле на основе метки МЭ:

set policy access-list6 <acl_number> rule <rule_number> mark <fw_mark>

где <fw_mark> – метка МЭ. Возможно указание следующих значений:

  • <0-2147483647> – метка МЭ;

  • !<0-2147483647> – все, кроме указанной метки МЭ;

  • <start-end> – диапазон меток МЭ;

  • !<start-end> – все, кроме указанного диапазона меток МЭ.

  1. Установить критерии соответствия в правиле на основе размера пакета:

set policy access-list6 <acl_number> rule <rule_number> packet-length <packet-length>

где <packet-length> – размер пакета. Возможно указание следующих значений:

  • <0-65535> – размер пакета;

  • <start-end> – диапазон размера пакета.

  1. Установить критерии соответствия в правиле на основе исключения пакетов, соответсвующих размеру:

set policy access-list6 <acl_number> rule <rule_number> packet-length-exclude <packet-length>

где <packet-length> – размер пакета. Возможно указание следующих значений:

  • <0-65535> – размер пакета;

  • <start-end> – диапазон размера пакета.

Правило не будет применяться к пакетам с указанной длиной или из указанного диапазона.

  1. Установить критерии соответствия в правиле на основе типа пакета:

set policy access-list6 <acl_number> rule <rule_number> packet-type <type>

где <type> – тип пакета. Возможно указание следующих значений:

  • <broadcast> – соответствует широковещательному типу пакета;

  • <host> – соответствует типу пакета, адресованного локальному хосту;

  • <multicast> – соответствует многоадресному (multicast) типу пакета;

  • <other> – соответствует пакету, адресованному другому хосту.

  1. Установить критерии соответствия в правиле на основе протокола:

set policy access-list6 <acl_number> rule <rule_number> protocol <protocol>

где <protocol> – протокол, используемый в качестве критерия соответствия.

При указании наименования протокола возможно использовать клавишу «Tab» на клавиатуре для вывода информации о доступных к использованию параметрах.

  1. Установить критерии соответствия в правиле на основе недавно обнаруженных источников:

set policy access-list6 <acl_number> rule <rule_number> recent <count | time> <value>

где:

  • <count> – адреса источников, замеченные более N раз. Для <value> возможно указать значение в диапазоне от «1» до «255»;

  • <time> – адреса источников, замеченные за последние N секунд. Для <value> возможно указать значение в диапазоне от «0» до «4294967295»;

  • <value> – значение параметра.

  1. Установить критерии соответствия в правиле на основе модификации пакетов:

set policy access-list6 <acl_number> rule <rule_number> set <pack-mods> <value>

где:

  • <pack-mods> – параметры модифицированных пакетов. Возможно указание следующих значений:

    • <connection-mark> – маркировка соединения;

    • <dscp> – параметры DSCP;

    • <mark> – маркировка пакета;

    • <table> – таблица маршрутизации для пересылки пакета;

    • <tcp-mss> – максимальный размер сегмента TCP (TCP MSS);

    • <vrf> – VRF для пересылки пакета;

  • <value> – значение параметра.

При указании параметров возможно использовать клавишу «Tab» на клавиатуре для вывода информации о доступных к использованию параметрах.

  1. Установить критерии соответствия в правиле на основе источника:

set policy route <route_name> rule <rule_number> source <address | group | port> <source>

где <source> – параметры источника. Допустимые значения:

  • для <address> – соответствие для пакетов, принадлежащих указанному узлу IPv4. Возможно указание следующих значений:

    • <x.x.x.x> – IPv4 адрес;

    • <x.x.x.x/x> – IPv4 подсеть;

    • <x.x.x.x>-<x.x.x.x> – диапазон IPv4 адресов;

    • !<x.x.x.x> – все, кроме указанного IPv4 адреса;

    • !<x.x.x.x/x> – все, кроме указанной подсети;

    • !<x.x.x.x>-<x.x.x.x> – все, кроме указанного диапазона адресов.

  • для <group> – соответствие для пакетов, принадлежащих указанной группе. Возможно указание следующих значений:

    • <address-group> – группа адресов;

    • <domain-group> – группа доменов;

    • <mac-group> – группа MAC-адресов;

    • <network-group> – группа сетей;

    • <port-group> – группа портов.

  • для <port> – соответствие для пакетов, принадлежащих указанным портам. Возможно указание следующих значений:

    • <port-name> – наименование группы портов из «/etc/services», например – «http»;

    • <port> – порт в диапазоне от «1» до «65535»;

    • <start-end> – диапазон портов от «1» до «65535», например – «1-1001».

Допускается указание нескольких значений, разделённых запятой. Например – «telnet,http,123,1001-1005».

  1. Установить критерии соответствия в правиле на основе состояния сессии:

set policy route <route_name> rule <rule_number> state <session-state>

где <session-state> – состояние сессии. Возможно указание следующих значений:

  • <established> – установленное состояние;

  • <invalid> – недопустимое (ошибочное) состояние;

  • <new> – новое состояние;

  • <related> – связанное состояние.

  1. Установить критерии соответствия в правиле на основе TCP-флагов:

set policy route <route_name> rule <rule_number> tcp flags <flag>

где <flag> – TCP-флаг для соответствия. Возможно указание следующих значений:

  • <ack> – флаг подтверждения (Acknowledge);

  • <cwr> – флаг уменьшения окна перегрузки (Congestion Window Reduced);

  • <ecn> – флаг явного уведомления о перегрузке (Explicit Congestion Notification);

  • <fin> – флаг завершения соединения (Finish);

  • <not> – соответствие флагам, которые не заданы в данном значении;

  • <psh> – флаг немедленной передачи данных (Push);

  • <rst> – флаг сброса соединения (Reset);

  • <syn> – флаг синхронизации (Synchronise);

  • <urg> – флаг срочных данных (Urgent).

  1. Установить критерии соответствия в правиле на основе времени жизни пакета (TTL):

set policy route <route_name> rule <rule_number> ttl  <eq | gt | lt> <value>

где:

  • <eq> – совпадение при равном значении (TTL равно указанному значению);

  • <gt> – совпадение при значении больше указанного (TTL больше указанного значения);

  • <lt> – совпадение при значении меньше указанного (TTL меньше указанного значения);

  • <value> – значение параметра. Возможно указать значение в диапазоне от «0» до «255».

Просмотр логов работы PBR

Для просмотра логов работы PBR необходимо выполнить следующие действия:

  1. Отобразить параметры политики, по которой необходимо просмотреть логи, с помощью следующей команды эксплуатационного режима:

admin@arma-NGFW:~$ show policy route to-ISP1
Ruleset Information

---------------------------------
IPv4 Policy Route "to-ISP1"

Active on: eth1

Rule  Action    Protocol
------  --------  ----------
10  set       all

В качестве примера используется политика с названием «to-ISP1».

  1. Выполнить фильтрацию глобальных логов с помощью следующей команды эксплуатационного режима:

admin@arma-NGFW:~$ show logging all | match to-ISP1

или

admin@arma-NGFW:~$ show logging all | match match ipv4-route-to-ISP1-10-A

В результате фильтрации система выдаст логи работы политики «to-ISP1» (см. Рисунок – Логи работы PBR).

../../../../../_images/ngfw.r.cli.policy-based-route_3.1.png

Рисунок – Логи работы PBR

Пример настройки PBR

В качестве примера приведена настройка PBR с одним устройством ARMA Стена и двумя ISP согласно схеме стенда, представленной на рисунке (см. Рисунок – Схема стенда для настройки PBR).

../../../../../_images/ngfw.r.cli.policy-based-route_4.1.png

Рисунок – Схема стенда для настройки PBR

Предварительная настройка

Для настройки PBR необходимо предварительно выполнить настройку МЭ, NAT и балансировки нагрузки.

Настройка балансировки нагрузки

Настройка балансировки нагрузки подразумевает, что выполняется распределение исходящего трафика между двумя интернет-каналами (к которым подключены «eth0» и «eth1») с проверкой их доступности. В примере приоритет отдаётся интерфейсу «eth1». Балансируется только трафик интерфейса «eth2». При потере соединения с ISP 2 весь трафик будет перенаправлен в ISP 1.

Для настройки балансировки нагрузки необходимо ввести список команд:

set load-balancing wan flush-connections
set load-balancing wan interface-health eth0 nexthop 172.16.16.254
set load-balancing wan interface-health eth0 test 10 target 172.16.16.254
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth1 nexthop 100.96.160.1
set load-balancing wan interface-health eth1 test 20 target 100.96.160.1
set load-balancing wan interface-health eth1 test 20 type ping
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 1
set load-balancing wan rule 1 interface eth1 weight 100
set load-balancing wan disable-source-nat

commit
save

Настройка NAT и МЭ

Настройка парметров NAT и МЭ состоит из создания группы интерфейсов «eth0» и «eth1» и размещения группы за NAT для выхода в интернет.

Для настройки NAT и МЭ необходимо ввести список команд:

set firewall group interface-group WAN interface eth0
set firewall group interface-group WAN interface eth1
set firewall ipv4 forward filter default-action accept

set nat source rule 10 outbound-interface group WAN
set nat source rule 10 translation address masquerade

commit
save

Настройка PBR

В примере настройка PBR используется для принудительного направления трафика хоста с адресом «192.168.2.100» через ISP 1 без применения балансировки. Политика маршрутизации применяется для соединений по всем протоколам на интерфейсе «eth3». При этом машрутизация выполняется через отдельную таблицу.

Для настройки PBR необходимо ввести список команд:

set policy route to-WAN1 interface eth3
set policy route to-WAN1 rule 10 protocol all
set policy route to-WAN1 rule 10 set table 10
set policy route to-WAN1 rule 10 source address 192.168.2.100

set protocols static route 0.0.0.0/0 next-hop 100.96.160.1
set protocols static table 10 route 0.0.0.0/0 next-hop 172.16.16.254

commit
save

Альтернативный вариант

В качестве альтернативного варианта настройки можно использовать создание группы МЭ на основе IPv4-адресов и применить PBR к этой группе. Остальные настройки выполняются в соответствии с примером.

Для настройки необходимо выполнить следущие команды:

#Создание группы адресов
set firewall group address-group WAN1 address 192.168.2.100

#Применение PBR к созданной группе
set policy route to-WAN1 interface eth3
set policy route to-WAN1 rule 10 protocol all
set policy route to-WAN1 rule 10 set table 10
set policy route to-WAN1 rule 10 source group address-group WAN1

set protocols static route 0.0.0.0/0 next-hop 100.96.160.1
set protocols static table 10 route 0.0.0.0/0 next-hop 172.16.16.254

commit
save