ALB配置安全组实现黑白名单访问策略

安全组是一种虚拟防火墙,通过其规则控制应用型负载均衡ALB实例出/入方向流量。如果您需要拒绝或允许特定IP访问ALB实例,可以使用ALB安全组功能来实现流量访问控制。通过配置ALB安全组,您可以创建黑白名单的访问策略,以便对流量进行更精确的控制。

场景说明

当您的ALB实例有访问控制的诉求,希望控制ALB实例的入流量时,您可以选择为ALB实例添加安全组,同时可基于业务设置相应的安全组规则。

重要
  • 负载均衡的出方向流量为用户请求的回包。为了保证您的业务正常运行,ALB的安全组对出流量不做限制,您无需额外配置安全组出方向规则。

  • 新增安全组规则时,建议您避免对ALB的Local IP添加优先级为1的拒绝策略,以确保新增的安全组规则不会与ALB托管安全组策略冲突,因为这可能会影响ALB与您的后端服务之间的正常通信。您可以登录应用型负载均衡ALB控制台,在实例详情页面查看Local IP。

本文通过以下两种场景为您介绍ALB安全组的黑白名单访问策略。关于安全组规则的排序策略,请参见安全组规则

黑名单:ALB安全组对指定IP地址的拒绝访问策略

企业在阿里云某地域使用ALB部署了业务,当公司的安全团队对业务进行安全监测时,发现某IP地址(如121.XX.XX.12)频繁发起恶意请求和攻击尝试,这不仅带来了潜在的业务风险,还有可能导致数据泄露等安全隐患。

为了解决这个问题,可以在ALB中配置安全组规则,限制特定IP地址(如121.XX.XX.12)的访问权限,从而有效阻止恶意请求和攻击尝试,保护业务环境的安全和稳定。

image

白名单:ALB安全组对指定IP地址的允许访问策略

企业在阿里云某地域使用ALB部署了包含敏感信息的业务。为了严格限制对ALB实例的访问权限,仅允许特定IP地址(如121.XX.XX.12)访问,企业可以为ALB配置安全组规则,设置只允许该IP地址访问,拒绝其他所有IP地址的访问请求。

image

使用限制

重要

安全组功能默认不开放,如需使用,请向商务经理申请。

分类

安全组类型

说明

ALB支持加入的安全组

  • 普通安全组

  • 企业级安全组

  • 要求安全组为专有网络类型,且安全组和ALB实例属于同一个专有网络VPC(Virtual Private Cloud)。

  • 一个ALB实例最多支持加入4个安全组,且同一个ALB实例加入的安全组类型需保持一致,即不支持同时加入普通安全组和企业级安全组。

    某个ALB实例已加入普通安全组,如果需要加入企业级安全组,可解绑当前ALB实例的所有普通安全组后再行操作,反之亦然。

关于普通安全组和企业安全组的介绍,请参见普通安全组与企业级安全组

ALB不支持加入的安全组

托管安全组

关于托管安全组的介绍,请参见托管安全组

前提条件

  • 您已在华东1(杭州)地域创建专有网络VPC1,并分别在可用区H和可用区I创建了交换机VSW1和VSW2。具体操作,请参见创建专有网络和交换机

  • 您已在VSW1中创建2台ECS实例,且ECS01和ECS02实例中部署了应用服务。

    • 关于创建ECS实例,请参见自定义购买实例

    • 本文ECS01和ECS02部署测试应用示例如下:

      ECS01服务部署命令

      yum install -y nginx
      systemctl start nginx.service
      cd /usr/share/nginx/html/
      echo "Hello World ! This is ECS01." > index.html

      ECS02服务部署命令

      yum install -y nginx
      systemctl start nginx.service
      cd /usr/share/nginx/html/
      echo "Hello World ! This is ECS02." > index.html
  • 您已经注册域名并完成备案。具体操作,请参见注册阿里云域名ICP备案

下表列出本文客户端和服务端的IP配置,仅供参考。

分类

IP

说明

服务端ECS01

  • 私网:192.168.10.22

  • 公网:无

作为ALB实例后端服务器。

服务端ECS02

  • 私网:192.168.10.35

  • 公网:无

