Данная статья рассматривает конфигурацию ACL в KLISH.


ACL Table 

Для каждой таблицы определяются тип и направление. Таблицы содержат правила, и перечь портов к которым эти правила применяются, таблица может быть ассоциирована с одним или несколькими интерфейсами, так же как и интерфейс может быть ассоциирован с множеством таблиц. Каждая таблица имеет определенный тип, который определяет назначение таблицы и то, каким образом будет обрабатываться трафик, который будет соответствовать данной таблице. Таблица может иметь один из следующих типов: L3, L3V6 (IPv6 ACL table), FLOW_CONTROL , MIRROR, CTRLPLANE, VXLAN_STATS. Направление может быть ingress и egress, правило не может обрабатывать оба направления одновременно. 


ACL Rule 

В правиле определяется приоритет, условие совпадения и действие после совпадения. Правило ACL можно добавить только к одной таблице, но таблица может иметь несколько правил. Приоритет тем выше, чем больше номер правила (20 приоритетнее 10).

Команды диагностики

Table     Rule      Priority    Action    Match
--------  --------  ----------  --------  ------------------
ACC_TAB1  rule_100  100         FORWARD   IP_TYPE: ANY
                                          SRC_IP: 2.2.2.2/32
ACC_TAB1  rule_10   10          FORWARD   IP_TYPE: ANY
                                          SRC_IP: 1.1.1.1/32
ACC_TAB2  rule_1    1           FORWARD   IP_TYPE: ANY


TName      Type    Binding    Description    Stage
--------  ------  ---------  -------------  -------
ACC_TAB1  L3      Ethernet0  ACC_TAB1       ingress
ACC_TAB2  L3      Ethernet0  ACC_TAB2       ingress
TAB_001   L3                 TAB_001        ingress
 


Команды настройки.


[Возможные параметры]
table_type = L3, L3v6, MIRROR, MIRRORv6, FLOW_CONTROL, CTRLPLANE
 table_name Имя
 table_stage Направление ingress или egress

Пример
access-list ACC_TAB1 l3 ingress

Удаление таблицы.
no access-list table_name
	P.S. Перед удалением таблицы требуется удалить все правила из таблицы.  


[Возможные параметры]
ingress action
 packet-action {deny|permit|trap-to-cpu|copy-to-cpu}  
 redirect-action {ethernet|lag}

egress action 
 packet-action {deny|permit|trap-to-cpu|copy-to-cpu}

Возможные поля для сопоставления трафика (rule)
 vlan-pri vlan-pri range 0-7
 outer-vlan outer-vlan range 1-4094
 ip-protocol ip-protocol range 0-255
 source-port sport range 0-65535
 destination-port dport range 0-65535
 tcp-flags tcp-flags HEX<0-FF>
 source -mac smac HH:HH:HH:HH:HH:HH(ingress)
 destination-mac dmac HH:HH:HH:HH:HH:HH(ingress)

Специфичные для таблицы типа L3
 source-ip sip A.B.C.D(/M)
 destination-ip dip A.B.C.D(/M)
 icmp-type icmp-type range 0-16
 icmp-code icmp-code ``` range 0-5
 ethernet-type eth-type HEX<0-FFFF>
 ecn ecn range 0-3
 dscp dscp range 0-63

rule id от 0 до 500, как писалось выше чем больше номер правила тем выше приоритет. 
  
access-list ACC_TAB1 l3 ingress
 rule 100 source-ip 192.168.0.0/24 packet-action permit
 rule 99 source-ip 192.168.1.0/24 packet-action deny

Удаление правила 
	no rule rule-id 


type тип интерфейса, ethernet или link-aggregation
interface-name имя интерфейса. 
bind interface ethernet 0/0


Пример конфигурации

Перед началом данной главы хотелось бы дать небольшое пояснение логике работы ACL.

Трафик который предназначен коммутатору (например доступ по ssh или snmp), не будет обработан правилами таблиц типа L3 или L3v6. Для этого предлагается использовать таблицы типа CTRLPLANE. 
Для таблиц типа CTRLPLANE поддерживаются только поля  source-ip и source-ipv6.

Ограничение SSH (control-plane)


Запрещаем доступ к коммутатору по ssh из сети 10.8.1.0/24:

access-list CTRL1 ctrlplane ingress ssh
  rule 100 source-ip 10.8.1.0/24 packet-action deny
  rule 99 source-ip 0.0.0.0/0 packet-action accept

Фильтрация DNS (data-plane)

Разрешаем только DNS-запросы к серверам 172.21.1.10 и 172.21.1.11:

access-list DNS_CTRL l3 ingress
	bind interface ethernet 0/0
 	rule 99 ip-protocol 6 destination-port 53 source-ip 0.0.0.0/0 ip-type IP packet-action deny
	rule 100 ip-protocol 17 destination-port 53 source-ip 0.0.0.0/0 ip-type IP packet-action deny
	rule 101 ip-protocol 17 destination-port 53 source-ip 172.21.1.10/32 ip-type IP packet-action permit
	rule 102 ip-protocol 17 destination-port 53 source-ip 172.21.1.11/32 ip-type IP packet-action permit
	rule 103 ip-protocol 6 destination-port 53 source-ip 172.21.1.11/32 ip-type IP packet-action permit
	rule 104 ip-protocol 6 destination-port 53 source-ip 172.21.1.10/32 ip-type IP packet-action permit
	
Первые два правила запрещают UDP/TCP трафик на dst-port 53 из всех сетей, они же являются самыми низко приоритетными в этой таблице. Оставшиеся правила разрешают DNS запросы на NS сервера 172.21.1.10 и 172.21.1.11. Строка bind interface ethernet 0/0 указывает на то, на какие именно интерфейсы применены правила.

Фильтрация ARP (data-plane)

Разрешаем ARP-ответы только от 10.100.1.0/24:

access-list ARP_CTRL l3 ingres
	bind interface ethernet 0/0
	rule 100 ip-type ARP_REPLY source-ip 10.100.1.0/24 packet-action permit
	rule 99 ip-type ARP_REPLY source-ip 0.0.0.0/0 packet-action deny