在网络管理工作中,常常会碰到这样的情况:某些用户违反管理规定,私自修改自已的IP地址,以达到访问受限资源的目的。这样的行为,不但破坏了信息安全规则,还可能因为地址冲突引起网络通讯故障。

  网管管理员可能会试图使用如后文所述的各种技术手段来解决这一问题,但效果不一定很理想:首先技术手段无法完全阻止这种现象的发生,其次是增加了管理的复杂性和成本。所以遏制这种现象最有效的方法是行政手段,这是技术手段所无法替代的。

  在介绍这些管理手段之前我们先来看一个模拟的环境:工作站PC和SERVER连接到一台Cisco Catalyst 3550交换机上,它们分属不同的VLAN,借助3550的路由功能进行通讯(附交换机配置):

  hostname Cisco3550

  !

  interface GigabitEthernet0/11 description Connect to PC

  !

  interface GigabitEthernet0/12 description Connect to SERVER switchport access vlan 2

  !

  interface Vlan1

  p address 1.1.1.254 255.255.255.0

  !

  interface Vlan2

  p address 2.1.1.254 255.255.255.0

  如果不需要做权限限制,只是要防止IP地址冲突的话,最佳的方案可能是使用DHCP.DHCP 服务器可以为用户设置IP 地址、子网掩码、网关、DNS等参数,使用方便,还能节省IP地址。在Cisco设备上设置DPCP可以参考:《Cisco路由器上配置DHCP全程详 解》.静态的分配和设置需要较多管理开销,如果用户不捣乱的话,由于用户名和IP地址一一对应,维护起来比较方便,以下均假设采用的是静态的管理方法。

  测试1.假设VLAN1内只允许IP 1.1.1.1 访问Server: 2.1.1.1,其它访问全部禁止。

  限制方法:使用IP访问控制列表

  interface Vlan1

  p address 1.1.1.254 255.255.255.0

  p access-group 100 in

  access-list 100 permit ip host 1.1.1.1 host 2.1.1.1

  突破方法:非法用户将IP地址自行改为 1.1.1.1即可访问Server.非法用户抢占地址1.1.1.1将会引起IP地址冲突问题。如果用户将IP地址设成网关的IP,还会影响到整个 VLAN的通讯。通过修改Windows 设置,可以防止用户修改“网络”属性,但这一方法也很容易被突破。

  测试2.在测试1的基础上加上静态ARP绑定可以防止IP地址盗用。

  实现方法:在测试1配置的基础上设置arp 1.1.1.1 0001.0001.1111 ARPA

  注意以下的命令是错误的,因为ARP的端口参数是三层(路由)端口而非二层(交换)端口:

  arp 1.1.1.1 0001.0001.1111 ARPA GigabitEthernet0/11

  设置完成之后,如果非法用户把地址改为1.1.1.1,它发送到路由器的包正常,但是从目标服务器2.1.1.1返回的数据包在路由器上转发的时候,目标MAC地址将总是设为0001.0001.1111,非法用户不能接收。

  类似办法:使用“ARP SERVER”按一定的时间间隔广播网段内所有主机的正确IP-MAC映射表

  突破方法:修改MAC地址很容易,在Windows网络连接设置修改网卡的配置,在“高级”页面中找到Network Address设置为指定的值即可。

  测试3.使用Port Secure

  原理:如果限制了指定端口只能被特定MAC地址的机器,用户若更改了MAC地址端口将会进入不可用状态。

  设置方法:

  interface g 0/1

  switchport mode access

  switchport port-security

  设置完成之后,交换机端口上首次连接的PC的MAC地址将会记录到交换机中,成为唯一能够使用该端口的MAC地址。如果该PC更换MAC地址,默认将会使用端口置于shutdown状态,无法与网络连通。

  可以使用命令设置安全冲突的处理方法:

  sw port-security violation [protect | restrict | shutdown ]

  protect 丢弃来自非法源地址的包,不告警

  restrict 丢弃来自非法源地址的包,发送syslog告警

  shutdown(默认) 关闭端口,发送SNMP trap、Syslog 告警,除非管理员执行命令shut/no shut,否则端口一直处理down状态。

  突破方法:代理服务器。用户在同一VLAN内能够对外访问的主机上安装代理服务器,通过代理访问。

  测试4.使用VLAN,PVLAN隔离用户

  原理:将授权用户和非授权用户划分到不同的VLAN中,并使用访问控制列表限制VLAN间的通讯。也可以使用PVLAN隔离使同一VLAN间某些主机之间不能直接通讯……

  interface range g 0/10

  description Connect to PC1

  switchport access vlan 7

  interface range g 0/11

  description Connect to PC2

  switchport access vlan 8

  特殊办法:交换机Cisco 3550交换机还能支持在二层(交换)端口上设置mac/ip 访问控制列表,以下设置将使f0/1端口上的PC只能使用ip地址1.1.1.1及mac地址0000.0c31.ba9b,否则网络通讯不正常。

  ac access-list extended macacl

  permit host 0000.0c31.ba9b any

  permit any host 0000.0c31.ba9b

  interface FastEthernet0/1

  o ip address

  p access-group ipacl in

  ac access-group macacl in

  p access-list extended ipacl

  permit ip any host 1.1.1.1

  permit ip host 1.1.1.1 any

  突破方法:该用户跑到授权用户的机器上访问

  这是非典型的突破方法,目前还没有很好的解决方法。

  其他可能的限制方法:

  1.认证代理:用户访问特定资源前必须在某个网页上输入用户名和密码,否则不通

  2.802.1x:用户通过802.1x认证同时由DHCP服务器分配IP地址,否则不通

  3.PPPoE:用户需安装PPPoE客户端软件,使用用户名和密码登录网络才能使用

  讨论更新:一位叫Maying的朋友看了本文之后到BBS发帖子询问:“如何在路由器上设置过滤掉某个特定mac地址的流量?不希望使用这个mac地址的主机通过路由器!”。

  这个要求比较新鲜。当你针对一个MAC地址进行过滤的时候,这一动作发生在第二层。而路由器一般执行的是第三层路由的任务,只有很少情况下做桥接的时候才对进入的MAC地址进行过滤,所以这样的过滤最好设置在二层交换设备上。

  但这个要求对路由器来说也不是不可能的任务,麦子使用以下配置达到了要求的效果:

  p cef//Rate-limit 需要cef的支持,路由器可能默认未启用cef interface Ethernet0/0 ip address 192.168.1.254 255.255.255.0 rate-limit input access-group rate-limit 100 8000 1500 2000 conform-action drop exceed-action drop //如果源MAC地址为指定值则丢弃(其他的都允许) access-list rate-limit 100 0001.0001.abcd //要限制的MAC地址

  这时候要注意,目标工作站到达该路由器之前不能经过其他三层设备,否则MAC地址会被改掉。

  讨论更新:Maying朋友再问:“我的路由器是Cisco 1720, 不支持CEF,怎么办?”

  Cisco 1720路由器能够支持CEF, 但要求是12.0(3)T以上IP PLUS版本的软件,12.2(11)YV 起标准IP版软件也可以支持CEF.如果路由器目前IOS软件版本不够,需要升级。

  也可以使用桥接(IRB)的方法来解决,这种方法只需要12.0(2)T 以上标准IP版软件即可。配置如下:

  bridge irb //启用IRB支持

  interface Ethernet0/0

  o ip address //路由做到逻辑端口BVI 1上

  bridge-group 1 //加入桥接组1

  !

  interface BVI1

  p address 192.168.1.254 255.255.255.0 //为桥接组1提供路由

  !

  bridge 1 protocol ieee //运行生成树协议防止环路

  bridge 1 route ip //路由IP流量

  bridge 1 address 0001.0001.abcd discard

  //丢弃来着于MAC地址0001.0001.abcd的数据包