为了提高云上流量入口安全性,如果您需要对NLB进行基于协议/端口/IP的访问控制,可以通过为NLB实例配置安全组来实现。与传统负载均衡CLB使用的ACL组不同,NLB通过安全组能力可实现更细粒度的访问控制,可以在整个实例上实现基于协议/端口的访问控制。本文为您介绍NLB实例如何通过安全组实现基于监听/端口粒度的访问控制。
场景说明
当NLB实例未加入安全组时,NLB监听端口默认对所有请求放通。
当NLB实例加入安全组且未设置任何拒绝策略时,NLB监听端口默认对所有请求放通。如果您需要只允许特定IP访问NLB,请注意添加一条拒绝策略进行兜底。
当您的NLB实例有访问控制的诉求,希望控制NLB实例的入流量时,您可以选择为NLB实例添加安全组,同时可基于业务设置相应的安全组规则。
负载均衡的出方向流量为用户请求的回包,为了保证您的业务正常运行,NLB的安全组对出流量不做限制,您无需额外配置安全组出方向规则。
本文从以下三种操作来说明NLB实例加入安全组后对协议/端口的访问控制,且以NLB实例配置TCP 80监听和TCP 81监听为例说明。
编号 | 安全组规则 | 预期结果 | 相关操作链接 |
操作一:NLB实例未加入安全组 | NLB监听端口默认对所有请求放行。 | 此处仅以NLB实例配置TCP 80监听和TCP 81监听为例说明。
| |
操作二:NLB实例加入安全组 | 拒绝访问TCP协议的81端口 说明 此处仅列出与本文强相关的安全组规则,其余默认规则未列出。 |
| |
操作三:修改NLB实例加入的安全组 |
说明 此处仅列出与本文强相关的安全组规则,其余默认规则未列出。 |
|
使用限制
分类 | 安全组类型 | 说明 |
NLB支持加入的安全组 |
|
关于普通安全组和企业安全组的介绍,请参见普通安全组与企业级安全组。 |
NLB不支持加入的安全组 | 托管安全组 | 关于托管安全组的介绍,请参见托管安全组。 |
前提条件
您已创建专有网络VPC1,具体操作,请参见创建和管理专有网络。
您已在VPC1中创建了2台ECS实例。ECS01和ECS02实例作为NLB实例的后端服务器,且ECS01和ECS02实例中部署了应用服务。
关于创建ECS实例,请参见自定义购买实例。
本文ECS01和ECS02部署测试应用示例如下:
您已注册域名并完成备案,且通过自有域名为NLB配置CNAME解析。
步骤一:创建服务器组
- 登录网络型负载均衡NLB控制台。
在顶部菜单栏,选择服务器组所属的地域。本文选择华东1(杭州)。
在左侧导航栏,选择 。
在服务器组页面,单击创建服务器组。
在创建服务器组对话框中,完成以下配置,然后单击创建。
此处仅列出与本文强相关的配置项,其余部分参数可保持默认值。更多信息,请参见创建服务器组。
配置
说明
服务器组类型
选择一种服务器组类型。本文选择服务器类型。
服务器组名称
输入服务器组名称。本文输入RS01。
VPC
从VPC下拉列表中选择一个VPC。本文选择已创建的VPC1。
选择后端协议
选择一种后端协议。本文选择TCP。
选择调度算法
选择一种调度算法。本文选择加权轮询。
在服务器组创建成功对话框中单击添加后端服务器。
在后端服务器页签单击添加后端服务器。
在添加后端服务器面板,选择已创建的ECS01和ECS02实例,然后单击下一步。
为已添加的服务器设置端口和权重,然后单击确定。
步骤二:创建NLB实例并配置监听
- 登录网络型负载均衡NLB控制台。
在顶部菜单栏,选择NLB实例所属的地域。本文选择华东1(杭州)。
在实例页面,单击创建网络型负载均衡。
在网络型负载均衡(按量付费)购买页面,完成以下配置。
此处仅列出和本文强相关的配置项。其余参数的配置,请参见创建实例。
地域:本文选择华东1(杭州)。
实例网络类型:本文选择私网。
VPC:本文选择已创建的VPC1。
单击立即购买,然后根据控制台提示完成实例购买。
返回实例页面,找到已创建的NLB实例,单击该NLB实例ID。
单击监听页签,在监听页签单击快速创建监听。在快速创建监听对话框中,配置以下参数,完成TCP 80监听的创建,然后单击确定。
监听配置
说明
选择负载均衡协议
选择监听的协议类型。本文选择TCP。
监听端口
输入监听端口,本文输入80。
转发的后端服务器组
选择服务器类型及服务器类型下的服务器组。
本文选择步骤一:创建服务器组创建的服务器组RS01。
在监听页签单击快速创建监听。在快速创建监听对话框中,配置以下参数,完成TCP 81监听的创建,然后单击确定。
监听配置
说明
选择负载均衡协议
选择监听的协议类型。本文选择TCP。
监听端口
输入监听端口,本文输入81。
转发的后端服务器组
选择服务器类型及服务器类型下的后端服务器组。
本文选择步骤一:创建服务器组创建的服务器组RS01。
NLB实例未加入安全组时,验证访问结果。
登录任意一台可以访问公网的Linux客户端。如果未安装telnet,以CentOS系统为例可以参考执行
yum install -y telnet
安装telnet。执行
telnet 域名 80
命令,测试客户端是否可以访问NLB实例TCP协议的80端口。收到如下所示的回复报文,则表示访问成功。
Trying *.*.*.*... Connected to www.example.com. Escape character is '^]'.
通过浏览器输入域名和端口号,例如
http://域名:80
,可以看到类似下图所示,表示NLB可以将请求转发至后端服务器。执行
telnet 域名 81
命令,测试客户端是否可以访问NLB实例TCP协议的81端口。Trying *.*.*.*... Connected to www.example.com. Escape character is '^]'.
通过浏览器输入域名和端口号,例如
http://域名:81
,可以看到类似下图所示,表示NLB可以将请求转发至后端服务器。验证结果显示,NLB实例未加入安全组时,客户端可正常访问NLB实例TCP监听的80端口和81端口
步骤三:创建安全组
在NLB实例加入安全组前,您需要先至ECS管理控制台创建安全组。
步骤四:NLB实例加入安全组并验证结果
NLB实例加入步骤三:创建安全组创建的安全组,并验证安全组规则对NLB实例的访问控制是否生效。
- 登录网络型负载均衡NLB控制台。
在顶部菜单栏,选择NLB实例所属的地域。本文选择华东1(杭州)。
在NLB实例页面,找到步骤二:创建NLB实例并配置监听创建的NLB实例,单击实例ID。在实例详情页签,单击安全组页签。
在安全组页签,单击添加安全组,在弹出的NLB实例加入安全组对话框中,选择步骤三:创建安全组创建的安全组,然后单击确定。
在左侧列表框单击目标安全组ID,可单击入方向或出方向页签分别查看安全组规则。
此处仅列出与本文强相关的安全组入方向规则。此时NLB实例加入的安全组规则如下:
授权策略
优先级
协议类型
端口范围
授权对象
允许
1
自定义TCP
目的:80/80
源:0.0.0.0/0
拒绝
1
自定义TCP
目的:81/81
源:0.0.0.0/0
NLB实例加入安全组后,测试访问结果。
登录任意一台可以访问公网的Linux客户端。
执行
telnet 域名 80
命令,测试客户端是否可以访问NLB实例TCP监听的80端口。收到如下所示的回复报文,则表示访问成功。
Trying *.*.*.*... Connected to www.example.com. Escape character is '^]'.
通过浏览器输入域名和端口号,例如
http://域名:80
,可以看到类似下图所示,表示NLB可以将请求转发至后端服务器。执行
telnet 域名 81
命令,测试客户端是否能访问NLB实例TCP协议的81端口。收到如下所示的回复报文,则表示客户端无法访问NLB实例TCP监听的81端口,NLB实例加入的安全组对NLB实例的访问控制已生效。
Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out
通过浏览器输入域名和端口号,例如
http://域名:81
,可以看到无法访问网页,则表示客户端无法访问NLB实例TCP监听的81端口,NLB实例加入的安全组对NLB实例的访问控制已生效。
步骤五:修改安全组并验证结果
修改安全组规则,并验证修改后的安全组规则对NLB实例的访问控制是否生效。
返回NLB实例页面,找到步骤二:创建NLB实例并配置监听创建的NLB实例,单击实例ID。在实例详情页签,单击安全组页签。
在基本信息区域单击安全组ID,或在安全组页签右上角单击前往ECS控制台编辑,进入安全组规则页面修改安全组规则。
在安全组规则页面,找到允许访问TCP协议80端口的规则,在操作列单击编辑,修改授权策略为拒绝。
此处仅列出与本文强相关的安全组规则。修改后的安全组规则如下:
授权策略
优先级
协议类型
端口范围
授权对象
拒绝
1
自定义TCP
目的:80/80
源:0.0.0.0/0
拒绝
1
自定义TCP
目的:81/81
源:0.0.0.0/0
修改NLB实例加入的安全组规则后,测试访问结果。
登录任意一台可以访问公网的Linux客户端。
执行
telnet 域名 80
命令,测试客户端是否能访问NLB实例TCP协议的80端口。收到如下所示的回复报文,则表示客户端无法访问NLB实例TCP监听的80端口,修改后的安全组规则对NLB实例的访问控制已生效。
Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out
通过浏览器输入域名和端口号,例如
http://域名:80
,可以看到无法访问网页,则表示客户端无法访问NLB实例TCP监听的80端口,NLB实例加入的安全组对NLB实例的访问控制已生效。执行
telnet 域名 81
命令,测试客户端是否能访问NLB实例TCP协议的81端口。收到如下所示的回复报文,则表示客户端无法访问NLB实例TCP监听的81端口,修改后的安全组规则对NLB实例的访问控制已生效。
Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out
通过浏览器输入域名和端口号,例如
http://域名:81
,可以看到无法访问网页,则表示客户端无法访问NLB实例TCP监听的81端口,NLB实例加入的安全组对NLB实例的访问控制已生效。
相关文档
关于NLB加入安全组和解绑安全组等操作,请参见NLB加入安全组。
如果您需要拒绝或允许特定IP访问NLB实例,请参见配置NLB安全组实现黑白名单访问策略。
关于安全组的详细介绍,请参见安全组。
LoadBalancerJoinSecurityGroup:为网络型负载均衡实例绑定已创建的安全组。
LoadBalancerLeaveSecurityGroup:为网络型负载均衡实例解绑安全组。