客户端03

公网:121.XX.XX.12

作为访问ALB实例的客户端。

客户端04

公网:121.XX.XX.45

操作步骤

步骤一:创建服务器组

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择服务器组所属的地域。本文选择华东1(杭州)

  3. 在左侧导航栏,选择应用型负载均衡ALB > 服务器组

  4. 服务器组页面,单击创建服务器组

  5. 创建服务器组对话框中,完成以下配置,然后单击创建

    此处仅列出与本文强相关的配置项,其余部分参数可保持默认值。更多信息,请参见创建和管理服务器组

    配置

    说明

    服务器组类型

    选择一种服务器组类型。本文选择服务器类型

    服务器组名称

    输入服务器组名称。

    VPC

    从VPC下拉列表中选择一个VPC。本文选择已创建的VPC1。

    选择后端协议

    选择一种后端协议。本文选择HTTP

    选择调度算法

    选择一种调度算法。本文选择加权轮询

  6. 服务器组创建成功对话框中单击添加后端服务器

  7. 后端服务器页签单击添加后端服务器

  8. 添加后端服务器面板,选择已创建的ECS01和ECS02实例,然后单击下一步

  9. 为已添加的服务器设置端口和权重,然后单击确定

步骤二:创建ALB示例并配置监听

  1. 登录应用型负载均衡ALB控制台
  2. 实例页面,单击创建应用型负载均衡

  3. 在购买页面,完成以下配置。

    此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。关于参数的更多信息,请参见创建应用型负载均衡

    • 地域:本文选择华东1(杭州)

    • 实例网络类型:本文选择公网

    • VPC:本文选择已创建的VPC1。

  4. 单击立即购买,然后根据控制台提示完成实例开通。

  5. 返回实例页面,找到已创建的ALB实例,单击该ALB实例ID。

  6. 单击监听页签,然后单击快速创建监听

  7. 快速创建监听对话框中,配置以下参数,完成HTTP 80监听的创建,然后单击确定

    配置

    说明

    选择监听协议

    选择监听的协议类型。本文选择HTTP

    监听端口

    输入监听端口。本文输入80。

    转发的后端服务器组

    选择服务器类型服务器类型下的服务器组。本文选择已创建好的服务器组。

步骤三:设置域名解析

实际业务场景中,建议您使用自有域名,通过CNAME解析的方式将自有域名指向ALB实例域名。

  1. 在左侧导航栏,选择应用型负载均衡 ALB > 实例

  2. 实例页面,复制已创建的ALB实例的DNS名称。

  3. 执行以下步骤添加CNAME解析记录。

    说明

    对于非阿里云注册域名,需先将域名添加到云解析控制台,才可以进行域名解析设置。具体操作,请参见域名管理。如果您是阿里云注册的域名,请直接执行以下步骤。

    1. 登录域名解析控制台

    2. 权威域名解析页面,找到目标域名,在操作列单击解析设置

    3. 解析设置页面,单击添加记录

    4. 添加记录面板,配置以下信息完成CNAME解析配置,然后单击确定

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

      您的域名的前缀。本文输入@

      说明

      创建域名为根域名时,主机记录为@

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。

      TTL

      全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。

步骤四:创建安全组

在ALB实例加入安全组前,您需要先至ECS管理控制台创建安全组,按照以下访问规则创建2个安全组。

  • 实现黑名单策略的安全组1

    新增拒绝策略的规则。本文以拒绝公网IP(121.XX.XX.12)访问为例,添加一条拒绝策略的规则。默认的安全组规则可保留。

    授权策略

    优先级

    协议类型

    端口范围

    授权对象

    拒绝

    1

    全部

    目的:-1/-1

    源:121.XX.XX.12

  • 实现白名单策略的安全组2

    新增允许和拒绝的规则。本文以允许公网IP(121.XX.XX.12)为例,添加一条允许策略的规则,并添加一条拒绝策略的规则。

    授权策略

    优先级

    协议类型

    端口范围

    授权对象

    允许

    1

    全部

    目的:-1/-1

    源:121.XX.XX.12

    拒绝

    100

    全部

    目的:-1/-1

    源:0.0.0.0/0

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择网络与安全 > 安全组

  3. 在顶部菜单栏,选择安全组所属的地域。本文选择华东1(杭州)

  4. 安全组页面,单击创建安全组

  5. 创建安全组页面,设置安全组的基本信息参数。

    此处仅列出部分配置项,其余参数的配置请参见创建安全组

    • 网络:本文选择已创建的VPC。

    • 安全组类型:本文选择普通安全组

  6. 创建安全组安全组页面,设置安全组的访问规则参数。

    1. 入方向单击手动添加,分别按照实现黑名单策略的安全组1实现白名单策略的安全组2的规则创建

    2. 单击创建安全组

