问题描述
我有一个面向公众的标准sku,Azure负载平衡器,它使用负载平衡规则将对特定端口的传入请求转发到虚拟机。该虚拟机在子网级别定义了一个NSG,该NSG允许该端口的传入流量,并且源设置为“ Internet”。
当前,此设置有效,但是我需要实施白名单-仅允许一组IP地址通过负载平衡器连接到此虚拟机。但是,如果我在NSG规则中删除了“ Internet”源类型,则无法再通过负载均衡器访问VM。
是否还有其他人遇到类似的用例?在通过Load Balancer访问的VM上设置IP白名单的最佳方法是什么?谢谢!
编辑:提供更多详细信息
这些是在子网中定义的顶级NSG。
我们有一个公共负载平衡器,该平衡器位于应用了以上NSG的虚拟机之前。该虚拟机没有特定的公共IP,而是依赖于Load Balancer的公共IP。
公共负载均衡器将端口8443和端口8543上的所有流量转发到该虚拟机,而无需会话持久性,并且使用同一IP进行出站和入站。
以下是我到目前为止所做的观察:
- 除非我将NSG规则Port_8443(在上表中)指定为“ Internet”,否则无法通过负载均衡器的公共IP在该端口上访问此虚拟机。
- 当我保留仅将特定IP地址列入白名单的NSG规则Port_8543时,即使通过这些列入白名单的客户端之一尝试连接至该端口,也无法通过负载平衡器的公用IP在该端口上访问此虚拟机。 / li>
- 我尝试将NSG规则Custom_AllowAzureLoadBalancerInBound添加到比port_8543更高的优先级,但是它仍然没有打开此访问权限。
- 我还尝试将Azure负载均衡器VIP(168.63.129.16)添加到Port_8543 NSG,但这也没有打开对负载均衡器公共IP上的端口8543的访问。
我也使用了负载平衡规则选项,但是似乎没有任何东西可以实现我想要的东西-
- 目标1:开放虚拟机在端口8443和端口8543上的访问权限,仅访问白名单的客户端IP,并且
- 目标2:使用负载平衡器的公共IP,允许列入白名单的客户端IP能够连接到此虚拟机上的这些端口上
我只能实现上述目标之一,但不能同时实现两个目标。
我还尝试了为分配给虚拟机的专用公共IP进行相同的白名单;而且也失去了与端口的连接性,在这里我没有分配“ Internet”源标签。
解决方法
Azure在每个网络安全组中都有默认规则。它允许来自Azure负载平衡器资源的入站流量。
如果要限制客户端访问客户端,只需添加一个新的入站端口规则,并将客户端的公共IP地址设置为String options = driver.findElements(By.xpath("//li//text()"));
System.out.println(options.getText());
,然后指定Source
和{ {1}}在您的特定入站规则中。您可以通过在客户端计算机上打开该URL来检查客户端的公用IPv4 here。
只想为在这里绊倒的其他人添加便条:
如果您要针对少数特定客户端IP将Azure VM(公开或私有提供)列入白名单,则必须执行以下步骤:
- 为VM(或子网)创建一个NSG-如果尚不可用
- 添加NSG规则以允许来自特定端口上的特定客户端IP的入站流量
- 添加NSG规则以拒绝来自所有其他来源的入站流量[这确实是可选的,但将有助于确保设置的安全性
此外,请注意查看客户端计算机计划连接的所有公共IP。尤其是在测试时,请使用公共IP,而不要使用VPN网关地址范围-这是我们使用的方法,最终对白名单测试产生了误报。