ACL в ExtremeXOS

Материал из Xgu.ru

Перейти к: навигация, поиск

< ExtremeXOS

Здесь описываются основные с практической точки зрения моменты по настройке и взаимодействию с ExtremeXOS на коммутаторах от Extreme Networks. В качестве основного источника информации используется ExtremeXOS Concepts Guide.


Содержание

[править] Общие сведения

Политики ACL применяются к трафику во входящем и/или исходящем направлении на портах, либо ко влану. Применяя ACL ко влану, на самом деле он применяется ко всем портам коммутатора. ACL бывают статические, определяемые в файлах, и динамические, состоящие из одного правила, применённого к портам. По-умолчанию, динамические ACL сохраняются после перезагрузки. Возможно переопределить это, чтобы не сохранялись.

С помощью ACL можно выделять трафик на основе критериев

  • IP-адреса/подсети источника и назначения;
  • MAC-адреса источника и назначения;
  • vlan-id;
  • протокол;
  • tcp/udp-порты источника и назначения;

и применять к нему следующие действия:

  • permit;
  • deny;

и модификаторы:

  • увеличение счётчиков;
  • логгирование заголовков пакетов;
  • мироринг трафика в мониторинговый порт;
  • назначение политики QoS в виде QoS-профайла;
  • полисинг полосы пропускания с использованием meter.

Использование ACL не влияет на производительность коммутатора (за исключением действия mirror-cpu).

Структура каждого правила в ACL-файле выглядит так:

entry <RULE-NAME> {
        if {
                <match-conditions>;
        } then {
                <action>;
                <action-modifiers>;
        }
} 

Чтобы отредактировать ACL-файл и повесить его на порт, используйте следующие команды:

edit policy <PNAME>							- редактировать политику (ACL).
check policy <PNAME>							- проверить отредактированную политику на правильность синтаксиса.
configure access-list <PNAME> ports <port-list> {ingress | egress}	- навесить файл ACL-политики на порты для входящего или исходящего трафика.
unconfigure access-list ports <port-list> [ingress | egress]		- снять файл ACL-политики с портов.

При редактировании правил можно использовать комментарии и описания. Отличия в том, что комментарии игнорируются policy-manager'ом, содержатся только в файле политики и не отображаются при выводе политики на экран с помощью show policy. Описания обрабатываются policy-manager'ом и отображаются в выводе show policy.

# This is a comment in policy.pol file.
@description "And this line is a description." 

Для ingress ACL, если секция if не содержит условий match, считается, что правило применяется ко всему трафику. Для egress ACL, если секция if не содержит условий match, то ни один пакет не подпадает под условия такого правила. Чтобы задать правило для всего трафика в egress ACL, нужно, например, указать критерий совпадения с любым адресом источника source-address 0.0.0.0/0. Если в секции then явно не указано действие (permit или deny), по-умолчанию используется permit.

[править] Типы записей правил в ACL

  • L2 - правило содержит только проверки L2-заголовков (ethernet-soruce-address, ethernet-destination-address...);
  • L3 - правило содержит только проверки L3-заголовков (ip-адреса, подсети, протокол...);
  • L4 - правило содержит проверки и L3 и L4 поля заголовков (ip-адреса, номера портов TCP/UDP);
  • Если секция if не содержит критериев, такая проверка считается L2.

На BlackDiamond 10800 и 12800 синтаксическая проверка выдаст ошибку, если в записи содержится проверка L2 вместе с L3/L4. На BlackDiamond 20800 запись может содержать проверки либо L2, либо L3, но не обе.

[править] Перечень возможных критериев для выделения трафика

