基于MAC实现动态VLAN

2015-12-03 02:18
网络安全和信息化 2015年5期
关键词:思科网卡交换机

随着网络的不断扩大,交换机技术的不断进步,网络管理员在布局时更愿意选择可网管交换机,然后在可网管交换机上应用VLAN。所谓的VLAN(virtu-al Local Area Network),就是可以不考虑用户的物理位置,而根据功能,应用等因素将用户从逻辑上划分为一个个功能相对的工作组,同一个VLAN中的成员都共享广播,形成一个广播域,而不同VLAN之间广播信息是相互隔离的,这样,将整个网络分隔成多个不同的广播域(VLAN),而在VLAN技术的实现中,动态VLAN又明显地受用户喜爱。

我院局域网是一个拥有1000个以上的客户端的大型网络,在对我院网络进行动态VLAN改造以前,接入交换机各端口是用最传统的方式对不同部门的计算机配置以不同的静态VLAN,这样做的不足之处有如下几点:

1、在实现对接入交换机各端口VLAN的正确配置之前,网络管理员必须先做出一个冗长的、复杂的各部门所属办公区域的网络信息点和跳接的交换机端口之间的对应表,才能根据这个表格来对交换机端口的VLAN进行配置,工作量很大之外,还有一些暂时没有分配其所属部门的区域,这些区域里的网络信息点所对应的交换机端口就无法配置。

2、不方便实现对外来的计算机接入到院网络的接入准入控制。试想,随意一台本不属于我院网络里的外来计算机,只需要用一根网线接在墙上的某个信息点,就可以实现进入到院的办公用网络里,从网络安全的角度看,明显是一个很大的安全隐患,必须对此加以管控。

3、在员工的办公地点变化时,尤其是部门整体改变办公地点时,随之而来的是大量员工的计算机接入的网络信息点的变化,由于网络信息点对应的交换机上的端口的VLAN是静态的,这往往会导致其接入到了属于其它VLAN的端口上。这时候就需要网络管理员在交换机上去手工的修改端口VLAN,才能使这些计算机重新接入到正确的VLAN里来。由于必须重新统计哪些端口改为哪个VLAN,这个过程不仅耗时,更糟糕的是,还可能由于统计上的错误造成端口VLAN配置里的一些错误,这必将对正常的工作产生影响。

为了解决以上问题,我院对局域网内的所有接入交换机的接入端口VLAN采取了基于MAC认证来动态分配VLAN的改造。具体做法是:

1、首先,通过资产部门对我院在用的计算机进行一次完整统计,建立一个数据表格,明确计算机使用人,计算机固定资产登记卡号,计算机所属部门和计算机网卡的MAC地址的对应关系;

2、增加一个RADIUS认证服务器,并在RADIUS服务器里把各个接入交换机配置为该RADIUS服务器的RADIUS客户端,在我院的案例里使用的是思科的ACS系统,然后把资产部门统计上来的各个MAC地址录入为ACS的用户;

3、修改接入交换机的配置,把每台接入交换机设置为RADIUS客户端,并把RADIUS服务器指向ACS,同时把各个接入端口配置为基于MAC地址认证的动态VLAN端口,网络结构如图1。

这样做有以下优点:

1、员工原有的使用习惯没有改变,不需要在每次开机的时候手工去输入用户名和密码来验证用户身份;

2、未登记网卡MAC地址的计算机只能处于guest-vlan里,而对于guest-vlan可以单独配置一系列的网络安全策略,大大增加了院生产网络的安全性;

3、不用再关注各个部门所在的区域的网络信息点情况,所有接入交换机可以做一次性统一配置;

4、各个部门的员工的办公地点发生改变以致计算机的网络接入点随之改变时,无需修改交换机配置,每台计算机不论接入在院局域网的哪个信息点上都不会改变计算机所属VLAN;

图1 有线网络示意图

5、网络管理员可以方便的把某台计算机从一个VLAN改到另一个VLAN;

6、认证只和网卡的MAC地址有关,和计算机的种类及操作系统无关,认证过程不需人工干预,对于如网络打印机、网络扫描仪等无法手工输入用户名和密码去做认证的设备一样可以实现动态VLAN的管理。

基于MAC地址认证的动态VLAN工作流程是这样的:

