GNS3与VirtualBox实验室中的VLAN配置与安全探索

本文详细介绍了如何在GNS3和VirtualBox集成环境中配置VLAN,包括VLAN的创建、端口分配、访问模式与中继模式的区别,以及通过实际测试验证VLAN隔离效果和潜在的安全风险。

在GNS3/VirtualBox实验室中添加VLAN

欢迎来到我学习第二层及其漏洞的第二部分。本篇文章将基于第一部分——集成GNS3和VirtualBox中开始的实验室进行构建,所以如果你想跟着操作,需要先从那里开始,并首先设置好基本实验室。

在这篇文章中,我将向设置中添加VLAN,并在它们之间进行一些简单的交换。

计划

提醒一下,这是已经到位的设置:

在这篇文章中,我们将添加以下VLAN:

机器 路由器接口 IP VLAN
Unsec1 f1/0 192.168.1.1 10
Unsec2 f1/1 192.168.1.2 10
Sec1 f1/2 192.168.5.1 50
Vbox1 f1/3 192.168.1.100 10

一旦它们就位,我将展示如何在它们之间移动机器,并证明VLAN按设计隔离流量。我还将介绍访问端口和中继端口的区别,并展示如果你能接入中继端口,你可以访问任何你想要的VLAN。

设置

首先,我们需要告诉交换机我们要使用的VLAN,具体方法取决于你使用的设备类型,在我的设备上,我执行以下操作:

1
2
3
R1#vlan database
R1(vlan)#vlan 10
R1(vlan)#vlan 50

你可以通过运行以下命令检查它们是否添加成功:

1
R1(vlan)#show

除非你使用exit命令退出此菜单部分,否则这些都不会保存。如果你尝试这样做时收到以下错误消息:

1
2
3
4
5
6
R1(vlan)#exit
% not enough space on flash to store vlan database. trying squeeze...First create squeeze log by erasing the entire device

% error squeezing flash - (Missing or corrupted log)
Error on database apply 40: NV storage failure
Use 'abort' command to exit

你需要中止,然后运行以下命令:

1
R1#erase flash:

系统将提示你确认是否要继续,选择是。现在你需要返回VLAN数据库并重新运行上述命令,这次当你退出时,它们应该可以毫无问题地保存。

接下来进入各个接口并将它们分配到适当的VLAN:

1
2
3
4
R1#configure terminal
R1(config)#interface fastEthernet 1/0
R1(config-if)#switchport mode access
R1(config-if)#switchport access vlan 10

根据上表对每个接口重复此操作,记住f1/2(Sec1)属于VLAN 50,其余属于10。完成后,你可以返回到enable提示符并运行以下命令来检查你是否正确完成了所有操作:

1
R1#show interfaces status

你应该看到类似下面的内容,关键是要检查接口是否分配到了上表中描述的正确VLAN。

给路由器一分钟时间自行整理并重新启动所有内容,现在可以开始再次进行ping测试。首先,192.168.1.0/24子网(VLAN 10)上的所有设备能否相互看到?

现在我们需要测试是否简单地将VirtualBox机器上的eth0放入192.168.5.0/24网络将允许通信:

不,没有任何通信,这很好,VLAN设置阻止了流量从一个子网进入另一个子网。

在继续之前,这是对实验室进行快照的完美时机。Cisco设备仅将其配置保存在内存中,除非被告知将其写入磁盘(旧金山市感谢Terry Childs对此了如指掌)。这意味着即使你保存了GNS3项目,一旦路由器关闭,它也会忘记你设置的所有内容,你需要重新配置它。要从enable提示符运行以下命令来存储配置:

1
R1#copy running-config startup-config

我发现,这可能只是巧合或我的设置中的某些奇怪现象,如果你不保存GNS3项目,重启后保存的值仍然会丢失,所以除了在设备中保存配置外,还要在GNS3中进行保存。

现在完成了,让我们证明如果我们将Vbox1(f1/3)从VLAN 10移动到VLAN 50,它就能够看到Sec1。

1
2
3
4
5
6
R1#configure terminal
R1(config)#interface fastEthernet 1/3
R1(config-if)#switchport mode access
R1(config-if)#switchport access vlan 50
R1(config-if)#exit
R1(config)#exit

更改生效需要几秒钟时间,但一旦生效,Vbox1现在就可以与其子网上的Sec1通信。

