将安全组规则应用于源 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 地址的流量。
在控制台中创建安全组规则
您可以在供应安全组期间或之后创建入站和出站规则。
-
从浏览器中,打开 IBM Cloud 控制台。
-
选择导航菜单
,然后单击基础架构 > 网络 > 安全组。
-
从 VPC 表的安全组中,选择下列其中一项:
- 要在供应新安全组时创建规则,请单击 创建,然后遵循 为资源设置安全组 中的指示信息。
- 要为现有安全组创建规则,请单击该安全组的名称以查看其“详细信息”页面,然后继续执行步骤 4。
-
要创建和管理规则,请选择“规则”选项卡。
-
从以下内容中选择一项:
-
要创建入站规则,请在“入站规则”表上选择 创建,然后填写以下字段。 然后,单击创建。
- 协议-指定要实施的协议 (TCP,UDP,ICMP 或 ALL)。
- Port-指定规则适用的端口。 选择 任意 或指定 端口范围 (最小和最大端口值)。 TCP 和 UDP 的端口值必须是 1 到 65535 之间的数字。 ICMP 的有效端口值从 0 到 254。
- 源类型 - 选择此规则允许流量的网络接口集。 您可以为入站允许的流量选择 任何,IP 地址或 CIDR 块。 或者,可以在同一 VPC 中指定安全组,以允许连接到所选安全组的所有实例的进出流量。
- 目标类型-选择 任何,IP 地址或 CIDR 块。
-
要创建出站规则,请在“出站规则”表上选择 创建,然后填写以下字段。 然后,单击创建。
- 协议-指定要实施的协议 (TCP,UDP,ICMP 或 ALL)。
- Port-指定规则适用的端口。 选择 任意 或指定 端口范围 (最小和最大端口值)。 TCP 和 UDP 的端口值必须是 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
- 要强制实施的流量方向。 其中一个:
inbound
,outbound
。 PROTOCOL
- 规则适用的协议。
tcp
,udp
,icmp
或all
之一。 --vpc
- VPC 的标识或名称。 该选项仅用于在该 VPC 中指定唯一资源的名称。
--local
- 本地 IP 地址或本地 IP 地址范围,该规则允许向其输入流量(或允许从其输出流量)。 可以指定为 IP 地址或 CIDR 块。 之一:
LOCAL_ADDRESS
,CIDR_BLOCK
。0.0.0.0/0
的 CIDR 块允许向所有本地 IP 地址传输流量(对于出站规则,则允许从所有本地 IP 地址传输流量)。 --remote
- 此规则允许流量的网络接口集合。 它可以指定为
REMOTE_ADDRESS
、CIDR_BLOCK
或SECURITY_GROUP
。 如果未指定,则允许来自任何源的流量(对于出站规则,则允许流向任何源)。 --icmp-type
- 要允许的 ICMP 流量类型。 有效值为
0
至254
。 该选项仅在协议设置为icmp
时指定。 如果未指定,将允许所有类型。 --icmp-code
- 要允许的 ICMP 流量代码。 有效值为
0
至255
。 仅当协议设置为 ICMP 时,才可指定此选项。 如果未指定,将允许所有代码。 -port-min
- 最小端口号。 有效值为
1
至65535
。 只有当协议设置为tcp
或udp
时,才能指定该选项。 如果未指定,则允许使用所有端口(默认值:1
)。 --port-max
- 最大端口号。 有效值为
1
至65535
。 只有当协议设置为tcp
或udp
时,才能指定该选项。 如果未指定,则允许使用所有端口(默认值: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 来创建安全组规则:
-
使用正确的变量设置 API 环境。
-
将安全组标识存储在要在 API 命令中使用的变量中:
export security_group_id=<security_group_id>
-
要创建允许从远程地址范围
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_rules
和 ibm_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
}
}