1、在接入交换机的端口通过认证之前,这个端口属于我们定义的guest-vlan,当这个guest-vlan端口收到来自某个MAC地址的数据包时(通常是一个DHCP discover广播包),其所在的交换机向指定的RADIUS服务器发送AAA认证请求包,认证用的是UDP端口1812,报文里包括AAA的密钥,和等待认证的用户名和密码,其中,用户名和密码均为小写的没有分隔符的该MAC地址,如112233aabbcc。

2、RADIUS服务器将该用户信息与users 数据库信息进行对比分析,如果认证成功,则将用户的权限信息以认证响应包(access-accept)发送给RADIUS客户端(这里指的是接入交换机);如果认证失败,则返回access-reject 响应包。

3、接入交换机如果收到的响应包是access-accept,则把要求认证的端口VLAN从guest-vlan转变成响应包里所包含的VLAN ID信息的VLAN;如果收到的响应包是access-reject,该 端 口 VLAN保持guest-vlan不变,且在设定的时间段内再次收到来自该MAC地址的数据包时不再发起认证。

4、一旦端口状态变为断开连接,该端口上的认证立即失效,并回到guest-vlan状态

由于基于MAC地址的AAA认证只用到了AAA的一小部分功能,AAA工作流程的具体细节这里不作过多论述。

相关设备的具体配置

配置RADIUS服务器

我院使用的RADIUS服务器是思科的CSACS-1121,ACS中安装的软件版本是5.2.0.26,由于不同的RADIUS服务器的具体配置方法不尽相同,但配置的关键步骤是一样的,这里就以此环境用截图的方式简要说明ACS里所做的配置。

定义ACS的网络配置,配置的IP地址既是后面接入交换机发送认证请求的目的IP,也是ACS本身的管理IP。如图2所示。

把每一台接入交换机定义为 AAA Clients,在我院的案例里,每个楼层的接入交换机为一个堆叠,逻辑上每个堆叠是一个交换机,如图3所示。

同时为每个AAA Clients配置AAA认证使用的协议端口和共享密钥,如图4所示。

把每一个VLAN分别定义为一个Identity Group,在 这 里,每 个Identity Group的名称用的是VLAN名,而描述用的是VLAN所对应的实际部门名称,如图5所示。

建立认证策略,为每一个Identity Group定义认证通过后赋予的VLAN ID,需要注意的是,思科的ACS里默认的Tag是用T:1,但是如果接入交换机不是思科的,而是其它别的品牌时,会要求Tag用T:0,好在当我们就设置为T:0时思科的交换机也可正常认证,如图6、图7所示。

图2 定义ACS的网络配置

图3 定义交换机

图4 配置共享密钥

图5 描述VLAN

图6 建立认证策略

如图8所示,调用认证策略。为每个MAC地址定义所属VLAN,在这里,每个MAC地址就是一个user,user的用户名和密码均为小写的、没有分隔符的MAC地址,定义MAC地址所属VLAN在这里就是配置user所属的Identity Group,而在每个 user的描述里记录了该MAC地址在资产部门登记的计算机使用人和固定资产卡号,这样做的好处是,以后可以方便的通过检索user的描述来通过使用人姓名或固定资产卡号查询到对应的MAC地址及其所属VLAN,如图 9、10所示。

配置汇聚交换机

在汇聚交换机上把所有连接接入交换机的端口配置为trunk,并允许所有在ACS中定义了的各个VLAN通过。

配置接入交换机

把各个接入交换机到汇聚交换机的上联口配置为trunk,并允许所有在ACS中定义了的各个VLAN通过。

我院的接入交换机使用的是思科的2960系列交换机,在这里就以思科2960为例来介绍基于MAC地址的动态VLAN的配置方法。

首先进行全局配置:

aaa new-model(启 用AAA,使用全局配置命令)

aaa authentication login default local(在用telnet登录本地的接入交换机时,不去找RADIUS做认证,而是做交换机本地的用户名认证。这是为了防止在无法和RADIUS服务器通讯时造成不能登录到交换机里做配置)

aaa authentication dot1x default group radius local(aaa 通过802.1x使用RADIUS认证服务,并使用交换机本地的用户名去认证,在本案例里,交换机本地的用户名和密码同为端口上学习到的MAC地址)

