Cisco-COPP-ASR1001: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 36 промежуточных версий этого же участника)
Строка 4: Строка 4:
 
[[Категория:CoPP]]
 
[[Категория:CoPP]]
 
[[Категория:Port Knocking]]
 
[[Категория:Port Knocking]]
  +
   
 
=Control Plane Policing (CoPP) (на примере ASR1001)=
 
=Control Plane Policing (CoPP) (на примере ASR1001)=
   
  +
Общая идея работы:
  +
* ACL описывают разрешенные сети/порты
  +
* Class-map просто обертка над ACL никакой дополнительной логики они не вносят
  +
* Policy-map объединяет правило в список, сначала запрещяющие правила потом разрешить все что не запрещено
  +
  +
Если запретить "все что не разрешено", то прийдется повозиться с разрешениями - например сходу отломался LACP когда я попробовал такую схему.
  +
  +
=Ссылки и примеры=
  +
* на руском но не релевантно ASR1000: http://ciscomaster.ru/content/bezopasnost-nachalo-13-bezopasnost-i-control-plane
  +
* еще на хабре https://qna.habr.com/q/244119
  +
* https://www.cisco.com/c/en/us/td/docs/ios/ios_xe/sec_control_plane/configuration/guide/2_xe/cps_xe_book/ctrl_plane_policng_xe.html
  +
* https://freenetworktutorials.com/control-plane-policing-copp-configuration-in-cisco-ios/
  +
  +
=Очистка настроек <code>control-plane</code>=
  +
Перед настройкой удалить существующие настройки иначе новая политика не назначается
 
<PRE>
 
<PRE>
 
control-plane
 
control-plane
Строка 13: Строка 29:
 
no policy-map POLICY_MAP_COPP_INPUT_POLICY
 
no policy-map POLICY_MAP_COPP_INPUT_POLICY
 
</PRE>
 
</PRE>
  +
Проверить настройки:
  +
<PRE>
  +
show policy-map control-plane
  +
</PRE>
  +
=ACL=
  +
Особенность ACL: <BR>
  +
так как все что попадет под <code>permit</code>, после попадет в соответствующий <code>class-map</code> то <BR>
  +
ACL вывернут на изнанку - <code>deny</code> означает "разрешить" (исключить из <code>class-map</code> и направить в разрешающее правило)<BR>
   
  +
==<code>ip access-list extended ACCESS_LIST_COPP_TELNET</code>==
  +
* <code> deny tcp any any established </code> разрешить уже установленные соединения
 
<PRE>
 
<PRE>
 
no ip access-list extended ACCESS_LIST_COPP_TELNET
 
no ip access-list extended ACCESS_LIST_COPP_TELNET
Строка 22: Строка 48:
 
</PRE>
 
</PRE>
   
  +
===<code>ip access-list extended ACCESS_LIST_COPP_SSH</code>===
 
<PRE>
 
<PRE>
 
no ip access-list extended ACCESS_LIST_COPP_SSH
 
no ip access-list extended ACCESS_LIST_COPP_SSH
Строка 30: Строка 57:
 
</PRE>
 
</PRE>
   
  +
===<code>ip access-list extended ACCESS_LIST_COPP_SNMP</code>===
 
<PRE>
 
<PRE>
 
no ip access-list extended ACCESS_LIST_COPP_SNMP
 
no ip access-list extended ACCESS_LIST_COPP_SNMP
 
ip access-list extended ACCESS_LIST_COPP_SNMP
 
ip access-list extended ACCESS_LIST_COPP_SNMP
deny udp 10.72.0.0 0.0.0.255 any eq 161
+
deny udp 172.31.100.0 0.0.0.255 any eq snmp
  +
deny udp 10.72.0.0 0.0.0.255 any eq 161
 
permit udp any any eq 161
 
permit udp any any eq 161
 
exit
 
exit
 
</PRE>
 
</PRE>
   
  +
===<code>ip access-list extended ACCESS_LIST_COPP_BGP</code>===
 
<PRE>
 
<PRE>
 
no ip access-list extended ACCESS_LIST_COPP_BGP
 
no ip access-list extended ACCESS_LIST_COPP_BGP
 