步骤五:ALB实例未加入安全组并验证结果

以客户端03和客户端04为例,测试客户端与ECS01和ECS02的连通性。

  1. 登录客户端03,执行curl http://域名 ,可以看到如下图所示,收到Hello World ! This is ECS01.报文,表示该客户端可以访问ALB实例。

    image

  2. 登录客户端04,执行curl http://域名,可以看到如下图所示,收到Hello World ! This is ECS02.报文,表示该客户端可以访问ALB实例。

    image

步骤六:ALB实例加入安全组并验证结果

实现黑名单访问策略

ALB实例加入步骤四:创建安全组创建的安全组1,并验证安全组1中规则对ALB实例的访问控制是否生效。

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例的所属的地域。本文选择华东1(杭州)

  3. 在ALB实例页面,找到已创建的ALB实例,单击实例ID。在实例详情页签,单击安全组页签。

  4. 安全组页签,单击添加安全组,在弹出的ALB实例加入安全组对话框中,选择步骤四:创建安全组创建的安全组1,然后单击确定

  5. 在左侧列表框单击目标安全组ID,可单击入方向出方向页签分别查看安全组规则。

    此处仅列出与本文强相关的安全组规则

    授权策略

    优先级

    协议类型

    端口范围

    授权对象

    拒绝

    1

    全部

    目的:-1/-1

    源:121.XX.XX.12

  6. ALB实例加入安全组后,测试访问结果。

    1. 登录客户端03,执行curl http://域名 ,可以看到如下图所示,收到curl: (7) Failed connect to *********:80; Connection timed out报文表示该客户端被拒绝访问ALB实例。

      image

    2. 登录客户端04,执行curl http://域名 ,可以看到如下图所示,收到Hello World ! This is ECS01.报文,表示该客户端可以访问ALB实例。

      image

验证结果表明:ALB实例加入实现黑名单策略的安全组1后,安全组内拒绝规则中的IP地址不能访问该ALB实例,不在安全组拒绝规则中的IP可以正常访问。

实现白名单访问策略

ALB实例加入步骤四:创建安全组创建的安全组2,并验证安全组2中规则对ALB实例的访问控制是否生效。

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例的所属的地域。本文选择华东1(杭州)

  3. 在ALB实例页面,找到已创建的ALB实例,单击实例ID。在实例详情页签,单击安全组页签。

  4. 安全组页签,单击添加安全组,在弹出的ALB实例加入安全组对话框中,选择步骤四:创建安全组创建的安全组2,然后单击确定

  5. 在左侧列表框单击目标安全组ID,可单击入方向出方向页签分别查看安全组规则。

    此处仅列出与本文强相关的安全组规则

    授权策略

    优先级

    协议类型

    端口范围

    授权对象

    允许

    1

    全部

    目的:-1/-1

    源:121.XX.XX.12

    拒绝

    100

    全部

    目的:-1/-1

    源:所有IPv4(0.0.0.0/0)

  6. ALB实例加入安全组后,测试访问结果。

    1. 登录客户端03,执行curl http://域名 ,可以看到类似下图所示,收到Hello World ! This is ECS01.报文,表示该客户端可以访问ALB实例。

      image

    2. 登录客户端04,执行curl http://域名 ,可以看到类似下图所示,收到curl: (7) Failed connect to *********:80; Connection timed out,表示该客户端被拒绝访问ALB实例。

      image

验证结果表明:ALB实例加入实现白名单策略的安全组2时,安全组内仅允许规则中的IP地址可以访问该ALB实例。

相关文档