Nexus 上的黑名单 CLI 命令

网络工程 交换 命令行 cisco-nexus-7k 操作系统 cisco-eem
2021-07-26 00:44:20

有没有办法让 Cisco Nexus 7k 拒绝 CLI 命令?

每个人都知道影响,当您想将 VLAN 添加到中继时,以及如果您忘记关键字 a add

如果您使用 VPC 端口通道 dot1q 中继上的 VPC N7k 对执行此操作,只要两个 VPC 中继上都不允许使用 VLAN,则 VLAN 将挂起。

如果忘记输入add有没有办法让 cli 拒绝命令

int po[X]

switchport trunk allowed vlan add [Y]

编辑:在 ios 中,这可以通过类似的东西来实现

事件 cli 模式 [regex] 跳过是

3个回答

我认为,可以通过以下方式完成:

config t
event manager applet protectmefromdoingstupid
description "goes here"
event cli match "switchport trunk allowed vlan [0-9]+.*"
action 1.0 put "There was no 'add' in that statement! If you know what you are doing, run 'terminal event-manager bypass' and 'no terminal event-manager bypass', when you are done."

来自:https : //www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus7000/sw/system-management/guide/b_Cisco_Nexus_7000_Series_NX-OS_System_Management_Configuration_Guide/b_Cisco_Nexus_7000_Series_NX-OS_System_Management_Management_Configuration_Guide/b_Cisco_Nexus_7000_Series_NX-OS_System_Management_nexus7000/sw/system- management/guide/b_Cisco_Nexus_7000_Series_NX-OS_System_Management_Configuration_Guide

以下来自 cisco 的说明在这里很重要:)

如果要允许触发事件处理任何默认操作,则必须配置 EEM 策略以允许默认操作。例如,如果在 match 语句中匹配 CLI 命令,则必须将 event-default action 语句添加到 EEM 策略中,否则 EEM 将不允许执行 CLI 命令。您可以使用 terminal event-manager bypass 命令允许所有具有 CLI 匹配的 EEM 策略执行 CLI 命令。

我会测试这个并报告回来。

编辑:改进了正则表达式(.* 而不是 $),感谢@Ron Maupin 的提示。

可以在此处找到有关 nx7k 上的正则表达式解释的内容:

https://www.cisco.com/c/en/us/td/docs/switches/datacenter/sw/4_0/nx-os/fundamentals/configuration/guide2/fun_nx-os_book/fun_3about_cli.html#wp1237003

测试后编辑:

它不像我建议的那样工作,有一些奇怪的行为,而且 cisco 文档中的许多命令似乎都不存在(在带有 nxos 6* 的 N7K 上(<- 我知道它是旧的),也不在带有 nxos 的 n9k 上7*)

我测试了一种解决方法,它的工作原理与我想要的一样:

conf t
event manager applet protect1
event cli match "conf t ; int * ; switchport trunk allowed vlan 1*"
event manager applet protect2
event cli match "conf t ; int * ; switchport trunk allowed vlan 2*"
event manager applet protect3
event cli match "conf t ; int * ; switchport trunk allowed vlan 3*"
event manager applet protect4
event cli match "conf t ; int * ; switchport trunk allowed vlan 4*"
event manager applet protect5
event cli match "conf t ; int * ; switchport trunk allowed vlan 5*"
event manager applet protect6
event cli match "conf t ; int * ; switchport trunk allowed vlan 6*"
event manager applet protect7
event cli match "conf t ; int * ; switchport trunk allowed vlan 7*"
event manager applet protect8
event cli match "conf t ; int * ; switchport trunk allowed vlan 8*"
event manager applet protect9
event cli match "conf t ; int * ; switchport trunk allowed vlan 9*"
end
terminal no event manager bypass

一些解释:

根据文档,它应该将其解释为 cli regex。但它没有。可能是因为你需要在事件定义中给出绝对路径。分号周围的空格也是必需的。

我对此不太满意(很高兴它有效,但它有点丑) - 非常感谢经过测试的改进!

如果您坚持在 Nexus 上使用 EEM,您可以尝试使用以下两个小程序。我已经对它们进行了测试,它们按预期工作。

event manager applet TrunkAdd
  event cli match "conf t ; int * ; switchport trunk allowed vlan add *"
  action 1.0 event-default

event manager applet TrunkBlock
  event cli match "conf t ; int * ; switchport trunk allowed vlan *"
  • 第一个小程序是允许命令,switchport trunk allowed vlan add ...因为我们有event-default动作。
  • 第二个小程序是拒绝命令switchport trunk allowed vlan而不add

检测结果:

#show run int Ethernet4/1    

interface Ethernet4/1
  switchport
  switchport mode trunk
  switchport trunk allowed vlan 10,30,40,60
  no shutdown

#conf t
(config)# interface Ethernet4/1
(config-if)#switchport trunk allowed vlan 20
% Command blocked by event manager policy
(config-if)#switchport trunk allowed vlan add 20
(config-if)#end

#show run int Ethernet4/1

interface Ethernet4/1
  switchport
  switchport mode trunk
  switchport trunk allowed vlan 10,20,30,40,60
  no shutdown

请注意,对于 Nexus 上的 EEM,在正则命令表达式中,只能使用星号 (*) 符号来替换参数(此处Cisco 文档)。我们不能像通常用于正则表达式那样使用其他字符(例如 ^、$、.、[ ]、*、...)。这就是为什么我认为在这种情况下我们不能使用一个小程序。

我希望它有帮助。

我在 Nexus 7010 上本地使用 RBAC 也有同样的想法:

role name Soporte-2
  rule 55 permit command configure terminal ; interface * ; switchport trunk allowed vlan add *
  rule 50 deny command configure terminal ; interface * ; switchport trunk allowed vlan *
  rule 5 permit read-write 

希望这有帮助。