ip access-list extended ACCESS_LIST_COPP_BGP
 
ip access-list extended ACCESS_LIST_COPP_BGP
 
deny tcp any any established
 
deny tcp any any established
deny tcp 172.31.0.100 0.0.0.255 any eq 179
+
deny tcp 172.31.0.0 0.0.0.255 any eq 179
 
permit tcp any any eq 179
 
permit tcp any any eq 179
 
exit
 
exit
 
</PRE>
 
</PRE>
   
  +
===<code>ip access-list extended ACCESS_LIST_COPP_RADIUS</code>===
 
<PRE>
 
<PRE>
 
no ip access-list extended ACCESS_LIST_COPP_RADIUS
 
no ip access-list extended ACCESS_LIST_COPP_RADIUS
Строка 59: Строка 90:
 
</PRE>
 
</PRE>
   
  +
==<code>class-map</code>==
  +
===<code>class-map CLASS_MAP_COPP_TELNET</code>===
 
<PRE>
 
<PRE>
 
no class-map CLASS_MAP_COPP_TELNET
 
no class-map CLASS_MAP_COPP_TELNET
Строка 66: Строка 99:
 
</PRE>
 
</PRE>
   
  +
===<code>class-map CLASS_MAP_COPP_SSH</code>===
 
<PRE>
 
<PRE>
 
no class-map CLASS_MAP_COPP_SSH
 
no class-map CLASS_MAP_COPP_SSH
Строка 73: Строка 107:
 
</PRE>
 
</PRE>
   
  +
===<code>class-map CLASS_MAP_COPP_SNMP</code>===
 
<PRE>
 
<PRE>
 
no class-map CLASS_MAP_COPP_SNMP
 
no class-map CLASS_MAP_COPP_SNMP
Строка 80: Строка 115:
 
</PRE>
 
</PRE>
   
  +
===<code>class-map CLASS_MAP_COPP_BGP</code>===
 
<PRE>
 
<PRE>
 
no class-map CLASS_MAP_COPP_BGP
 
no class-map CLASS_MAP_COPP_BGP
Строка 87: Строка 123:
 
</PRE>
 
</PRE>
   
  +
===<code>class-map CLASS_MAP_COPP_RADIUS</code>===
 
<PRE>
 
<PRE>
 
no class-map CLASS_MAP_COPP_RADIUS
 
no class-map CLASS_MAP_COPP_RADIUS
Строка 93: Строка 130:
 
exit
 
exit
 
</PRE>
 
</PRE>
 
   
 
==<code>policy-map POLICY_MAP_COPP_INPUT_POLICY</code>==
 
==<code>policy-map POLICY_MAP_COPP_INPUT_POLICY</code>==
  +
<code>policy-map</code> разбита на части для удобства восприятия
  +
  +
* Строчка <code>police cir 32000 bc 1500 be 1500 conform-action drop exceed-action drop violate-action drop</code> эквивалентно действию <code><B>drop</B></code> так как на некоторых платформах это действие недоступно
  +
  +
* Удалить и заново добавить <code>policy-map</code>
 
<PRE>
 
<PRE>
 
no policy-map POLICY_MAP_COPP_INPUT_POLICY
 
no policy-map POLICY_MAP_COPP_INPUT_POLICY
 
policy-map POLICY_MAP_COPP_INPUT_POLICY
 
policy-map POLICY_MAP_COPP_INPUT_POLICY
  +
</PRE>
  +
===telnet===
  +
<PRE>
 
! Deny telnet
 
! Deny telnet
 
class CLASS_MAP_COPP_TELNET
 
class CLASS_MAP_COPP_TELNET
Строка 105: Строка 149:
 
exit
 
exit
 
</PRE>
 
</PRE>
  +
!
 
  +
===ssh===
 
<PRE>
 
<PRE>
 
! Deny ssh
 
! Deny ssh
Строка 113: Строка 158:
 
exit
 
exit
 
</PRE>
 
</PRE>
  +
  +
===snmp===
  +
<PRE>
 
! Deny SNMP
 
! Deny SNMP
 
class CLASS_MAP_COPP_SNMP
 
class CLASS_MAP_COPP_SNMP
Строка 120: Строка 168:
 
