上一次的工程实例我们解决了CISCO3550交换机的某个端口下面如果只连接了一台主机时的端口安全设置方法,即只有指定的主机才能访问网络,其它的主机(以MAC地址为唯一标识)是无法通过CISCO的这个端口访问网络,这种措施虽然有效,但是却有一定的局限性,具体表现为CISCO3550交换机的很多端口下面是连接有交换机,而且还是普通的二层交换机,这也就相当于一个端口下面有多台主机通过,针对这种情况如何实现只有指定的MAC地址的主机才能通过呢,最初我们还是想通过端口安全的相关命令来实现,但是发现效果不理想,只是实现了限制连接主机数量的操作,如下所示:

  一、限制连接主机的数量

  我们通过一系列的实验终于得到了一个结论,即如果CISCO3550的端口下面连接了一台二层交换机,以前我们使用采用的端口安全措施就不怎么有效了,无法实现只有指定的主机的MAC地址才能通过,最多只能限制端口中通过的MAC地址数量的上限,比如我们最大允许5台主机通过CISCO3550交换机的第4端口,操作步骤如下:

  3550#conf t

  Enter configuration commands one per line. End with CNTL/Z.

  3550(config)#inter fa0/4

  3550(config-if)#switchport port-security

  3550(config-if)#switchport port-security maximum 5

  查看端口4的当前配置如下

  3550#show run inter fa0/4

  Building configuration...

  Current configuration : 146 bytes

  !

  interface FastEthernet0/4

  switchport access vlan 66

  switchport mode access

  switchport port-security

  switchport port-security maximum 5

  end

  这样的设置也是属于端口安全的一种,只不过以上的操作是通过限制通过的主机数量来保护端口的带宽,这在我们的工作实际中倒是也是这样的需要,比如我们开通了一个单位的互联网用户,采用包月制,这样就需要限制这个单位同时上网的主机数量,比如不能超过25台,就可以通过设置这样设置“maximum”的值为“25”来实现。这种措施是有效的,但是距离我们的要求还有一定的距离,我们还是想实现即使是CISCO3550端口下面连接了一台普遍的二层交换机,也可以达到只有指定的MAC地址的主机(若干台主机)才可以访问网络的目的。为了实现这种目标,我们转换了思路,探索通过基于MAC地址的ACL(访问控制列表),结果发现这种方法是行之有效的,如下所示:

  二、基于MAC地址的ACL来实现

  下面的操作,网络结构是相同的,只不过思想更换为通过ACL来实现,我们以前设置的ACL多是基于IP地址,对于基于MAC的ACL设置较少,其实这两类ACL的设置思路是一致的,步骤如下。

  (一)定义一个MAC地址访问控制列表并且命名该列表名为mac0215

  #Switch(config)mac access-list extended mac0215

  (二)定义MAC地址为1232.1251.2126的主机可以访问任意主机

  #Switch(config) permit host 1232.1251.2126 any

  #Switch(config) permit any host 1232.1251.2126

  (三)进入配置具体端口模式

  #Switch(config)interface fa0/4

  (四)在该端口上应用名为mac0215的访问列表

  #Switch(config)mac access-group mac0215 in

  (五)显示配置结果

  3550#show run inter fa0/4

  Building configuration...

  Current configuration : 113 bytes

  !

  interface FastEthernet0/4

  switchport access vlan 66

  switchport mode access

  mac access-group mac0215 in

  end

  注意事项

  在进行实际测试时发现了一个很有趣的现象,仔细对这个现象进行分析,也进一步加深了CISCO交换机工作原理的理解。我们写好了基于MAC的ACL,如何来做测试,有两套方案,一套是将cisco3550交换机第四端口上连接一台主机,将其MAC地址修改为1232.1251.2126,该主机可以正常访问网络(利用带t参数的ping命令来测试),更改为主机的MAC地址为其它值后ping命令显示的结果马上就中断了,说明基于MAC的ACL是有效的。但是我们还通过另外一套方案进行了测试,即保持主机的MAC地址不变,通过修改ACL中permit的MAC的值来测试(如先no掉permit host 1232.1251.2126 any ,再写入一条permit host 1232.1251.2127 any),这时就不是马上不通了,而是会是一个10分钟左右的时延。

  为什么会出现这个现象,因为交换机中MAC表有一个老化时间,由于我们这次是采取的在ACL中修改MAC值来指定,那么ACL中的值与实际交换机检测到端口所连接的主机MAC地址不一致有一个时间差,在这个时间差之内那台主机还是可以访问网络的,过了这个时间,就无法访问网络了。