IBM Cloud Docs
将安全组规则应用于源 IP 地址和目标 IP 地址

将安全组规则应用于源 IP 地址和目标 IP 地址

安全组规则现在支持本地 IP 地址。 这意味着规则可以允许特定本地 IP 地址,而不是允许所有本地 IP 地址。 安全组规则支持入口和出口规则的本地 IP 地址。

在以下情况下,允许使用安全组规则的特定本地 IP 地址或地址范围很有用:

  • 您具有与单个虚拟网络接口关联的辅助专用 IP 地址
  • 您具有将包转发到允许 IP 电子欺骗的接口的定制路由

您可以应用仅允许特定本地目标 IP 地址的入站安全组规则。 您还可以应用仅允许特定本地源 IP 地址的出站安全组规则。

你可以使用控制台、CLI、API 和 Terraform 应用安全组规则(入站和出站)。

提示:

  • 系统将对所有规则求值,而不考虑这些规则的添加顺序。
  • 规则是有状态的,这意味着会自动允许响应所允许流量的返回流量。 例如,创建了规则以允许端口 80 上的入站 TCP 流量。 该规则还会允许将端口 80 上的出站 TCP 流量返回给发起主机,而无需额外的规则。
  • 对于 Windows 映像,请确保与实例关联的安全组允许入站和出站远程桌面协议流量 (TCP 端口 3389)。

用例

创建安全组规则时,您可以选择允许特定的本地 IP 地址或 CIDR。 与远程属性类似,有一个本地属性可以是下列其中一项:

  • IP 地址-该规则适用于特定目标 IP 地址 (对于入站规则) 或源 IP 地址 (对于出站规则)
  • CIDR-该规则适用于特定目标 CIDR (对于入站规则) 或源 CIDR (对于出站规则)

图 1 显示了具有 local IP 地址的安全组出站规则。 允许从本地 IP 地址 10.243.0.1 到范围 10.243.200.0/24 中的任何远程地址的流量。 绿色数据路径行显示允许的流量; 红线显示不允许的流量。

处理出站流量的安全组规则图
处理出站
的安全组规则*

图 2 描述了具有 local IP 地址的安全组入站规则。 允许从范围 10.243.200.0/24 中的任何远程地址发送到本地 IP 地址 10.243.0.1 的流量。 不允许其他本地 IP 地址的流量。

处理入站流量的安全组规则图
处理入站
的安全组规则*

在控制台中创建安全组规则

您可以在供应安全组期间或之后创建入站和出站规则。

  1. 从浏览器中,打开 IBM Cloud 控制台

  2. 选择导航菜单 菜单图标,然后单击基础架构 > 网络 > 安全组

  3. 从 VPC 表的安全组中,选择下列其中一项:

    • 要在供应新安全组时创建规则,请单击 创建,然后遵循 为资源设置安全组 中的指示信息。
    • 要为现有安全组创建规则,请单击该安全组的名称以查看其“详细信息”页面,然后继续执行步骤 4。
  4. 要创建和管理规则,请选择“规则”选项卡。

  5. 从以下内容中选择一项:

    • 要创建入站规则,请在“入站规则”表上选择 创建,然后填写以下字段。 然后,单击创建

      • 协议-指定要实施的协议 (TCPUDPICMPALL)。
      • Port-指定规则适用的端口。 选择 任意 或指定 端口范围 (最小和最大端口值)。 TCPUDP 的端口值必须是 1 到 65535 之间的数字。 ICMP 的有效端口值从 0 到 254。
      • 源类型 - 选择此规则允许流量的网络接口集。 您可以为入站允许的流量选择 任何IP 地址CIDR 块。 或者,可以在同一 VPC 中指定安全组,以允许连接到所选安全组的所有实例的进出流量。
      • 目标类型-选择 任何IP 地址CIDR 块
    • 要创建出站规则,请在“出站规则”表上选择 创建,然后填写以下字段。 然后,单击创建

      • 协议-指定要实施的协议 (TCPUDPICMPALL)。
      • Port-指定规则适用的端口。 选择 任意 或指定 端口范围 (最小和最大端口值)。 TCPUDP 的端口值必须是 1 到 65535 之间的数字。 ICMP 的有效端口值从 0 到 254。
      • 目标类型-选择 任何IP 地址CIDR 块安全组
      • 源类型-选择 任何IP 地址CIDR 块

从 CLI 创建安全组规则

要使用 CLI 创建安全组规则 (入站和出站),请输入以下命令。

ibmcloud is security-group-rule-add GROUP DIRECTION PROTOCOL [--vpc VPC] [--local LOCAL_ADDRESS | CIDR_BLOCK] [--remote REMOTE_ADDRESS | CIDR_BLOCK | SECURITY_GROUP] [--icmp-type ICMP_TYPE [--icmp-code ICMP_CODE]] [--port-min PORT_MIN] [--port-max PORT_MAX] [--output JSON] [-q, --quiet]

其中:

