В этой короткой статье я хочу описать, как можно гибко фильтровать трафик на коммутаторах Huawei, на примере стека из двух S6730.
Задача из тестовой сети:
10.0.18.0/24
Запретить доступ на сети:
10.177.1.0/2410.0.177.0/24
Разрешить весь остальной трафик, но при этом временно разрешать трафик на некоторые хосты из сетей 10.177.1.0/24 и 10.0.177.0/24
и плюс к этому, еще одновременно к ним же запрещать и разрешать доступ из некоторых других сетей.
Если бы у нас были Object-Group, но у нас нет Object-Group.
Можно сделать ACL и первыми правилами разрешить доступ на нужные хосты, следующими запретить доступ на эти сети и последним правилом разрешить остальной трафик.
И затем использовать эти ACL для фильтрации, но придется редактировать несколько ACL и добавлять/удалять туда правила с одними и теми же хостами.
Поэтому можно сделать три разных ACL:
-
TNET_ALLOW в нем указываем к каким хостам разрешить доступ.
-
TNET_DENY в нем указываем к каким подсетям запретить доступ (обязательно нужно включить подсети, в которые входят адреса разрешенных хостов, указанных в TNET_ALLOW)
-
TNET_ALLOWALL в нем указываем какой трафик разрешить и он будет проверен последним, в нашем случае это трафик с сети 10.0.0.0/8 на любой адрес назначения, или же можно более гранулировано.
В ACL все правила permit, потому что этот лист не определяет, что делать с трафиком, а определяет условие классификации, то есть если permit, то условие выполнено.
Что делать с трафиком, определяет поведение TNET_ALLOW_BH, TNET_ALLOW_BHEX и TNET_DENY_BH там указано либо permit, либо deny.
Еще нужны сами классификаторы, их три, по одному на каждый ACL:
-
Классификатор TNET_ALLOW_CL
-
Классификатор TNET_DENY_CL
-
Классификатор TNET_ALLOWALL_CL
Далее создаем политику TNET_COMPOSITE_POLICY с указанием, что перебирать правила нужно в том порядке, в котором они указаны в конфигурационном файле (match-order config)
В ней перечисляем классификаторы и поведение:
classifier TNET_ALLOW_CL behavior TNET_ALLOW_BHEXclassifier TNET_DENY_CL behavior TNET_DENY_BHclassifier TNET_ALLOWALL_CL behavior TNET_ALLOW_BH
Таким образом получается, что классификатор TNET_ALLOW_CL связан с поведением TNET_ALLOW_BHEX, в котором действие указано как permit, и трафик будет разрешен А классификатор TNET_DENY_CL связан с поведением TNET_DENY_BH, в котором действие указано как deny, и трафик будет запрещен. Классификатор TNET_ALLOWALL_CL, определяющий прочий трафик, связан с поведением TNET_ALLOW_BH.
Затем эта политика назначается на Vlan:
vlan 10 traffic-policy TNET_COMPOSITE_POLICY inbound
Для регулирования правил доступа, например, если вам понадобится разрешить какой-то новый хост из запрещенных сетей, указанных в списке доступа TNET_DENY, добавляем его адрес в список доступа TNET_ALLOW.
Для быстрого запрета доступа на все разрешенные в списке TNET_ALLOW хосты и/или сети, можно изменить поведение TNET_ALLOW_BHEX на deny:
system-viewtraffic behavior TNET_ALLOW_BHEXdeny
Для разрешения, соответственно permit
Именно поэтому создано отдельное поведение.
Конфигурация получится примерно такая:
acl name TNET_ALLOW 3998 rule 12 permit ip destination 10.177.1.5 0 rule 13 permit ip destination 10.0.177.5 0acl name TNET_DENY 3997 rule 210 permit ip source 10.0.18.0 0.0.0.255 destination 10.177.1.0 0.0.0.255 rule 220 permit ip source 10.0.18.0 0.0.0.255 destination 10.0.177.0 0.0.0.255acl name TNET_ALLOWALL 3996 rule 300 permit ip source 10.0.0.0 0.255.255.255traffic classifier TNET_ALLOW_CL operator or if-match acl TNET_ALLOWtraffic classifier TNET_DENY_CL operator or if-match acl TNET_DENYtraffic classifier TNET_ALLOWALL_CL operator or if-match acl TNET_ALLOWALLtraffic behavior TNET_ALLOW_BHEX statistic enable permittraffic behavior TNET_ALLOW_BH permit statistic enabletraffic behavior TNET_DENY_BH deny statistic enabletraffic policy TNET_COMPOSITE_POLICY match-order config classifier TNET_ALLOW_CL behavior TNET_ALLOW_BHEX classifier TNET_DENY_CL behavior TNET_DENY_BH classifier TNET_ALLOWALL_CL behavior TNET_ALLOW_BHvlan 10 description TESTV1 traffic-policy TNET_COMPOSITE_POLICY inbound
Теперь о том, как например сделать так, чтобы одному набору VLAN трафик на некоторые (один и тот же набор) хосты разрешить,
а другому запретить (при условии, что в этих VLAN подсети попадают в суперсеть 10.0.0.0/8)
Нужно сделать еще одну политику и поведение:
traffic behavior TNET_DENY_BHEX statistic enable denytraffic policy TNET_DENYOTHER_POLICY match-order config classifier TNET_ALLOW_CL behavior TNET_DENY_BHEX classifier TNET_ALLOWALL_CL behavior TNET_ALLOW_BH
В ней тот же классификатор TNET_ALLOW_CL будет сопоставлен с поведением deny
А классификатор TNET_ALLOWALL_CL все так же будет разрешать весь остальной трафик, так как сопоставлен с поведением TNET_ALLOW_BH
И эту политику применить к целевому VLAN:
vlan XXXX traffic-policy TNET_DENYOTHER_POLICY inbound
И точно так же, меняя deny на permit в поведении TNET_DENY_BHEX можно запрещать/разрешать трафик на хосты из списка TNET_ALLOW
Как проверить, что получилось:
display traffic policy vlan XXX покажет, какие правила применились
Пример:
display traffic policy vlan 10Vlan: 10 Direction: InboundPolicy: SRV_PP_COMPOSITE_POLICYClassifier: SRV_PP_ALLOW_CLOperator: ORRule(s) :if-match acl SRV_PP_ALLOWBehavior: SRV_PP_ALLOW_BHEXStatistic: enablePermitClassifier: SRV_PP_DENY_CLOperator: ORRule(s) :if-match acl SRV_PP_DENYBehavior: SRV_PP_DENY_BHDenyStatistic: enableClassifier: SRV_PP_ALLOWALL_CLOperator: ORRule(s) :if-match acl SRV_PP_ALLOWALLBehavior: SRV_PP_ALLOW_BHPermitStatistic: enable
display traffic policy statistics vlan XXX inbound покажет счетчики по правилам. Пример:
display traffic policy statistics vlan 10 inboundVlan: 10Traffic policy inbound: TNET_COMPOSITE_POLICYRule number: 5Current status: successStatistics interval: 300---------------------------------------------------------------------Board : 0---------------------------------------------------------------------Matched | Packets: 590| Bytes: 81,525| Rate(pps): 0| Rate(bps): 176---------------------------------------------------------------------Passed | Packets: 579| Bytes: 79,387| Rate(pps): 0| Rate(bps): 176---------------------------------------------------------------------Dropped | Packets: 22| Bytes: 2,227| Rate(pps): 0| Rate(bps): 0--------------------------------------------------------------------- Filter | Packets: 22 | Bytes: 2,227--------------------------------------------------------------------- Car | Packets: 0 | Bytes: 0---------------------------------------------------------------------Board : 1---------------------------------------------------------------------Matched | Packets: 20| Bytes: 1,994| Rate(pps): 0| Rate(bps): 0---------------------------------------------------------------------Passed | Packets: 18| Bytes: 1,266| Rate(pps): 0| Rate(bps): 0---------------------------------------------------------------------Dropped | Packets: 7| Bytes: 747| Rate(pps): 0| Rate(bps): 0--------------------------------------------------------------------- Filter | Packets: 7 | Bytes: 747--------------------------------------------------------------------- Car | Packets: 0 | Bytes: 0---------------------------------------------------------------------
Тут видно, что, во-первых, счётчики считаются по каждому члену стека отдельно, а во-вторых, что туда попал трафик.
Вот и все, всем сетевикам спокойной работы.
ссылка на оригинал статьи https://habr.com/ru/articles/1086364/