交换机端口安全Port-Security超级详解
一、Port-Security概述
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609112753573-743621002.jpg)
在部署园区网的时候,对于交换机,我们往往有如下几种特殊的需求:
- 限制交换机每个端口下接入主机的数量(MAC地址数量)
- 限定交换机端口下所连接的主机(根据IP或MAC地址进行过滤)
- 当出现违例时间的时候能够检测到,并可采取惩罚措施
上述需求,可通过交换机的Port-Security功能来实现:
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609112807382-166847287.jpg)
二、理解Port-Security
1.Port-Security安全地址:secure MAC address
在接口上激活Port-Security后,该接口就具有了一定的安全功能,例如能够限制接口(所连接的)的最大MAC数量,从而限制接入的主机用户;或者限定接口所连接的特定MAC,从而实现接入用户的限制。那么要执行过滤或者限制动作,就需要有依据,这个依据就是安全地址 – secure MAC address。
安全地址表项可以通过让使用端口动态学习到的MAC(SecureDynamic),或者是手工在接口下进行配置(SecureConfigured),以及sticy MAC address(SecureSticky) 三种方式进行配置。
当我们将接口允许的MAC地址数量设置为1并且为接口设置一个安全地址,那么这个接口将只为该MAC所属的PC服务,也就是源为该MAC的数据帧能够进入该接口。
2.当以下情况发生时,激活惩罚(violation):
当一个激活了Port-Security的接口上,MAC地址数量已经达到了配置的最大安全地址数量,并且又收到了一个新的数据帧,而这个数据帧的源MAC并不在这些安全地址中,那么启动惩罚措施
当在一个Port-Security接口上配置了某个安全地址,而这个安全地址的MAC又企图在同VLAN的另一个Port-Security接口上接入时,启动惩罚措施
当设置了Port-Security接口的最大允许MAC的数量后,接口关联的安全地址表项可以通过如下方式获取:
- 在接口下使用switchport port-security mac-address 来配置静态安全地址表项
- 使用接口动态学习到的MAC来构成安全地址表项
- 一部分静态配置,一部分动态学习
当接口出现up/down,则所有动态学习的MAC安全地址表项将清空。而静态配置的安全地址表项依然保留。
3.Port-Security与Sticky MAC地址
上面我们说了,通过接口动态学习的MAC地址构成的安全地址表项,在接口出现up/down后,将会丢失这些通过动态学习到的MAC构成的安全地址表项,但是所有的接口都用switchport port-security mac-address手工来配置,工作量又太大。因此这个sticky mac地址,可以让我们将这些动态学习到的MAC变成“粘滞状态”,可以简单的理解为,我先动态的学,学到之后我再将你粘起来,形成一条”静态“ (实际上是SecureSticky)的表项。
在up/down现象出现后仍能保存。而在使用wr后,这些sticky安全地址将被写入start-up config,即使设备重启也不会被丢失。
三、默认的Port-Security配置
- Port-Security 默认关闭
- 默认最大允许的安全MAC地址数量 1
- 惩罚模式 shutdown(进入err-disable状态),同时发送一个SNMP trap
四、Port-Security的部署注意事项
1.Port-Security配置步骤
a) 在接口上激活Port-Security
Port-Security开启后,相关参数都有默认配置,需关注
b) 配置每个接口的安全地址(Secure MAC Address)
可通过交换机动态学习、手工配置、以及stciky等方式创建安全地址
c) 配置Port-Security惩罚机制
默认为shutdown,可选的还有protect、restrict
d) (可选)配置安全地址老化时间
2.关于被惩罚后进入err-disable的恢复:
如果一个psec端口由于被惩罚进入了err-disable,可以使用如下方法来恢复接口的状态:
- 使用全局配置命令:err-disable recovery psecure-violation
- 手工将特定的端口shutdown再noshutdown
3.清除接口上动态学习到的安全地址表项
- 使用clear port-security dynamic命令,将清除所有port-security接口上通过动态学习到的安全地址表项
- 使用clear port-security sticky 命令,将清除所有sticky安全地址表项
- 使用clear port-security configured命令,将清除所有手工配置的安全地址表项
- 使用clear port-security all命令,将清除所有安全地址表项
- 使用show port-security address来查看每个port-security接口下的安全地址表项
4.关于sticky安全地址
Sticky安全地址,是允许我们将Port-Security接口通过动态学习到的MAC地址变成“粘滞”的安全地址,从而不会由于接口的up/down丢失。然而如果我们希望在设备重启之后,这个sticky的安全地址表项仍然存在,那么就需要wr一下。将配置写入start-up config文件。Sticky安全地址也是一个简化我们管理员操作的一个很好的工具,毕竟现在不用再一条条的手工去绑了。
5.port-security支持private vlan
6.port-security支持802.1Q tunnel接口
7.port-security不支持SPAN的目的接口
8.port-security不支持etherchannel的port-channel接口
9.在CISCO IOS 12.2(33)SXH 以及后续的版本,我们可以将port-security及802.1X部署在同一个接口上。而在此之前的软件版本:
- 如果你试图在一个port-security接口上激活8021.X则会报错,并且802.1X功能无法开启
- 如果你试图在一个802.1X接口上激活port-security则也会报错,并且port-security特性无法开启
10.Port-Security支持nonegotiating trunk 接口
Port-Security 支持在如下配置的trunk上激活
switchport
switchport trunk encapsulation ?
switchport mode trukn
switchport nonegotiate
- If you reconfigure a secure access port as a trunk, port security converts all the sticky and static secure addresses on that port that were dynamically learned in the access VLAN to sticky or static secure addresses on the native VLAN of the trunk. Port security removes all secure addresses on the voice VLAN of the access port.
- If you reconfigure a secure trunk as an access port, port security converts all sticky and static addresses learned on the native VLAN to addresses learned on the access VLAN of the access port. Port security removes all addresses learned on VLANs other than the native VLAN.
11.Flex links和Port-Security互不兼容
五、Port-security的配置
1.激活Port-Security(在access接口上)
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113000226-304854846.jpg)
Switch(config)# interface fast0/1
Switch(config-if)# switchport
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 10
Switch(config-if)# switchport port-security
接口的Port-Security特性一旦激活后,默认的最大安全地址个数为1,也就是说,在不进行手工配置安全地址的情况下,这个接口将使用其动态学习到的MAC作为安全地址,并且,这个接口相当于被该MAC(所属的设备)独占。而且默认的violation是shutdown
SW1#show port-security interface f0/1
Port Security : Enabled
Port Status : Secure-up !!接口目前的状态是up的
Violation Mode : Shutdown !!违例后的惩罚措施,默认为shutdown
Aging Time : 0 mins
Aging Type : Absolute
SecureStatic Address Aging : Disabled
Maximum MAC Addresses : 1 !!最大安全地址个数,默认为1
Total MAC Addresses : 0
Configured MAC Addresses : 0 !!手工静态配置的安全MAC地址,这里没配
Sticky MAC Addresses : 0 !!sticky的安全地址,这里没有
Last Source Address:Vlan : 00b0.1111.2222:10 !!最近的一个安全地址+vlan
Security Violation Count : 0 !!该接口历史上出现过的违例次数
这个时候,如果另一台PC接入到这个端口上,那么该port-security接口将会收到一个新的、非安全地址表项中的MAC地址的数据帧,于是触发的违例动作,给接口将被err-disable掉。同时产生一个snmp trap消息,另外,接口下,Security Violation Count将会加1
2.激活Port-Security(在trunk接口上)
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113019844-437506722.jpg)
3. Port-Security violation惩罚措施
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113032163-1185646395.jpg)
默认的violation是shutdown。如果是protect,那么惩罚就会温柔些,对于非法的数据帧(例如数据帧的源MAC不在安全地址表项中的、且安全地址已经达到最大数),这些非法数据将仅仅被丢弃,合法数据照常转发,同时不会触发一个syslog消息,另外接口下的“Security Violation Count”也不会加1。而如果是restrict,那么非法数据被丢弃,同时触发一个syslog消息,再者,Security Violation Count加1,合法的数据照常转发。
4. 配置Port Security Rate Limiter
(注意,在6509交换机,truncated switching模式下不支持该功能)
在交换机接口上开启Port-Security是会耗费资源的,Port-Security会检测每一个进入接口的数据帧,以判断流量是否合法,或者是否存在违例行为。当一个安全接口设置的violation为shutdown的时候,该接口在违例后触发惩罚机制,进入err-diasble状态,这样可以有效的方式有效的防止交换机由于处理违例事件导致交换机的CPU利用率过高。然而protect和restict的惩罚措施,则不会将端口关闭,端口依然可用,那么这就可能导致在违例事件发生的情况下交换机的CPU利用率飙高(例如大量的非法数据涌入)。因此当使用protect和restrict这两种违例惩罚措施事,可以通过Port-Secuirty rate limiter来防止CPU飙高。
Switch(config)# mls rate-limite layer2 port-security rate_in_pps [burst_size]
关于rate_in_pps参数:
- 范围是10- 1000000
- 没有默认值
- 值设置的越低,对CPU的保护程度就越高,这个值对惩罚措施发生前、后都生效,当然这个值也不能设置的过低,至少要保障合法流量被处理吧。一般低于1000就差不多。
关于burst-size参数:
- 范围是1-255
- 默认是10,这个默认值一般就够用了。
5. 配置Port-Security 最大允许的安全地址数量
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113045660-268935963.jpg)
最大安全地址数量,不同的软件平台允许的上限值有所不同,但是默认都是1。
在trunk口上,前面说了,也是可以激活port-security的,而在trunk口上配置最大安全地址数量,可以基于接口配置(对所有VLAN生效),也可以基于VLAN进行配置。如下:
switchport port-security maximum 1
switchport port-security maximum 1 vlan 10,20,30 !!可以关联多个VLAN
6. 在port-security接口上手工配置安全地址
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113557499-896898807.jpg)
上述配置中,最大安全地址数设置为3,然后使用手工配置了一个安全地址,那么剩下2个,交换机可以通过动态学习的方式来构建安全地址。
在trunk接口上手工配置安全地址,可关联vlan关键字。如果在trunk接口上手工配置安全地址,没有关联vlan关键字,那么该安全地址将被关联到trunk的native vlan上
7. 在port-security接口上使用sticky MAC地址
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113246977-690541927.jpg)
我们知道,构成安全地址表项的方式有好几种,其中一种是使用switchport port-security mac 来手工配置,但是这种方式耗时耗力,更需要去PC上抄MAC,工作成本比较高。而另一种构成安全地址的方式是让交换机使用动态学习到的MAC,然而这些安全地址在接口一旦up/down后,将丢失,更别说重启设备了。因此可以使用sticky mac的方式,这种方式激活后,交换机将动态学习到的MAC“粘起来”,具体的动作很简单,就是在动态学习到MAC(例如一个00b0.1111.2222)后,如果我激活了sticiky MAC address,则在接口下自动产生一条命令:
interface FastEthernet0/1
switchport access vlan 10
switchport mode access
switchport port-security
switchport port-security mac-address sticky
switchport port-security mac-address sticky 00b0.1111.2222 !!自动产生
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113307202-252191641.jpg)
这样形成的安全地址表项(是SecureSticky的),即使在接口翻动,也不会丢失。在者如果wr保存配置,命令写入config.text,那么设备即使重启,安全地址也不会丢失。
当在接口上激活了port-security mac-address sticky,那么:
- 该接口上所有通过动态学习到的MAC,将被转成sticky mac address从而形成安全地址
- 接口上的静态手工配置的安全地址不会被转成sticky mac address
- 通过voice vlan动态学习到的安全地址不会被转成sticky mac address
- 命令配置后,新学习到的MAC地址,也是sticky的
当此时又敲入no port-secuirty mac-address sticiky ,则所有的sticky安全地址条目都变成动态的安全地址条目(SecureDynamic)
8. 配置安全地址老化时间
配置的命令比较简单:
Switch(config-if)# switchport port-security aging type {absolute | inactivity}
配置老化时间的类型,如果选择absolute,也就是绝对时间,需要搭配aging time命令设定老化时间的具体值,命令一旦敲下去后,所有的通过动态学习的MAC构建的安全地址表项将开始以aging time倒计时。如果是inactivity关键字,则只在该动态安全地址表项不活跃的时候(譬如主机离线了或者挂掉了)才开始倒计时。
Switch(config-if)# switchport port-security aging time ?
设定老化时间
Switch(config-if)# switchport port-security aging static
使用前面两条命令,老化时间是不会影响那些使用静态手工配置的安全地址表项的,当然sticky表项也不会受影响,这些表项都是永不老化的,但是如果搭配上上面这条命令,则手工配置的安全地址表项也受限于老化时间了。
不过对于sticky表项,则始终不会激活aging time,它是不会老化的。
- 示例1:
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113322269-289112385.jpg)
将安全地址老化时间设置为50min。针对动态学习到的MAC构成的安全地址有效
50min是一个绝对时间,配置完成后开始倒计时,无论该MAC是否依然活跃,都始终进行倒计时
- 示例2:
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113345314-777736776.jpg)
针对动态学习到的MAC构成的安全地址有效,如果该MAC在50min内一直处于失效状态(例如主机离线了),那么该安全地址在aging time超时后被清除
- 示例3:
![](https://img2020.cnblogs.com/blog/1685290/202106/1685290-20210609113358608-505289111.jpg)
注意,上述两种配置方式,对手工配置switchport port-security mac-address 00b0.9999.9999的安全地址无效。也就是采用上述方法配置的静态安全地址表项永不超时。
如果增加switchport port-security aging static命令,则手工静态配置的安全地址也的aging time也开始计时
注意,对于sticky mac address,安全地址的老化时间无效