a a a a u t h o r i z a t i o n network default group radius local(aaa通 过 RADIUS授权给网络,使用的是交换机本地的数据库,换言之,RADIUS返回的VLAN ID一定要是交换机里已经定义了的VLAN ID)

dot1x system-authcontrol(全局启用802.1x认证)

图7 建立认证策略

图8 调用认证策略

图9 查询MAC地址和VLAN

图10 查询MAC地址和VLAN

图11 认证过程

radius-server host a.b.c.d auth-port 1812 acct-port 1813 key cisco(指定RADIUS服务器的IP地址为a.b.c.d、认证端口为1812、授权端口为1813、安全密钥为cisco)

然后是为需要配置为动态VLAN的端口开启802.1x认证:

switchport mode access(交换机端口模式为access)

authentication event noresponse action authorize vlan 250(如果认证不能通过则该端口放入VLAN 250,这里的VLAN 250为guestvlan的VLAN ID)

authentication portcontrol auto(设置端口的802.1x状态为auto,这里的auto状态指的是端口可以通过使用802.1x来完成在认证状态和未认证状态之间的切换)

authentication periodic(开启端口的802.1x重认证)

mab eap(配置端口的802.1x认证由交换机使用MAC地址作为客户端身份标记,把MAC地址作为用户名和密码发送给RADIUS服务器)

dot1x pae authenticator(开启端口上的dot1x认证功能)

dot1x timeout tx-period 4(设置交换机在启动802.1x功能的端口上发送认证请求的间隔为4秒,如不设置,默认值为30秒)

dot1x timeout supptimeout 4(设定认证超时定时器的时长为4秒,如不设置,默认值为30秒)

通过以上配置我们就可以在ACS和接入交换机里看到如下认证成功的日志了。

在接入交换机里看到如下认证过程,显示MAC地址74d4.3586.eaa9已通过认证:

在ACS里看到如下认证过程,其中绿色的记录表示认证通过,深色的记录表示认证未通过:,如图11。

同时,要指出的是,基于MAC地址实现动态VLAN也有一些不可回避的缺点,具体如下:

1、必须有资产部门的配合

新购的计算机必须要登记网卡的MAC地址才能通过认证,报废的计算机也需要资产部门通知IT部门在RADIUS服务器里手工删除该计算机的MAC地址,如某台计算机从一个部门转入到另一个部门时,则需要网络管理员在RADIUS服务器里修改该计算机的相关信息。

2、接入交换机学习到的MAC地址过多

由于每台接入交换机到汇聚交换机的上联端口上都要允许所有部门所属VLAN的数据通过,每个VLAN的广播数据包都将会到达所有的接入交换机,这在客观上造成了每台接入交换机都可能通过上联端口学习到其他所有部门的所有计算机的MAC地址,这导致各个接入交换机的MAC地址表变得很庞大,而一般来说,接入交换机可支持的MAC地址数是有限的4096。如果网络中的计算机数量突破了这个数量,就必须考虑对接入交换机做分组处理,每组交换机之间采用三层路由的方式通讯而不能用二层透传的方式,各个部门所属VLAN的ID在不同交换机组中为不同的VLAN ID,并为每组交换机分别部署一台RADIUS服务器。这是另外的话题了,这里不做详细讨论了。

3、有时终端机不能通过DHCP获得正确的IP地址

这是由于有时同时发起的认证请求过多,以至于认证过程延迟造成的,这种情况往往出现在早上刚到达上班时间的时候,由于这个时间段开机的计算机比较多,因而造成各个接入交换机发起的认证请求过多,以至接入交换机发起认证请求延迟或RADIUS服务器应答响应延迟。遇到这种情况的时候,通常的解决办法是把网卡禁用然后再启用,或者把网卡上的网线拔下再插上,通过这样的动作可以让交换机的这个端口重新发起认证。

4、RADIUS认证服务器是个单一故障点

如果RADIUS服务器出现故障不能正常工作的话,势必造成所有的动态VLAN端口的计算机都处于guest-vlan,这将是灾难性的后果,因此必须做好RADIUS服务器的数据备份工作和备机服务准备工作。

5、MAC地址是可以伪造的

