0

作为标题中的问题,我在 Azure Cloud 上设置了以下架构,并且在限制从 Internet 直接访问 VM 时遇到了麻烦。

在此处输入图像描述

以下是架构要求:

  • 两个虚拟机都必须有公共 ips(系统管理员才能通过 SSH 访问)
  • 必须拒绝从 Internet 到 VM 上的 WebService 的直接流量(通过端口 80)
  • 来自 Internet 的 Web 流量必须通过公共 LB 到 VM

假设两个 VM 都在 WebASG(应用程序安全组)中,在应用于 VM 子网的 NSG 设置中,我添加了一些规则(其优先级高于 3 个 Azure NSG 默认规则):

  1. 场景 A(添加 1 条自定义规则):

端口:80 - 协议:Tcp - 源:Internet - 目标: WebASG - 操作:允许

使用此 NSG 设置,我可以从 LoadBalancer IP 访问 WebService(满足 #3 要求),但是两个 VM 的端口 80 上的 WebService 将暴露给 Internet(这违反了 #2 要求)

  1. 场景 B(添加 2 条自定义规则):

端口:80 - 协议:Tcp - 源:AzureLoadBalancer - 目标:WebASG - 操作:允许

端口:80 - 协议:Tcp - 来源:Internet - 目的地: WebASG - 操作:拒绝

使用此 NSG 设置,满足 #2 要求,但访问 LoadBalancer IP 时无法访问 WebService(违反 #3 要求)

请注意:使用 AGW(Azure 应用程序网关,我可以通过这些 NSG 配置实现所有要求:

规则名称:AllowSSH端口:22 - 协议:Tcp - 源: sys-admin-ip-address - 目标:WebASG - 操作:允许

规则名称:DenyInternet2Web端口:任意- 协议:任意- 源:Internet - 目标:WebASG - 操作:拒绝

规则名称:AllowProbe2Web端口:80 - 协议:Tcp - 源:VirtualNetwork - 目标:WebASG - 操作: 允许

规则名称:AllowProbe2Web端口:80 - 协议:Tcp - 源:VirtualNetwork - 目标:WebASG - 操作: 允许

我不想使用 AGW,因为它会比 Azure LoadBalancer 花费更多的钱(实际上 Basic LoadBalancer 是免费的)。那么,在使用 LoadBalancer 时如何更改 NSG 以满足所有要求?

提前感谢您的帮助!

4

1 回答 1

1

我不认为有 NSG 规则可以满足所有要求,因为 #1 和 #2 要求是矛盾的。

如果虚拟机必须有公共 IP 地址,它实际上有机会暴露在互联网上。任何客户端都可以通过公共 IP 访问虚拟机。如果您想通过负载均衡器前端 IP 访问虚拟机,它的工作原理相同。阅读https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-overview#load-balancer-concepts

负载均衡器不会终止或发起流、与流的负载交互或提供任何应用层网关功能。协议握手总是直接发生在客户端和后端池实例之间。对入站流的响应始终是来自虚拟机的响应。当流到达虚拟机时,原始源 IP 地址也被保留。

在这种情况下,您可以删除后端实例 IP 地址,只需将负载均衡器前端用于 Web 流量和 SSH 连接。如果是这样,您可以在 Azure 负载均衡器中为与单个实例的 SSH 连接配置端口转发,并在此快速入门之后为 Web 流量配置负载均衡器规则,它适用于标准 LB。您只能允许来自客户端 IP 地址的端口 80 和 22。NSG 将如下所示,

端口:80,22 -协议:Tcp -:客户端的 IP 列表 -目标:WebASG -操作:允许

于 2019-12-31T11:54:42.337 回答