Условия в ACL
Условие Описание применяется к
протоколам / направлениям
ethernet-type <number> Тип ethernet. В качестве значения можно задать и текстовые значения: ETHER-P-IP (0x0800), ETHER-P-8021Q (0x8100), ETHER-P-IPV6 (0x86DD) ethernet / ingress
ethernet-source-address <MAC> МАС-адрес источника ethernet / ingress
ethernet-source-address <MAC> mask <MASK>
или
ethernet-source-address <MAC> / <MASK>
Например
ethernet-source-address 00:01:02:03:01:01 mask ff:ff:ff:ff:00:00
ethernet-source-address 00:01:02:03:01:01 / ff:ff:ff:ff:00:00
Проверяются только те значения битов, которые в маске соответствуют 1. В приведённом примере все маки 00:01:02:03:xx:xx удовлетворят условию.
ethernet / ingress
ethernet-destination-address <MAC>
ethernet-destination-address <MAC> mask <MASK>
ethernet-destination-address <MAC> / <MASK>
МАС-адрес назначения. Маски задаются и обрабатываются так же как в случае ethernet-source-address. ethernet / ingress
source-address <IP-prefix> IP-префикс (адрес и маска) источника. Маска не обязательно должна задавать IP-подсеть. все IP / ingress и egress
destination-address <IP-prefix> IP-префикс (адрес и маска) назначения. Маска не обязательно должна задавать IP-подсеть. все IP / ingress и egress
Source-port <number>, <range> Номер порта источника TCP или UDP. Для использования необходимо определить и протокол (TCP/UDP). TCP, UDP / ingress и egress
Destination-port <number>, <range> Номер порта назначения TCP или UDP. Для использования необходимо определить и протокол (TCP/UDP). TCP, UDP / ingress и egress
TCP-flags <bitfield> Флаги TCP. Используется в дополнение к критерию protocol. В качестве значения кроме цифр можно задавать следующие текстовые синонимы: ACK(0x10), FIN(0x01), PUSH(0x08), RST(0x04), SYN(0x02), URG(0x20), SYN_ACK(0x12). TCP / ingress и egress
IGMP-msg-type <number> Тип сообщения IGMP. Возможны следующие значения (текстовые синонимы): v1-report(0x12), v2-report(0x16), v3-report(0x22), V2-leave(0x17), query(0x11). IGMP / ingress и egress
ICMP-type <number> Поле типа ICMP. Используется в дополнение к критерию protocol. Вместо <number> можно использовать следующие текстовые псевдонимы: echo-reply(0), echo-request(8), info-reply(16), info-request(15), mask-request(17), mask-reply(18), parameter-problem(12), redirect(5), router-advertisement(9), router-solicit(10), source-quench(4), time-exceeded(11), timestamp(13), timestamp-reply(14), unreachable(3). ICMP / ingress и egress
ICMP-code <number> Поле кода ICMP. Точнее определяет смысл типа ICMP. Используется в дополнение к критерию ICMP-type. Описание значений см. в Concepts Guide. ICMP / ingress и egress
source-sap SSAP - поле длиной 1 байт, диапазон значений 0-255. Может определяться в десятичном или 16-ричном виде. Значение поля SSAP в пакете формата 802.3 SNAP или LLC находится в байте со смещением 15. ethernet / ingress
destination-sap DSAP - поле длиной 1 байт, диапазон значений 0-255. Может определяться в десятичном или 16-ричном виде. Значение поля DSAP в пакете формата 802.3 SNAP или LLC находится в байте со смещением 14. ethernet / ingress
snap-type Тип SNAP - поле длиной 2 байта, диапазон значений 0-65535. Может определяться в десятичном или 16-ричном виде. Значение поля DSAP в пакете формата 802.3 SNAP находится в байтах со смещением 20 и 21. ethernet / ingress
IP-ToS Поле IP-ToS. Вместо числового значения можно указывать текстовые синонимы: minimize-delay 16(0x10), maximize-reliability 4(0x04), minimize-cost 2(0x02), normal-service 0(0x00). все IP / ingress и egress
dscp Биты dscp в поле IP-ToS. Указывается десятичное значение. все IP / ingress и egress
fragments Фрагментированные IP-пакеты. FO > 0 (FO = Fragment Offset в заголовке IP). все IP, без правил L4 / ingress
first-fragment Фрагментированный НЕ-IP пакет, либо первый фрагмент IP-пакета. FO = 0. все IP / ingress
protocol <number> Поле IP-протокола. Можно использовать следующие текстовые синонимы: egp(8), gre(47), icmp(1), igmp(2), ipip(4), ipv6 over ipv4(41), ospf(89), pim(103), rsvp(46), st(5), tcp(6), udp(17). все IP / ingress и egress
vlan-id <number> Значение VLAN-ID. Правило ACL может быть применено только к портам (не к вланам). На Summit это значение соответствует внешнему тэгу (QinQ,VMAN). все IP / ingress (и egress только на Summit)
dot1p <priority> Проверяет поле 802.1p CoS заголовка 802.1q. все IP / ingress
arp-sender-address <prefix>
или
arp-target-address <prefix>
Выделяют адреса отправителей или получателей в arp-пакете. Не могут быть в одной записи с ethernet-source-address или ethernet-destination-address. Могут быть использованы, только когда база данных ACL на железе настроена в режиме internal. ARP пакеты / ingress


[править] Удлинённая маска сравнения полей пакетов (Wide Key ACLs)