!
 
!
 
</PRE>
 
</PRE>
  +
  +
===BGP===
 
<PRE>
 
<PRE>
 
! Deny BGP
 
! Deny BGP
Строка 128: Строка 178:
 
!
 
!
 
</PRE>
 
</PRE>
  +
  +
===Radius===
 
<PRE>
 
<PRE>
 
! Deny RADIUS
 
! Deny RADIUS
Строка 137: Строка 189:
 
</PRE>
 
</PRE>
   
  +
===Остальной траффик===
 
<PRE>
 
<PRE>
 
! Permit other (include LACP)
 
! Permit other (include LACP)
Строка 146: Строка 199:
 
</PRE>
 
</PRE>
   
  +
==<code>control-plane</code>==
 
<PRE>
 
<PRE>
 
control-plane
 
control-plane
Строка 152: Строка 206:
 
exit
 
exit
 
</PRE>
 
</PRE>
  +
  +
=Port Knock=
  +
<PRE>
  +
ip access-list extended KNOCK_TCP_32022
  +
remark *** KNOCK ***
  +
permit tcp any host 172.31.100.194 eq 32022 log
  +
remark *** PERMITED ***
  +
permit ip any any
  +
exit
  +
</PRE>
  +
  +
<PRE>
  +
event manager environment KNOCK_ACL_SSH ACCESS_LIST_COPP_SSH
  +
event manager environment KNOCK_ACL_TELNET ACCESS_LIST_COPP_TELNET
  +
no event manager applet KNOCK_TELNET_SSH
  +
event manager applet KNOCK_TELNET_SSH
  +
event syslog pattern "%FMANFP-6-IPACCESSLOGP: SIP0: fman_fp_image: list KNOCK_TCP_32022 permitted tcp *"
  +
!
  +
action 001.0 regexp "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" "$_syslog_msg" ADDR
  +
action 001.1 regexp "\([0-9]+\)," "$_syslog_msg" PORT
  +
action 001.2 regexp "[0-9]+" "$PORT" PORT
  +
!
  +
action 002.0 syslog msg "Received a knock from $ADDR on port $PORT..."
  +
!
  +
action 002.1 syslog msg "Adding $ADDR to the $KNOCK_ACL_SSH ACL"
  +
!
  +
action 003.0 cli command "enable"
  +
action 003.1 cli command "configure terminal"
  +
action 003.2 cli command "ip access-list extended $KNOCK_ACL_SSH"
  +
action 003.3 cli command "1 deny tcp host $ADDR any eq 22"
  +
action 003.4 cli command "end"
  +
action 003.5 cli command " "
  +
!
  +
action 004.0 syslog msg "Added $ADDR to the $KNOCK_ACL_SSH ACL"
  +
!
  +
action 004.1 syslog msg "Adding $ADDR to the $KNOCK_ACL_TELNET ACL"
  +
!
  +
action 005.0 cli command "enable"
  +
action 005.1 cli command "configure terminal"
  +
action 005.4 cli command "ip access-list extended $KNOCK_ACL_TELNET"
  +
action 005.5 cli command "1 deny tcp host $ADDR any eq telnet"
  +
action 005.6 cli command "end"
  +
!
  +
action 006.0 syslog msg "Added $ADDR to the $KNOCK_ACL_TELNET ACL"
  +
action 006.1 syslog msg "Waiting for 20 sec before deleting rules"
  +
!
  +
action 007.0 wait 20
  +
!
  +
action 008.0 syslog msg "Wait finished"
  +
!
  +
action 008.1 syslog msg "Removing $ADDR from the $KNOCK_ACL_SSH ACL"
  +
!
  +
action 009.0 cli command "enable"
  +
action 009.1 cli command "configure terminal"
  +
action 009.2 cli command "ip access-list extended $KNOCK_ACL_SSH"
  +
action 009.3 cli command "no deny tcp host $ADDR any eq 22"
  +
action 009.4 cli command "end"
  +
!
  +
action 010.0 syslog msg "Removed $ADDR to the $KNOCK_ACL_SSH ACL"
  +
!
  +
action 010.0 syslog msg "Removing $ADDR to the $KNOCK_ACL_TELNET ACL"
  +