GROUP
安全组的标识或名称。
DIRECTION
要强制实施的流量方向。 其中一个: inboundoutbound
PROTOCOL
规则适用的协议。 tcpudpicmpall 之一。
--vpc
VPC 的标识或名称。 该选项仅用于在该 VPC 中指定唯一资源的名称。
--local
本地 IP 地址或本地 IP 地址范围,该规则允许向其输入流量(或允许从其输出流量)。 可以指定为 IP 地址或 CIDR 块。 之一:LOCAL_ADDRESS, CIDR_BLOCK0.0.0.0/0 的 CIDR 块允许向所有本地 IP 地址传输流量(对于出站规则,则允许从所有本地 IP 地址传输流量)。
--remote
此规则允许流量的网络接口集合。 它可以指定为 REMOTE_ADDRESSCIDR_BLOCKSECURITY_GROUP。 如果未指定,则允许来自任何源的流量(对于出站规则,则允许流向任何源)。
--icmp-type
要允许的 ICMP 流量类型。 有效值为 0254。 该选项仅在协议设置为 icmp 时指定。 如果未指定,将允许所有类型。
--icmp-code
要允许的 ICMP 流量代码。 有效值为 0255。 仅当协议设置为 ICMP 时,才可指定此选项。 如果未指定,将允许所有代码。
-port-min
最小端口号。 有效值为 165535。 只有当协议设置为 tcpudp 时,才能指定该选项。 如果未指定,则允许使用所有端口(默认值:1 )。
--port-max
最大端口号。 有效值为 165535。 只有当协议设置为 tcpudp 时,才能指定该选项。 如果未指定,则允许使用所有端口(默认值:65535 )。
--output
输出格式。 JSON 之一。
--q, --quiet
禁止详细输出。

CLI 示例

  • ibmcloud is security-group-rule-add 72b27b5c-f4b0-48aa-b954-5becc7c1dcb3 inbound all
  • ibmcloud is security-group-rule-add my-sg inbound all
  • ibmcloud is security-group-rule-add my-sg inbound all --vpc my-vpc
  • ibmcloud is security-group-rule-add 72b27b5c-f4b0-48aa-b954-5becc7c1dcb3 inbound icmp --icmp-type 8 --icmp-code 0
  • ibmcloud is security-group-rule-add 72b27b5c-f4b0-48aa-b954-5becc7c1dcb3 inbound all --remote 12.3.2.4
  • ibmcloud is security-group-rule-add 72b27b5c-f4b0-48aa-b954-5becc7c1dcb3 inbound all --remote 72b27b5c-f4b0-48aa-b954-5becc7c1dcb3
  • ibmcloud is security-group-rule-add my-sg inbound all --remote my-sg
  • ibmcloud is security-group-rule-add 72b27b5c-f4b0-48aa-b954-5beaa7c1dcb3 inbound tcp --port-min 4 --port-max 22 --output JSON
  • ibmcloud is security-group-rule-add --sg 72b27b5c-f4b0-48bb-b954-5beaa7c1dcb3 --direction inbound --protocol all --local 192.176.3.0

使用 API 创建安全组规则

安全组规则 POST 请求接受名为 local 的可选属性,该属性具有两个属性:

address
此规则允许入站流量 (或来自出站规则的入站流量) 的 IP 地址。
cidr_block
此规则允许入站流量的 IP 地址范围 (或用于出站规则的 IP 地址范围)。

如果未指定 local 属性,那么缺省值为 cidr_block: 0.0.0.0/0

您可以使用 API 来创建安全组规则:

  1. 使用正确的变量设置 API 环境

  2. 将安全组标识存储在要在 API 命令中使用的变量中:

    export security_group_id=<security_group_id>
    
  3. 要创建允许从远程地址范围 10.1.2.0/24 到本地 IP 地址 192.168.1.100 的入站 TCP 流量的安全组规则,请运行以下命令:

       curl -sX POST "$vpc_api_endpoint/v1/security_groups/$security_group_id/rules?version=$version&generation=2" \
         -H "Authorization: Bearer ${iam_token}" \
         -d '{
               "direction": "inbound",
               "local": {
                 "address": "192.168.1.100"
               }
               "protocol": "tcp",
               "remote": {
                 "cidr_block": "10.1.2.0/24"
               }
             }'
    

    样本输出:

    {
      "direction": "inbound",
      "href": "https://us-south.iaas.cloud.ibm.com/v1/security_groups/r006-568b4cc2-b6d1-4ee4-898a-841be283a4cd/rules/r006-8d123cf9-9a4e-48d9-ad5e-dabf1e5b5773",
      "id": "r006-8d123cf9-9a4e-48d9-ad5e-dabf1e5b5773",
      "ip_version": "ipv4",
      "local": {
        "address": "192.168.1.100"
      }
      "protocol": "tcp",
      "remote": {
        "cidr_block": "10.1.2.0/24"
      }
    }
    

使用 Terraform 创建安全组规则

要使用 Terraform,请下载 Terraform CLI 并配置 IBM Cloud 提供者插件。 有关更多信息,请参阅 Terraform 入门

以下 Terraform 示例显示如何创建入站安全组规则。 资源中的 local 参数接受 IP 地址或 CIDR 块,并且还处于数据源 ibm_is_security_group_rulesibm_is_security_group_rule 的响应状态。

resource "ibm_is_security_group_rule" "example2" {
  group     = ibm_is_security_group.example.id
  direction = "inbound"
  remote    = "127.0.0.1"
  local = "192.168.3.0/24"
  udp {
    port_min = 805
    port_max = 807
  }
}