IBM Cloud Docs
關於網路 ACL

關於網路 ACL

您可以使用存取控制清單 (ACL) 來控制 IBM Cloud® Virtual Private Cloud中所有送入及送出的資料流量。 ACL 是內建的虛擬防火牆,類似於安全群組。 與安全群組不同的是,ACL 規則控制來_自子網路_的流量,而非來_自實體_的流量。

如需關於安全群組與 ACL 性質的比較,請參閱比較表格

本文件中呈現的範例顯示如何使用 CLI 在 VPC 中建立網路 ACL。 有關如何在 IBM Cloud 主控台設定 ACL 的詳細資訊,請參閱 在主控台設定 ACL

使用 ACL 及 ACL 規則

為了讓您的 ACL 有效,請建立規則來決定如何處理您的入站和出站網路流量。 您可以建立多個入埠和出埠規則。 如需規則配額的相關資訊,請參閱 配額

  • 使用入埠規則,您可以容許或拒絕來源 IP 範圍(具有指定的通訊協定及埠)的資料流量。
  • 使用出埠規則,您可以容許或拒絕目的地 IP 範圍(具有指定的通訊協定及埠)的資料流量。
  • ACL 規則有優先順序,並會依序考慮。 會先評估優先順序較高的規則,並置換優先順序較低的規則。
  • 入埠規則與出埠規則是分開的。
  • 如果未指定任何規則,則 隱含拒絕 是預設行為。

有關在 ACL 規則中使用 ICMP、TCP 和 UDP 協定的更多信息,請參閱 了解互聯網通訊協定

更新 VPC 的預設 ACL 規則

預設 ACL 與任何其他 ACL 相似,但不能刪除。

當您建立 VPC 時,系統會為 VPC 建立預設 ACL,其中包含兩個規則:

  • 命名為 allow-inbound 的規則允許任何來源的入站 ICMP、TCP 和 UDP 流量
  • 命名為 allow-outbound 的規則允許向任何目的地輸出 ICMP、TCP 和 UDP 流量

您可以使用主控台、CLI 或 API 修改預設 ACL 的規則。

如果您編輯預設 ACL 的規則,這些編輯過的規則就會套用到連接至 ACL 的所有目前和未來子網路。

將 ACL 連接至子網路

建立新子網路時,您可以指定要附加的 ACL。 如果您未指定 ACL,則會附加 VPC 的預設網路 ACL。

每個子網路都正好附加一個 ACL。 您可以使用不同的 ACL 取代子網路的 ACL。

ACL 範例

在下列範例中,您建立兩個 ACL,並使用指令行介面 (CLI) 將它們與兩個子網路相關聯。 圖 1 顯示此情境的情況。

顯示 ACL 場景範例的圖
具有兩個子網路的 ACL

如圖 1 所示,您有兩個網路伺服器來處理來自網際網路的請求,還有兩個後端伺服器,您希望將它們隱藏起來,不對外公開。 在這個範例中,您將伺服器放置在兩個獨立的子網路 10.10.10.0/2410.10.20.0/24 中,並且需要允許網路伺服器與後端伺服器交換資料。 此外,您希望允許來自後端伺服器的有限出站流量。

範例規則

接下來的範例規則顯示如何設定基本方案的 ACL 規則。

作為最佳做法,給予細粒度規則比粗粒度規則更高的優先順序。 例如,您有一個規則會封鎖來自子網路 10.10.30.0/24 的所有資料流量。 如果指派較高優先順序給它,則絕不會套用優先順序較低且容許來自 10.10.30.5 的資料流量的任何細部規則。

ACL-1 範例規則

ACL-1的規則範例
入埠/出埠 容許/拒絕 來源 IP 目的地 IP 通訊協定 說明
入埠 容許 0.0.0.0/0 0.0.0.0/0 TCP 80 容許來自網際網路的 HTTP 資料流量
入埠 容許 0.0.0.0/0 0.0.0.0/0 TCP 443 容許來自網際網路的 HTTPS 資料流量
入埠 容許 10.10.20.0/24 0.0.0.0/0 全部 全部 允許所有來自後端伺服器所在子網路 10.10.20.0/24 的入站流量
入埠 拒絕 0.0.0.0/0 0.0.0.0/0 全部 全部 拒絕所有其他入埠資料流量
出埠 容許 0.0.0.0/0 0.0.0.0/0 TCP 80 容許送往網際網路的 HTTP 資料流量
出埠 容許 0.0.0.0/0 0.0.0.0/0 TCP 443 容許傳送至網際網路的 HTTPS 資料流量
出埠 容許 0.0.0.0/0 10.10.20.0/24 全部 全部 允許所有出站流量到放置後端伺服器的子網路 10.10.20.0/24
出埠 拒絕 0.0.0.0/0 0.0.0.0/0 全部 全部 拒絕所有其他出埠資料流量

ACL-2 範例規則

ACL-2的規則範例
入埠/出埠 容許/拒絕 來源 IP 目的地 IP 通訊協定 說明
入埠 容許 10.10.10.0/24 0.0.0.0/0 全部 全部 允許所有來自放置網路伺服器的子網路 10.10.10.0/24 的入站流量
入埠 拒絕 0.0.0.0/0 0.0.0.0/0 全部 全部 拒絕所有其他入埠資料流量
出埠 容許 0.0.0.0/0 0.0.0.0/0 TCP 80 容許送往網際網路的 HTTP 資料流量
出埠 容許 0.0.0.0/0 0.0.0.0/0 TCP 443 容許傳送至網際網路的 HTTPS 資料流量
出埠 容許 0.0.0.0/0 10.10.10.0/24 全部 全部 允許所有出站流量到放置網路伺服器的子網路 10.10.10.0/24
出埠 拒絕 0.0.0.0/0 0.0.0.0/0 全部 全部 拒絕所有其他出埠資料流量