!
  +
action 011.0 cli command "enable"
  +
action 011.1 cli command "configure terminal"
  +
action 011.2 cli command "ip access-list extended $KNOCK_ACL_TELNET"
  +
action 011.3 cli command "no deny tcp host $ADDR any eq telnet"
  +
action 011.4 cli command "end"
  +
!
  +
action 012.0 syslog msg "Removed $ADDR from the $KNOCK_ACL_TELNET ACL"
  +
exit
  +
  +
</PRE>
  +
  +
  +
=Копия заметки про CoPP=
  +
Это копия с хабра - может быть полезна так как информации довольно мало
  +
  +
Как обрабытывается CEF-exception трафик внутри cppr-политики в Cisco IOS-XE?<BR>
  +
Написал cppr-политики для роутеров Cisco на IOS и IOS-XE.
  +
<BR>
  +
И столкнулся со следующей проблемой: на IOS-XE железе нет control-plane cef-exception режима,
  +
весь трафик на коробку обрабатывается внутри единой политики.
  +
И в этой политике никак не удается поймать BFD-пакеты..
  +
<BR>
  +
По счетчикам вижу, что вcе BFD-пакеты оседают на итоговом дискардном правиле.
  +
В стандартном IOS BFD по-идее не попадает в cef и обрабатывается внутри control-plane cef-exception;
  +
что делать в случае IOS-XE не пойму - странно, что трафик не попадает в нужный класс, но при этом внутри фильтра валится не в class-default,
  +
а именно в discard-all-UDP правило.
  +
Железо: ASR1002
  +
Версия IOS-XE ROMMON: 153-1r
  +
Версия IOS-XE: 03.14.00.S
  +
Версия IOS внутри: 15.5(1)S
  +
  +
Правило отбора для BFD (упрощенный конфиг):
  +
<PRE>
  +
ip access-list extended RE_bfd
  +
permit udp object-group ext_hosts range 49152 65535 object-group int_hosts range 3784 3785
  +
! далее класс, куда BFD входит:
  +
</PRE>
  +
  +
<PRE>
  +
class-map match-any RE_routing
  +
match access-group name RE_bfd
  +
! дискард правила
  +
</PRE>
  +
<PRE>
  +
ip access-list extended RE_dis_tcp
  +
permit tcp any any fragments
  +
permit tcp any any
  +
</PRE>
  +
  +
<PRE>
  +
ip access-list extended RE_dis_udp
  +
permit udp any any fragments
  +
permit udp any any
  +
</PRE>
  +
  +
<PRE>
  +
ip access-list extended RE_dis_ip
  +
permit icmp any any fragments
  +
permit ip any any fragments
  +
permit ip any any
  +
</PRE>
  +
  +
<PRE>
  +
! дискард класс
  +
class-map match-any RE_dis_traffic
  +
description RE_disable_traffic
  +
match access-group name RE_dis_tcp
  +
match access-group name RE_dis_udp
  +
match access-group name RE_dis_ip
  +
! и все это в cppr-политике:
  +
policy-map RE_cppr
  +
class RE_routing
  +
class RE_dis_traffic
  +
police rate 1 pps
  +
! включаем
  +
control-plane
  +
service-policy input RE_cppr
  +
!
  +
</PRE>
  +
UPD: С LDP трафиком аналогичная проблема, поэтому склонен считать, что она характерна для всех CEF-exception пакетов внутри коробки.
  +
  +
Итак, симтомы проблемы я устранил.
  +
Изначально ACL для отбора было таким:
  +
<PRE>
  +
!
  +
permit udp object-group ext_hosts range 49152 65535 object-group int_hosts range 3784 3785
  +
!
  +
</PRE>
  +
Собственно, возникла идея поиграть с условиями и я убрал ограничение по адресам. ACL превратился в:
  +
!
  +
<PRE>
  +
permit udp any range 49152 65535 any range 3784 3785
  +
</PRE>
  +
!
  +
И все заработало! Но вопрос все равно открыт - устранился симптом, почему ASR не обрабатывает условие по ip-заголовкам - непонятно. Баг или особенность обработки host-inbound трафика на IOS-XE?
  +
  +
