我们经常听说“端口安全”功能是如何强大,应用如何灵活,但我们很少人系统地对“端口安全”功能有一个比较系统的了解。Cisco IOS交换机中的端口安全(Port security)功能可以使你限制在端口上使用的MAC地址(称之为“安全MAC地址”),或者MAC地址范围,或者最大安全地址数,以实现阻止未授权MAC地址的用户访问,当然它的应用方式很灵活。本篇仅介绍其基本简介,详细的介绍参见《Cisco/H3C交换机高级醘与管理技术手册》一书。

    【说明】以下内容摘自笔者编著的,新市的《Cisco/H3C交换机高级配置与管理技术手册》一书。其姊妹篇《Cisco/H3C交换机配置与管理完全手册》(第二版)(目前当当网卓越网上最低为震撼的63折)实际时间仅用了三个多月就已实现重印,感谢各位的大力支持!!


15.3.1 端口安全功能简介
     Cisco IOS 交换机的端口安全功能允许你通过配置静态安全 MAC 地址实现仅允许固定设备连接,也允许你在一个端口上配置一个最大的安全 MAC 地址数,仅允许在此数之前识别到的设备连接在该端口上。当超过了所设置的最大安全端口数,将触发一个安全违例事件,在端口上配置的一个基于违例行为模式的违例行为将被执行。如果你在某个端口上配置的最大安全 MAC 地址数为 1 ,则设备上的该安全端口仅允许与固定设备连接。如果一个安全 MAC 地址在一个端口上进行了安全绑定,则这个 MAC 地址不能进入该端口加入的 VLAN 以外的任何其他端口,否则包将在硬件层被悄悄地丢弃。
1.    端口安全功能支持的安全MAC地址类型
Cisco IOS 交换机端口安全功能支持以下几种安全 MAC 地址类型:
l   动态或者学习类型:动态安全 MAC 地址是在接收到连接在安全端口上主机发来的包时学习到的。在用户的 MAC 地址不固定时(如网络用户使用的经常移动的便携式电脑,如笔记本电脑),你可以使用此种类型。
l   静态或配置类型:静态安全 MAC 地址是用户通过 CLI 或者 SNMP 配置的 MAC 地址。在你的 MAC 地址保持固定时(如用户使用的是 PC 机),可以使用这种类型。
l   粘性( Sticky )类型:粘性安全 MAC 地址也是像动态安全 MAC 地址一样,是通过学习得到的,但是它是交换机重启后仍然有效,又有点像静态安全 MAC 地址那样。在存在大量固定 MAC 地址,而且你又不想手动配置这些安全 MAC 地址时,就可以使用这种类型。
    如果一个端口已达到了它最大的安全 MAC 地址数,而你又想配置一个静态安全 MAC 地址,此时会被拒绝的,并显示一个错误提示。如果一个端口已达到了它最大的安全 MAC 地址数,而又添加了一个新的动态安全 MAC 地址,则会触发一个违例行为。
    你可以使用 clear port-security 命令清除动态安全 MAC 地址,你可以使用 no  switchport port-security mac-address 命令一次性清除粘性和静态安全 MAC 地址。
2.    安全MAC地址的最大数
    一个安全端口默认有一个安全 MAC 地址。你可以改变这个默认值在 1~3000 之间。当你在一个端口上设置最大安全 MAC 数后,你可以以下任一方式在地址表中包括这些安全 MAC 地址:
l   你可以使用 switchport port-security mac-address  mac_address 接口配置模式命令配置安全 MAC 地址。
l   你可以通过 port-security mac-address  VLAN 范围配置命令在中继端口上一个范围 VLAN 中配置所有安全 MAC 地址。
l   你可以允许端口用所连接设备的 MAC 地址动态配置安全 MAC 地址。
l   你可以静态配置一些安全 MAC 地址,而允许其余的安全 MAC 地址动态配置(如果端口链路关闭,则该端口上所有动态安全 MAC 地址将不再是安全的)。
l   你可以 MAC 地址为粘性的( sticky )。这些安全 MAC 地址可以动态学习,也可以手动配置,然后保存在 MAC 地址表中,并添加到运行配置文件中。然后这些地址会保存在交换机的启动配置文件中,在交换机重启后,接口不用再重新学习。虽然你可以手动配置粘性安全 MAC 地址,但这种做法是不建议的。
    【经验之谈】在一个中继端口上,最大的安全 MAC 地址数可以基于端口和基于端口 VLAN 来配置。端口上配置的最大安全 MAC 地址数可以大于或等于(不能小于)端口 VLAN 上配置的最大安全 MAC 地址数。如果端口上配置的最大安全 MAC 地址数小于端口 VLAN 上配置的最大安全 MAC 地址数(例如 VLAN 10 上设置的最大安全 MAC 地址为 3 ,而端口的最大安全 MAC 地址数采用默认的 1 ),则在端口 VLAN 上的安全 MAC 地址数超过端口上设置的最大安全 MAC 地址数时,端口就将被关闭。