访问端口和中继端口

到目前为止,网络上的每个端点都将其端口设置为访问模式而不是中继模式。有关差异的完整说明,请参阅Cisco的详细文章,但该网站的一段摘录说:

以太网接口可以配置为访问端口或中继端口,如下所示:

  • 访问端口只能在接口上配置一个VLAN;它只能承载一个VLAN的流量。
  • 中继端口可以在接口上配置两个或更多VLAN;它可以同时承载多个VLAN的流量。

基本上,这意味着访问端口上的设备对VLAN一无所知,因为交换机为其处理所有事情,设备自动放入分配给它的VLAN,并且交换机将忽略任何尝试使用不同VLAN ID的行为。另一方面,中继端口将处理VLAN的所有控制权交给连接到它的设备,这意味着进入该端口的任何流量应该已经被标记并准备好传递到它应该去的地方。访问端口设计用于终端设备,如PC、打印机等,中继端口设计用于连接到其他网络基础设施,如交换机。

作为攻击者,如果你在访问端口上,由于内置限制,你在VLAN方面能做的事情相当有限,但如果你能将自己接入中继端口,那么限制就会被解除,你可以做任何你想做的事情。为了证明这一点,让我们将Vbox1移动到中继端口,看看我们能做什么。

从访问端口更改为中继端口很简单:

1
2
3
4
5
R1#configure terminal
R1(config)#interface fastEthernet 1/3
R1(config-if)#switchport mode trunk
R1(config-if)#exit
R1(config)#exit

现在让我们切换到Vbox1,看看我们能访问什么:

我们无法ping通任何东西,这不好,我说我们应该能够访问一切。问题是我们正在向交换机发送流量,但没有告诉它流量属于哪个VLAN,因此交换机使用所谓的本机VLAN,这是一个默认VLAN,所有未标记的流量都发送到那里。我稍后会讨论其安全性,但现在让我们添加一些VLAN标签并让流量流动。

如果你自安装vlan包以来没有重启Vbox1,首先需要加载8021q内核模块:

1
modprobe 8021q

现在让我们将自己放在一些VLAN上。在Linux中,这样做的方法是创建一个新的虚拟接口,附加到主连接上,所有流量在出口时都被标记。将VLAN 10添加到eth0时,新接口将称为eth0.10。

1
2
vconfig add eth0 10
ifconfig eth0.10

新接口还需要一个正确子网中的IP,但这里要注意,如果eth0本身也在该子网上,事情会变得混乱并且不会工作,所以确保首先从eth0中删除IP。注意,你不能只是关闭eth0,因为这样做也会关闭它的所有虚拟接口。

1
2
ifconfig eth0 0.0.0.0
ifconfig eth0.10 192.168.1.100 up

最后,检查连通性:

1
ping 192.168.1.1

它工作了,Linux网络堆栈正在向数据包添加正确的8021Q标记,并且它们按预期流动。

根据上面的描述,中继端口可以处理多个VLAN,所以让我们启动第二个,这样Vbox1也可以与Sec1通信。

这就是在中继端口上的力量,我们基本上可以访问任何我们想要的VLAN,因为我们标记流量,而交换机只是信任我们。

这个问题的最后一点是如何知道有哪些VLAN可以被滥用。这很简单,网络会告诉你,只需监视广播流量,你就会看到标记的流量在你周围流动。最基本的方法是使用tcpdump:

1
tcpdump -nei eth0

这里有两个重要的事情,-e开关添加了第2层头:

-e 在每个转储行上打印链路级头。

以及你在eth0上转储,而不是eth0.10或任何其他已经标记的接口。

从这里你可以看到网络上存在的两个VLAN ID,然后可以跳转到它们并像监视普通网络一样监视它们以识别IP范围。

总结

实验室现在有两个VLAN,已被证明工作正常,我们可以通过修改端口标记以合法方式在它们之间移动,如果意外允许访问中继端口,我们可以滥用它们。在第三部分中,我将研究用于设置VLAN和端口的不同协议,并看看它们是否可以被滥用以修改端口以利于我们。

致谢

我在第一部分结束时忘记感谢两位提供帮助的人,Joshua和Des,你们的鼓励和建议非常受欢迎。

链接

最后是我在整合所有这些时发现有用的一些链接。在构建这个实验室的过程中,我从所有这些中汲取了一些内容。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计