UPD: Весь сыр-бор возник из-за того, что внутри ACL для cef-exception трафика не работают object-groups. Для остального host-inbound трафика они работают.
  +
Если вместо <code>object-groups</code> напрямую писать ip-адреса, то все работает как надо.

Текущая версия на 13:36, 2 июля 2024


Control Plane Policing (CoPP) (на примере ASR1001)

Общая идея работы:

  • ACL описывают разрешенные сети/порты
  • Class-map просто обертка над ACL никакой дополнительной логики они не вносят
  • Policy-map объединяет правило в список, сначала запрещяющие правила потом разрешить все что не запрещено

Если запретить "все что не разрешено", то прийдется повозиться с разрешениями - например сходу отломался LACP когда я попробовал такую схему.

Ссылки и примеры

Очистка настроек control-plane

Перед настройкой удалить существующие настройки иначе новая политика не назначается

control-plane
 no service-policy input POLICY_MAP_COPP_INPUT_POLICY
exit
no policy-map POLICY_MAP_COPP_INPUT_POLICY

Проверить настройки:

show policy-map control-plane

ACL

Особенность ACL:
так как все что попадет под permit, после попадет в соответствующий class-map то
ACL вывернут на изнанку - deny означает "разрешить" (исключить из class-map и направить в разрешающее правило)

ip access-list extended ACCESS_LIST_COPP_TELNET

  • deny tcp any any established разрешить уже установленные соединения
no ip access-list extended ACCESS_LIST_COPP_TELNET
ip access-list extended ACCESS_LIST_COPP_TELNET
 deny   tcp any any established
 permit tcp any any eq telnet
exit 

ip access-list extended ACCESS_LIST_COPP_SSH

no ip access-list extended ACCESS_LIST_COPP_SSH
ip access-list extended ACCESS_LIST_COPP_SSH
 deny   tcp any any established
 permit tcp any any eq 22
exit 

ip access-list extended ACCESS_LIST_COPP_SNMP

no ip access-list extended ACCESS_LIST_COPP_SNMP
ip access-list extended ACCESS_LIST_COPP_SNMP
 deny   udp 172.31.100.0  0.0.0.255 any eq snmp
 deny   udp 10.72.0.0     0.0.0.255 any eq 161
 permit udp any any eq 161
exit

ip access-list extended ACCESS_LIST_COPP_BGP

no ip access-list extended ACCESS_LIST_COPP_BGP
ip access-list extended ACCESS_LIST_COPP_BGP
 deny   tcp any any established
 deny   tcp 172.31.0.0 0.0.0.255 any eq 179
 permit tcp any any eq 179
exit

ip access-list extended ACCESS_LIST_COPP_RADIUS

no ip access-list extended ACCESS_LIST_COPP_RADIUS
ip access-list extended ACCESS_LIST_COPP_RADIUS
 deny   udp 172.31.0.0    0.0.0.255 any eq 1812
 deny   udp 172.31.0.0    0.0.0.255 any eq 1813
 deny   udp 100.100.100.0 0.0.0.255 any eq 1812
 deny   udp 100.100.100.0 0.0.0.255 any eq 1813
 permit tcp any any eq 1812
 permit tcp any any eq 1813
exit

class-map

class-map CLASS_MAP_COPP_TELNET

no class-map CLASS_MAP_COPP_TELNET
class-map CLASS_MAP_COPP_TELNET
  match access-group name ACCESS_LIST_COPP_TELNET
exit

class-map CLASS_MAP_COPP_SSH

no class-map CLASS_MAP_COPP_SSH
class-map CLASS_MAP_COPP_SSH
  match access-group name ACCESS_LIST_COPP_SSH
exit

class-map CLASS_MAP_COPP_SNMP

no class-map CLASS_MAP_COPP_SNMP
class-map CLASS_MAP_COPP_SNMP
  match access-group name ACCESS_LIST_COPP_SNMP
exit

class-map CLASS_MAP_COPP_BGP

no class-map CLASS_MAP_COPP_BGP
class-map CLASS_MAP_COPP_BGP
  match access-group name ACCESS_LIST_COPP_BGP
exit