3.安全MAC地址老化
    在接收超过 3000 MAC 地址时,你可能想要老化安全 MAC 地址,以便对一些长时间没有连接的安全 MAC 地址从 MAC 地址表中除去。但是粘性( sticky )安全 MAC 地址不支持老化过程。
    默认情况下,端口安全不会对安全地址进行老化的,学习到后,这个 MAC 地址将一直在端口上保留,直到交换机重启或才链路断开(当然这是在没有启用粘性 MAC 地址功能时)。端口安全允许你基于绝对( absolute )或者静止( inactivity )模式配置 MAC 地址老化和老化时间。绝对模式的老化周期是 n~n+1 分钟之间;静止模式的老化周期是在 n+1~n+2 分钟之间(时间增量为 1 分钟)。
    使用安全 MAC 地址老化功能可以还没达到端口上配置的最大安全 MAC 地址数之前,在安全端口上删除和添加 PC ,无需手动删除现有的安全 MAC 地址。
    除非明确地使用 switchport port-security aging static 命令静态配置 MAC 地址老化时间,静态安全 MAC 地址是不会进行老化进程的,即使在在该端口上配置了老化进程。
4.端口上的粘性MAC地址
    通过启用粘性端口安全功能,你可以配置一个接口去转换动态 MAC 地址为粘性安全 MAC 地址,并添加他们到交换机的运行配置文件中。在你不需要用户移动到其他端口时,你可以使用这种功能,这样你就无需要在每个端口上手动配置大量的安全 MAC 地址。
    要启用粘性端口安全功能,可键入 switchport  port-security mac-address sticky 接口配置模式 命令。此时,接口将转换所有动态安全 MAC 地址为粘性安全 MAC 地址,包括在启用粘性安全 MAC 地址功能前动态学习到的所有 MAC 地址。
    粘性安全 MAC 地址不会自动成为交换机启动配置文件的一部分,如果你保存了运行配置文件,则在交换机重启后,接口也不用再重新学习 MAC 地址了,但是如果你不保存运行配置文件,则以前自动转换的粘性安全 MAC 地址表将丢失。
    如果禁止粘性端口安全功能,则粘性安全 MAC 地址将自动转换为动态安全 MAC 地址,并自动从交换机的运行配置文件中删除。在配置了最大安全 MAC 地址数后,这些粘性安全 MAC 地址将以表的形式存储。要使某设备成为某端口唯一的连接者,则可以在该端口上配置最大的安全 MAC 地址数为 1 。如果添加到某端口的安全 MAC 地址数超过配置的最大安全 MAC 地址数将发生违例事件。
5. 违例行为模式
你可以配置发生违例事件后所采取的行为模式:
l   保护( protect ):当安全 MAC 地址数超过端口上配置的最大安全 MAC 地址数时,未知源 MAC 地址的包将被丢弃,直到 MAC 地址表中的安全 MAC 地址数降到所配置的最大安全 MAC 地址数以内,或者增加最大安全 MAC 地址数。而且这种行为没有安全违例行为发生通知。建议不要在中继端口上配置保护行为,因为在中继端口上某个 VLAN 达到该 VLAN 中所配置的最大安全 MAC 地址数时端口将被禁止,即使端口上的安全 MAC 地址数并未达到端口上配置的最大安全 MAC 地址数。
l   限制( Restrict ):与前面的保护模式差不多,也是在安全 MAC 地址数达到端口上配置的最大安全 MAC 地址数时,未知源 MAC 地址的包将被丢弃, 直到 MAC 地址表中的安全 MAC 地址数降到所配置的最大安全 MAC 地址数以内,或者增加最大安全 MAC 地址数。但这种行为模式会有一个 SNMP 捕获消息发送,并记录系统日志,违例计数器增加 1 SNMP 捕获通知发送的频率可以通过 snmp-server enable traps port-security trap-rate 命令来控制,默认值为 0 ,表示在发生任何安全违例事件时发送 SNMP 捕获通知。
l   关闭( Shutdown ):发生安全违例事件时,端口立即呈现错误( error-disabled )状态,关闭端口(端口指示灯熄灭)。同时也会发送一个 SNMP 捕获消息 并记录系统日志,违例计数器增加 1 在想禁止非 MAC 地址,需要安全安全环境下,你可以使用这种模式。
l   关闭 VLAN Shutdown VLAN ):适用于 VLAN 的安全违例模式。在这种模式下,在发生安全违者罚款例事件时,该端口对应的 VLAN 都将呈错误禁止状态,关闭对应 VLAN ,而不关闭对应的端口。
     表 15-1 列出了各种违例模式和对应采取的行为。
15-1     端口安全下的各种违例模式和对应采取的行为
违例模式
违例通信转发
发送 SNMP trap 消息
发送系统日志消息
显示错误消息
违例计数器递增
关闭端口
保护( protect
No
No
No
No
No
No
限制( restrict
No
Yes
Yes
No
Yes
No
关闭( shutdown
No
No
No
No
Yes
Yes
关闭 VLAN shutdown vlan
No
No
Yes
No
Yes
No
    当一个安全端口处于错误禁止( error-disabled )状态,你可以通过 errdisable recovery cause psecure-violation 全局配置模式命令进行恢复,或者你可以通过 shutdown no shut down 接口配置模式命令重启。如果端口是处于每 VLAN 错误禁止( per-VLAN errdisable )状态,则你可以使用 clear errdisable interface  name vlan range 命令在端口上重启这个 VLAN 。你也可以使用 errdisable recovery interval  interval 命令自定义从指定的错误禁止状态恢复的时间,默认为 300 秒。
    【经验之谈】如果你可以预见有非法安全 MAC 地址包将在某端口上发送,你可能想要在安全端口上对非法安全 MAC 地址包进行传输速率限制。端口安全认为 MAC 地址为 0 的包为组播或广播源 MAC 地址,认为是非法包。你可以选择限制这些包的传输速率,在超过速率时将在端口上捕获一个违例事件。也就为像组播或广播包传输留有一定的空间。