尽管每块网卡的MAC地址是唯一的,但在实际应用中,交换机端口上学习到的MAC地址却未必就是真实的网卡MAC地址,这是由于我们可以在操作系统里手工的修改网卡工作时使用的MAC地址,而只有在不手工修改MAC地址的情况下,操作系统才会采用网卡自身真实的MAC地址来工作。在以MAC地址作为网络准入认证的环境里,窃取到了一个可以通过验证的MAC地址就等于窃取到了网络准入的权力,这确实是这个解决方案里一个不可回避的缺陷。不过,如果网络中同时有两个相同的MAC地址在工作的话,这两个相同MAC地址的计算机的网络通讯都会出现不同程度的丢包现象,被盗用MAC地址的用户会很快发现问题并反应给IT部门,而网络管理员可以通过查看交换机端口的MAC地址列表很快找到窃取别人MAC地址的计算机的所在位置。

6、增加了接入交换机的负担,影响到其它一些功能

在我院的案例里,如果对所有VLAN都开启DHCP snooping的话,会直接导致各个接入交换机端口的认证失效而需要重新认证,而认证通过不久就又会再次失效,反复如此,使得网络通讯变得极不稳定。所有厂家的接入交换机手册里都没有提及端口认证和DHCP snooping之间是否有什么冲突,实测的结果是,在所有端口都采用动态VLAN的情况下,每台交换机上只对一或两个VLAN开启DHCP snooping是没影响的,再多就会出问题。

7、不主动发数据包的设备不能通过认证

个别的设备接入网络后始终不能通过认证,经检查发现是由于这些设备不能主动向外发送数据包,而只能被动的响应,例如一些门禁的读卡器,网卡不能设置为DHCP,只能手工配置静态IP地址,这使得交换机端口上的认证不能被触发。对于个别这样的设备,只能无奈的回归到为其配置静态VLAN,好在这样的情况很少。

还有一个有趣的现象值得一提。

当接入交换机品牌是安奈特的交换机时,如果在一个动态VLAN的端口上再接一个不可网管的小交换机,这个小交换机上分别接入两个分属不同VLAN的MAC地址的设备,这个时候会发现这两个MAC地址都可以通过认证,而此时在这个动态VLAN的端口上两个VLAN的数据同时都可以在这个端口做交换,这个端口同时属于两个VLAN了。不过,需要注意的是,不推荐这样的做法。在实际应用中发现,如果在同一个配置了动态VLAN的端口上学习到了多个MAC地址,这时虽然每个MAC地址都可以分别通过认证,但此时这个端口的认证会变得很不稳定,时常会出现认证失效的现象。再者,由于接入交换机的动态VLAN端口一般会配置有spanningtree的portfast和BPDU guard,一旦端口上接的小交换机发送了BPDU包会导致这个端口被阻断,一个比较可行的办法是,在每个接入端口上配置port-security,让每个接入端口只学习一个MAC地址。关于spanning-tree的话题可以另行参考相关的其它文章。

而当接入交换机是思科时,同样是在一个802.1x端口上同时接入两个分属不同VLAN的MAC地址的设备,在默认情况下,思科交换机只让在该端口上先学习到的那个MAC地址正常通过认证,并只对此来自此MAC地址的数据包做转发,而另外的那个MAC地址无法被交换机学习到,因而不能正常通讯。如一定要让多个MAC地址能在同一个dot1x端口上工作,就需要在此端口上加这样一条配置:dot1x host-mode multi-host。

思科交换机此时的认证方法是仅由最先学习到的那个MAC地址发起认证,如认证成功,则此端口上的所有MAC地址都将处于该MAC地址所属的VLAN,如认证失败,则此端口进入guestvlan。而当成功认证的那个MAC地址离开该端口后,该端口将被置入guest-vlan,能否再次通过认证就要看之后最先学习到的MAC地址了。这样的做法漏洞很明显,并不值得采用。

猜你喜欢
思科网卡交换机
部署Linux虚拟机出现的网络故障
基于地铁交换机电源设计思考
Server 2016网卡组合模式
修复损坏的交换机NOS
使用链路聚合进行交换机互联
思科新一代防火墙帮助客户实现全数字化计划
挑战Killer网卡Realtek网游专用Dragon网卡
罗克韦尔自动化交换机Allen-Bradley ArmorStratix 5700
USB故障又一原因