class-map CLASS_MAP_COPP_RADIUS

no class-map CLASS_MAP_COPP_RADIUS
class-map CLASS_MAP_COPP_RADIUS
  match access-group name ACCESS_LIST_COPP_RADIUS
exit

policy-map POLICY_MAP_COPP_INPUT_POLICY

policy-map разбита на части для удобства восприятия

  • Строчка police cir 32000 bc 1500 be 1500 conform-action drop exceed-action drop violate-action drop эквивалентно действию drop так как на некоторых платформах это действие недоступно
  • Удалить и заново добавить policy-map
no policy-map POLICY_MAP_COPP_INPUT_POLICY
policy-map POLICY_MAP_COPP_INPUT_POLICY

telnet

! Deny telnet
 class CLASS_MAP_COPP_TELNET
  police cir 32000 bc 1500 be 1500 conform-action drop exceed-action drop violate-action drop
  exit
 exit

ssh

! Deny ssh
 class CLASS_MAP_COPP_SSH
  police cir 32000 bc 1500 be 1500 conform-action drop exceed-action drop violate-action drop
  exit
 exit

snmp

! Deny SNMP
 class CLASS_MAP_COPP_SNMP
  police cir 32000 bc 1500 be 1500 conform-action drop exceed-action drop violate-action drop
  exit
 exit
!

BGP

! Deny BGP
 class CLASS_MAP_COPP_BGP
  police cir 32000 bc 1500 be 1500 conform-action drop exceed-action drop violate-action drop
  exit
 exit
!

Radius

! Deny RADIUS
 class CLASS_MAP_COPP_RADIUS
  police cir 32000 bc 1500 be 1500 conform-action drop exceed-action drop violate-action drop
  exit
 exit
!

Остальной траффик

! Permit other (include LACP)
 class class-default
  police cir 32000 bc 1500 be 1500 conform-action transmit exceed-action transmit violate-action transmit
  exit
 exit
exit

control-plane

control-plane
 no service-policy input POLICY_MAP_COPP_INPUT_POLICY
 service-policy input POLICY_MAP_COPP_INPUT_POLICY
exit

Port Knock

ip access-list extended KNOCK_TCP_32022
 remark *** KNOCK ***
 permit tcp any host 172.31.100.194 eq 32022 log
 remark *** PERMITED ***
 permit ip any any
exit
event manager environment KNOCK_ACL_SSH    ACCESS_LIST_COPP_SSH
event manager environment KNOCK_ACL_TELNET ACCESS_LIST_COPP_TELNET
    no event manager applet KNOCK_TELNET_SSH
    event manager applet KNOCK_TELNET_SSH
     event syslog pattern "%FMANFP-6-IPACCESSLOGP: SIP0: fman_fp_image:  list KNOCK_TCP_32022 permitted tcp *"
    !
     action 001.0 regexp "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" "$_syslog_msg" ADDR
     action 001.1 regexp "\([0-9]+\)," "$_syslog_msg" PORT
     action 001.2 regexp "[0-9]+" "$PORT" PORT
    !
     action 002.0 syslog msg "Received a knock from $ADDR on port $PORT..."
    !
     action 002.1 syslog msg "Adding $ADDR to the $KNOCK_ACL_SSH ACL"
    !
     action 003.0 cli command "enable"
     action 003.1 cli command "configure terminal"
     action 003.2 cli command "ip access-list extended $KNOCK_ACL_SSH"
     action 003.3 cli command "1 deny tcp host $ADDR any eq 22"
     action 003.4 cli command "end"
     action 003.5 cli command " "
    !
     action 004.0 syslog msg "Added  $ADDR to the $KNOCK_ACL_SSH ACL"
    !
     action 004.1 syslog msg "Adding $ADDR to the $KNOCK_ACL_TELNET ACL"
    !
     action 005.0 cli command "enable"
     action 005.1 cli command "configure terminal"
     action 005.4 cli command "ip access-list extended $KNOCK_ACL_TELNET"
     action 005.5 cli command "1 deny tcp host $ADDR any eq telnet"
     action 005.6 cli command "end"
     !
     action 006.0 syslog msg "Added  $ADDR to the $KNOCK_ACL_TELNET ACL"
     action 006.1 syslog msg "Waiting for 20 sec before deleting rules"
    !
     action 007.0 wait 20
    !
     action 008.0 syslog msg "Wait finished"
    !
     action 008.1 syslog msg "Removing $ADDR from the $KNOCK_ACL_SSH ACL"
    !
     action 009.0 cli command "enable"
     action 009.1 cli command "configure terminal"
     action 009.2 cli command "ip access-list extended $KNOCK_ACL_SSH"
     action 009.3 cli command "no deny tcp host $ADDR any eq 22"
     action 009.4 cli command "end"
    !
     action 010.0 syslog msg "Removed $ADDR to the $KNOCK_ACL_SSH ACL"
    !
     action 010.0 syslog msg "Removing $ADDR to the $KNOCK_ACL_TELNET ACL"
    !
     action 011.0 cli command "enable"
     action 011.1 cli command "configure terminal"
     action 011.2 cli command "ip access-list extended $KNOCK_ACL_TELNET"
     action 011.3 cli command "no deny tcp host $ADDR any eq telnet"
     action 011.4 cli command "end"
    !
     action 012.0 syslog msg "Removed $ADDR from the $KNOCK_ACL_TELNET ACL"
    exit