此範例僅說明一般情況。 在您的使用情境中,您可能想要對流量進行更仔細的控制:

  • 您可能有一位網路管理員,需要從遠端網路存取 10.10.10.0/24 子網路以進行作業。 在這種情況下,您需要允許 SSH 流量從網際網路進入此子網路。
  • 您可能想要縮小兩個子網路之間容許的通訊協定範圍。

範例步驟

下列範例步驟會跳過使用 CLI 來建立 VPC(必須先完成)的必要步驟。 如需相關資訊,請參閱 使用 CLI 來建立 VPC 資源

步驟 1. 建立 ACL

使用下列 CLI 指令來建立兩個 ACL (名為 my_web_subnet_aclmy_backend_subnet_acl):

ibmcloud is network-acl-create my-web-subnet-acl $vpc_id --source-acl-id $old_acl_id
ibmcloud is network-acl-create my-backend-subnet-acl $vpc_id --source-acl-id $old_acl_id

回應包括新建立的 ACL ID。 儲存這兩個 ACL 的 ID,以供稍後的指令使用。 您可以使用命名為 webaclbkacl 的變數,就像這樣:

webacl="0738-ba9e785a-3e10-418a-811c-56cfe5669676"
bkacl="0738-a4e28308-8ee7-46ab-8108-9f881f22bdbf"

步驟 2. 擷取預設 ACL 規則

新增規則之前,請擷取預設的入站和出站 ACL 規則,以便在這些規則之前插入新規則。

ibmcloud is network-acl-rules $webacl
ibmcloud is network-acl-rules $bkacl

此回應顯示預設入埠及出埠規則,其容許所有通訊協定中的所有 IPv4 資料流量。

Getting rules of network acl ba9e785a-3e10-418a-811c-56cfe5669676 under account Demo Account as user demouser...

inbound
ID                                     Name                                                          Action   IPv*   Protocol   Source      Destination   Created
0738-e2b30627-1a1d-447b-859f-ac9431986b6f   allow-all-inbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

outbound
ID                                     Name                                                         Action   IPv*   Protocol   Source      Destination   Created
0738-173a3492-0544-472e-91c0-7828cbcb62d4   allow-all-outbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

將這兩個 ACL 規則的 ID 儲存為變數,以便您可以在稍後的指令中使用這些值。 例如,您可以將 ID 儲存在變數 inruleoutrule 中:

inrule="0738-e2b30627-1a1d-447b-859f-ac9431986b6f"
outrule="0738-173a3492-0544-472e-91c0-7828cbcb62d4"

步驟 3. 依照說明新增 ACL 規則

在此範例中,先新增入埠規則,然後新增出埠規則。

在預設入埠規則之前插入新的入埠規則。

ibmcloud is network-acl-rule-add my_web_acl_rule200 $webacl deny inbound all 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $in-rule

在每個步驟中,將 ACL 規則的 ID 儲存在變數中,以便 ID 可以用在稍後的指令中。 例如,您可以使用變數 acl200

acl200="0738-90930627-1a1d-447b-859f-ac9431986b6f"

現在,即會將規則新增至 acl200

ibmcloud is network-acl-rule-add my_web_acl_rule100 $webacl allow inbound all 10.10.20.0/24 0.0.0.0/0 \
--before-rule-id $acl200

新增更多規則直到您的 ACL 設定完成為止,將每個 ID 儲存為變數。

acl100="0738-78340627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-min 443 --source-port-max 443 --before-rule-id $acl100
acl20="32450627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20

在預設出埠規則之前插入新的出埠規則。

ibmcloud is network-acl-rule-add my_web_acl_rule200e $webacl deny outbound all 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $outrule
acl200e="11110627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule100e $webacl allow outbound all 0.0.0.0/0 10.10.20.0/24 \
--before-rule-id $acl200e
acl100e="22220627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 443 --source-port-min 443 --before-rule-id $acl100e
acl20e="33330627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20e

步驟 4. 使用新建立的 ACL 建立兩個子網路

建立兩個子網路,讓您的每個 ACL 都與其中一個新子網路相關聯。

ibmcloud is subnet-create my-web-subnet $vpc_id $zone --ipv4_cidr_block 10.10.10.0/24 \
 --network-acl-id $webacl
ibmcloud is subnet-create my-backend-subnet$vpc_id $zone --ipv4_cidr_block 10.10.20.0/24 \
--network-acl-id $bkacl

指令清單提要

若要顯示 ACL 可用 VPC CLI 指令的完整清單,請執行下列指令:

ibmcloud is network-acls

檢視您的 ACL 及其元資料,包括規則:

ibmcloud is network-acl $webacl

若要列出所有 ACL 規則,請執行下列動作:

ibmcloud is network-acl-rules $webacl

入埠 ping 規則範例

若要新增 ACL 規則,以下的範例指令會在預設入埠規則之前新增 ping 入埠規則:

語法:

ibmcloud is network-acl-rule-add ACL ACTION DIRECTION PROTOCOL SOURCE DESTINATION [--name NAME] [--icmp-type ICMP_TYPE] [--icmp-code ICMP_CODE] [--source-port-min PORT_MIN] [--source-port-max PORT_MAX] [--destination-port-min PORT_MIN] [--destination-port-max PORT_MAX] [--before-rule-id RULE_ID] [--output JSON] [-q, --quiet]

範例:

ibmcloud is network-acl-rule-add 72b27b5c-f4b0-48bb-b954-5becc7c1dcb3 allow inbound icmp 10.2.2.2 10.2.2.3 --icmp-type 8 --icmp-code 0