Маршрутизация на основе политик
Маршрутизация на основе политик (Policy-based routing (PBR)) позволяет маршрутизировать трафик на основе политик, а не только адреса назначения. PBR дает гибкость в управлении потоками трафика, позволяя принимать решения на основе IP-адреса источника, протокола, порта, и других параметров.
Основные команды настройки PBR
Определить политику машрутизации:
set policy route <route_name>где <route_name> – идентификатор политики машрутизации.
Задать краткое описание политики машрутизации:
set policy route <route_name> description <text>где <text> – текстовое описание для политики машрутизации.
Задать интерфейс, который будет использоваться для работы политики:
set policy route <route_name> rule <rule_number> interface <interface_name>где <interface_name> – идентификатор интерфейса, к которому должна применяться политика.
Включить логирование пакетов, которые вызывают срабатывание действия по умолчанию:
set policy route <route_name> default-log
Создать правило политики машрутизации:
set policy route <route_name> rule <rule_number>где <rule_number> – численный идентификатор правила. Возможно указать значение в диапазоне от «1» до «65535».
Отключить правило политики машрутизации:
set policy route <route_name> rule <rule_number> disableгде <rule_number> – численный идентификатор правила. Возможно указать значение в диапазоне от «1» до «65535».
Установить действие, которое должно быть выполнено для пакетов, соответствующих правилу политики машрутизации:
set policy route <route_name> rule <rule_number> action <action>где <action> – действие для пакетов, соответствующих правилу. Возможно указать следующие значения:
<accept>;
<reject>;
<return>;
<drop>.
Включить логирование пакетов, которые вызывают срабатывание правила:
set policy route <route_name> rule <rule_number> log
Задать период, по которому происходит сопоставление правила:
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> – значение параметра.
Параметры соответствия
Установить критерии соответствия в правиле на основе метки для маршутизации всех пакетов конкретного соединения (connection mark):
set policy route <route_name> rule <rule_number> connection-mark <conn-mark>где <conn-mark> – метка для соответствия правилу. Возможно указать значение в диапазоне от «1» до «2147483647».
Установить критерии соответствия в правиле на основе получателя:
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».
Установить критерии соответствия в правиле на основе значения DSCP:
set policy route <route_name> rule <rule_number> dscp <dscp_num>где <dscp_num> – значение DSCP. Возможно указание следующих значений:
<dscp> – значение DSCP в диапазоне от «0» до «63»;
<start-end> – диапазон значений DSCP, например – «10-12».
Установить критерии соответствия в правиле на основе исключения значения 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».
Установить критерии соответствия в правиле на основе фрагментов пакетов:
set policy route <route_name> rule <rule_number> fragment <match-frag | match-non-frag> <frag-params>где:
<match-frag> – для второго и последующих фрагментов фрагментированных пакетов;
<match-non-frag> – для фрагментов заголовка или нефрагментированных пакетов;
<frag-params> – параметры фрагментов.
Установить критерии соответствия в правиле на основе параметров 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.
Установить критерии соответствия в правиле на основе протокола IPsec:
set policy route <route_name> rule <rule_number> ipsec <match-ipsec | match-none>где:
<match-ipsec> – пакеты, соответствующие протоколу IPsec;
<match-none> – пакеты, которые не соответствуют протоколу IPsec.
Установить критерии соответствия в правиле на основе ограничения скорости с использованием 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> – значение ограничения.
Установить критерии соответствия в правиле на основе метки МЭ:
set policy access-list6 <acl_number> rule <rule_number> mark <fw_mark>где <fw_mark> – метка МЭ. Возможно указание следующих значений:
<0-2147483647> – метка МЭ;
!<0-2147483647> – все, кроме указанной метки МЭ;
<start-end> – диапазон меток МЭ;
!<start-end> – все, кроме указанного диапазона меток МЭ.
Установить критерии соответствия в правиле на основе размера пакета:
set policy access-list6 <acl_number> rule <rule_number> packet-length <packet-length>где <packet-length> – размер пакета. Возможно указание следующих значений:
<0-65535> – размер пакета;
<start-end> – диапазон размера пакета.
Установить критерии соответствия в правиле на основе исключения пакетов, соответсвующих размеру:
set policy access-list6 <acl_number> rule <rule_number> packet-length-exclude <packet-length>где <packet-length> – размер пакета. Возможно указание следующих значений:
<0-65535> – размер пакета;
<start-end> – диапазон размера пакета.
Правило не будет применяться к пакетам с указанной длиной или из указанного диапазона.
Установить критерии соответствия в правиле на основе типа пакета:
set policy access-list6 <acl_number> rule <rule_number> packet-type <type>где <type> – тип пакета. Возможно указание следующих значений:
<broadcast> – соответствует широковещательному типу пакета;
<host> – соответствует типу пакета, адресованного локальному хосту;
<multicast> – соответствует многоадресному (multicast) типу пакета;
<other> – соответствует пакету, адресованному другому хосту.
Установить критерии соответствия в правиле на основе протокола:
set policy access-list6 <acl_number> rule <rule_number> protocol <protocol>где <protocol> – протокол, используемый в качестве критерия соответствия.
При указании наименования протокола возможно использовать клавишу «Tab» на клавиатуре для вывода информации о доступных к использованию параметрах.
Установить критерии соответствия в правиле на основе недавно обнаруженных источников:
set policy access-list6 <acl_number> rule <rule_number> recent <count | time> <value>где:
<count> – адреса источников, замеченные более N раз. Для <value> возможно указать значение в диапазоне от «1» до «255»;
<time> – адреса источников, замеченные за последние N секунд. Для <value> возможно указать значение в диапазоне от «0» до «4294967295»;
<value> – значение параметра.
Установить критерии соответствия в правиле на основе модификации пакетов:
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» на клавиатуре для вывода информации о доступных к использованию параметрах.
Установить критерии соответствия в правиле на основе источника:
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».
Установить критерии соответствия в правиле на основе состояния сессии:
set policy route <route_name> rule <rule_number> state <session-state>где <session-state> – состояние сессии. Возможно указание следующих значений:
<established> – установленное состояние;
<invalid> – недопустимое (ошибочное) состояние;
<new> – новое состояние;
<related> – связанное состояние.
Установить критерии соответствия в правиле на основе 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).
Установить критерии соответствия в правиле на основе времени жизни пакета (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 необходимо выполнить следующие действия:
Отобразить параметры политики, по которой необходимо просмотреть логи, с помощью следующей команды эксплуатационного режима:
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».
Выполнить фильтрацию глобальных логов с помощью следующей команды эксплуатационного режима:
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).
Рисунок – Логи работы PBR
Пример настройки PBR
В качестве примера приведена настройка PBR с одним устройством ARMA Стена и двумя ISP согласно схеме стенда, представленной на рисунке (см. Рисунок – Схема стенда для настройки PBR).
Рисунок – Схема стенда для настройки 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