Это функция делает возможным подвергать анализу и сравнению 362 бита от пакета, вместо стандартных 181 бита. Это позволяет добавить больше условий совпадения в ACL, а так же сравнивать полные адреса источника и назначения IPv6. Новых условий для сравнений она не добавляет. Для подробного изучения особенностей данной функции нужно читать Consepts Guide.

configure access-list width {double | single} [slot <slotNo> | all ]
show access-list width [slot <slotNo> | all ]

Если режим изменён, то для применения этой настройки требуется перезагрузка.

[править] Перечень возможных действий над трафиком и модификаторов

Действия:

  • permit - передать пакет;
  • deny - сбросить пакет;
  • deny-cpu - не пропускать пакеты, которые скоммутированны для CPU, в control-plane коммутатора. При этом их обработка в data-plane не затрагивается. Например, это действие может быть полезно, чтобы оградить CPU от получения бродкаст-пакетов при этом позволяя им распространяться во все порты, куда выходит влан. Так же можно оградить CPU от получения STP BPDU, а пересылать такие пакеты через порты. Так, коммутатор становится прозрачным для STP BPDU.
  • copy-cpu-and-drop - пакеты, удовлетворяющие критерию правила, перенаправляются к CPU и никуда больше не пересылаются.

Модификаторы действий:

  • count <COUNTER-NAMR> - увеличить указанный счётчик. Ingress и Egress ACL.
  • byte-count <BYTE-COUNTER-NAME> - увеличить указанный счётчик байтов. Ingress ACL.
  • packet-count <PACKET-COUNTER-NAME> - увеличить указанный счётчик пакетов. Ingress ACL.
  • log - записать заголовок пакета в журнал.
  • log-raw - записать заголовок пакета в журнал в hex-формате.
  • meter <metername> - обработать трафик согласно указанному полисеру. Ingress ACL (на Summit).
  • mirror - послать копию пакета в мониторинговый порт. Ingress ACL.
  • mirror-cpu - послать копию пакета в CPU чтобы можно было внести его в журнал. Ingress ACL.
  • qosprofile <qpX> - обработать пакет согласно правилам указанного QoS-профайла. Ingress и Egress ACL.
  • traffic-queue <queue> - поместить пакет в указанную traffic-queue (доступно только на BD 12800 и BD 20800);
  • redirect <ipv4-address> - переопределить routing-decision, послав пакет на указанный адрес шлюза. При этом IP-заголовок не изменяется. Для указанного IP-адреса назначения должна существовать запись в ARP-таблице. Используется для PBR.
  • redirect-port <port> - переопределить forwarding-decision, послав пакет через указанный исходящий интерфейс (порт). Если порт является частью портгруппы, к пакету будет применён алгоритм распределения нагрузки, принятый в портгруппе.
  • redirect-port-no-sharing <port> - то же, что redirect-port, только пакет будет послан строго через указанный интерфейс, без учёта возможного его присутствия в портгруппе.
  • replace-dscp - заменить значение поля DSCP в IP-пакете на определённое для QoS-профайла, в котором обрабатывается пакет. Ingress и Egress ACL.
  • replace-dot1p - заменить значение поля 802.1p CoS на определённое для QoS-профайла, в котором обрабатывается пакет. Ingress и Egress ACL.
  • replace-dot1p-value <value> - заменить значение поля 802.1p CoS на указанное явно в этом модификаторе. Ingress и Egress ACL.
  • replace-ethernet-destination-address <MAC> - заменить в пакете MAC-адрес назначения. Применяется только к коммутируемому на L2-трафику.

[править] Практика

[править] Применение обновлённых ACL после редактирования

ACL задаются в текстовых файлах, лежащих на flash коммутатора. Чтобы применить изменения после редактирования этих файлов, используйте последовательность команд

check policy <PNAME>
refresh policy <PNAME>

В короткий момент времени, когда обновлённый ACL заносится в ASIC, все пакеты на интерфейсе сбрасываются (по-умолчанию). Можно управлять этим поведением командой

{enable | disable} access-list refresh blackhole

Если применить команду, начинающуюся с disable, то в момент обновления ACL на ASIC интерфейса все пакеты, пришедшие на порт, будут приниматься. Если это не магистральный порт, то на него могут придти нежелательные BPDU, что опасно в случае использования STP. В ситуациях, когда указанный риск существует, рекомендуется оставлять настройку с enable (по-умолчанию).

[править] Пример: аналог BPDU-filter на портах

entry BPDUfilter1 {
    if {
        ethernet-destination-address 01:00:0c:cc:cc:cd;
    } then {
        deny;
    }
}
entry BPDUfilter2 {
    if {
        ethernet-destination-address 01:80:C2:00:00:00;
    } then {
        deny;
    }
}