關於網路 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 顯示此情境的情況。
如圖 1 所示,您有兩個網路伺服器來處理來自網際網路的請求,還有兩個後端伺服器,您希望將它們隱藏起來,不對外公開。 在這個範例中,您將伺服器放置在兩個獨立的子網路 10.10.10.0/24
和 10.10.20.0/24
中,並且需要允許網路伺服器與後端伺服器交換資料。 此外,您希望允許來自後端伺服器的有限出站流量。
範例規則
接下來的範例規則顯示如何設定基本方案的 ACL 規則。
作為最佳做法,給予細粒度規則比粗粒度規則更高的優先順序。 例如,您有一個規則會封鎖來自子網路 10.10.30.0/24
的所有資料流量。 如果指派較高優先順序給它,則絕不會套用優先順序較低且容許來自 10.10.30.5
的資料流量的任何細部規則。
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 範例規則
入埠/出埠 | 容許/拒絕 | 來源 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_acl
及 my_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,以供稍後的指令使用。 您可以使用命名為 webacl
和 bkacl
的變數,就像這樣:
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 儲存在變數 inrule
和 outrule
中:
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