Копия заметки про CoPP

Это копия с хабра - может быть полезна так как информации довольно мало

Как обрабытывается CEF-exception трафик внутри cppr-политики в Cisco IOS-XE?
Написал cppr-политики для роутеров Cisco на IOS и IOS-XE.
И столкнулся со следующей проблемой: на IOS-XE железе нет control-plane cef-exception режима, весь трафик на коробку обрабатывается внутри единой политики. И в этой политике никак не удается поймать BFD-пакеты..
По счетчикам вижу, что вcе BFD-пакеты оседают на итоговом дискардном правиле. В стандартном IOS BFD по-идее не попадает в cef и обрабатывается внутри control-plane cef-exception; что делать в случае IOS-XE не пойму - странно, что трафик не попадает в нужный класс, но при этом внутри фильтра валится не в class-default, а именно в discard-all-UDP правило. Железо: ASR1002 Версия IOS-XE ROMMON: 153-1r Версия IOS-XE: 03.14.00.S Версия IOS внутри: 15.5(1)S

Правило отбора для BFD (упрощенный конфиг):

ip access-list extended RE_bfd
permit udp object-group ext_hosts range 49152 65535 object-group int_hosts range 3784 3785
! далее класс, куда BFD входит:
class-map match-any RE_routing
  match access-group name RE_bfd
! дискард правила
ip access-list extended RE_dis_tcp
  permit tcp any any fragments
  permit tcp any any
ip access-list extended RE_dis_udp
permit udp any any fragments
permit udp any any
ip access-list extended RE_dis_ip
permit icmp any any fragments
permit ip any any fragments
permit ip any any
! дискард класс
class-map match-any RE_dis_traffic
description RE_disable_traffic
match access-group name RE_dis_tcp
match access-group name RE_dis_udp
match access-group name RE_dis_ip
! и все это в cppr-политике:
policy-map RE_cppr
class RE_routing
class RE_dis_traffic
police rate 1 pps
! включаем
control-plane
service-policy input RE_cppr
!

UPD: С LDP трафиком аналогичная проблема, поэтому склонен считать, что она характерна для всех CEF-exception пакетов внутри коробки.

Итак, симтомы проблемы я устранил. Изначально ACL для отбора было таким:

!
permit udp object-group ext_hosts range 49152 65535 object-group int_hosts range 3784 3785
!

Собственно, возникла идея поиграть с условиями и я убрал ограничение по адресам. ACL превратился в: !

permit udp any range 49152 65535 any range 3784 3785

! И все заработало! Но вопрос все равно открыт - устранился симптом, почему ASR не обрабатывает условие по ip-заголовкам - непонятно. Баг или особенность обработки host-inbound трафика на IOS-XE?

UPD: Весь сыр-бор возник из-за того, что внутри ACL для cef-exception трафика не работают object-groups. Для остального host-inbound трафика они работают. Если вместо object-groups напрямую писать ip-адреса, то все работает как надо.