Фильтрация трафика на коммутаторах Huawei

—

от автора

В этой короткой статье я хочу описать, как можно гибко фильтровать трафик на коммутаторах 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/