目前我正在设计一个网络。问题是,在某个时候我遇到了一个奇怪的请求。客户有自己的想法。现在我很困扰,因为我对这件事的了解不够深入。我无法确定请求本身是否存在固有问题,以及是否存在如何将这些问题传达给客户的问题。该请求特别适用于两个服务器,如下所示:
物理网络(简化):
router.eth0 <--> switch.eth0 | switch.eth1 <--> server1.eth0 | server1.eth1 <--> server2.eth0
逻辑网络:
+----------+ +----------+ +----------+ +----------+
| router | | switch | | server1 | | server2 |
| untagged | <--> | untagged | | | | |
+----------+ | vlan 10 | <----+----------+----> | vlan 10 |
| | | untagged | <--> | untagged |
+----------+ +----------+ +----------+
因此,来自路由器的每个请求首先被标记为 vlan 10,然后发送到 server1。然后 server1 将这些数据包转发到 server2,而 server1 不对 vlan 10 数据包做出反应。之后,server2 取消来自 vlan 10 的数据包的标记,并根据数据包的内容将其中一些数据包转发回 server1 或自行处理。最后,server1 可以响应这些数据包,因为它们现在已取消标记。
先提出一些建议:我知道直接将 server2 连接到路由器,将 server1 连接到 server2 会更简单,但如果这种方法没有安全问题,客户端坚持这样做。客户端还要求所有发往 server1 的数据包都必须由 server2 处理。
我现在的问题是攻击者是否可以破坏此设置。如果他控制了路由器,攻击者可以利用通过服务器 1 的数据包流来获得优势(不包括拒绝服务)吗?例如,攻击者是否可以伪造可以直接发送到服务器 1 而不通过服务器 2 的数据包?
答案1
如果一切配置都与描述完全一致,攻击者就无法伪造数据包或以其他方式直接到达服务器 1。可以安全地进行配置。
但这种设置仍然存在严重缺陷:
最重要的是,它太复杂了。虽然可以像这样配置,为什么故意这样配置?增加复杂性的目的是什么?为什么要把事情做得比需要的更复杂?有时人们说,计算机系统设计的质量是用 WTF 来衡量的,审计员问的 WTF 越多,系统就越出乎意料地复杂(即设计越差);事实确实如此,这是什么鬼?
其次,这种设置引入了一个故障点,使系统更难诊断和修复。请注意, 上的故障server1
将使系统server2
无法访问,即使它运行正常; 上的故障也server2
将使系统server1
无法访问,即使它运行正常。您无法真正区分这两种情况。想象一下,您面临两台服务器都无法访问的情况。您认为哪一台发生故障?您无法给出任何大致的指示来尽早诊断和修复系统。您需要从一开始就仔细检查所有内容,并且无法远程完成任何事情。这样一来,它就需要额外的不合理维护。您的客户是否愿意为额外的工作支付更多费用,而这种费用可以通过适当的网络设计轻松避免(或至少减少发生的可能性)?
此外,这种设置非常脆弱。其他可能的设置可能会证明某些错误是合理的;如果在不明显的地方犯了一个错误,这种设置就会显示违规行为。对于刚刚遇到这种设置的新员工来说,他们不清楚应该在哪里启用什么。您需要非常小心地在 server1 上配置 VLAN,以便它不接受来自交换机端的未标记数据包。如果它错误地接受了,则设置是有缺陷的,并且 server1 只能通过 server2 访问的条件不再成立;这会为伪造的数据包创建一个漏洞。
最后,它效率低下,可能会导致 DoS。通常情况下,两个链路都是 1Gbps。我们不知道服务器 1 上运行哪种服务,但为了简单起见,我将描述一个最简单的情况,它具有对称的典型流量分布:传入流量约等于传出流量。在这种情况下,服务器 1-服务器 2 链路的负载始终是交换机-服务器 1 链路的两倍。当交换机-服务器 1 链路上的负载仅超过其容量的 50% 时,如果预计所有流量都将通过服务器 2 到达服务器 1,则服务器之间的链路将超出其容量,数据包将被丢弃。此外,服务器 1 必须桥接网络,这将由 CPU 完成;负载不是很高,但仍会产生中断、上下文切换,因此服务器 1 必须做一些完全不必要的工作。这是政府一直喜欢的设置类型,它让他们的员工忙碌而不做任何有用的工作,只是来回翻阅文件。
如果服务器以“正确的顺序”连接且没有 VLAN,所有这些问题当然都会消失。也可能存在星型网络拓扑,在这种情况下,所有设备(路由器、两个服务器)都直接连接到交换机,然后所有 VLAN 处理都在交换机上完成。星型拓扑也“有点”没有这些问题;它只存在所描述的链路过载问题,但在这种情况下更容易解决,而且在交换机上安全地配置 VLAN 自然比在服务器上配置 VLAN 更容易。