在 NVIDIA (Cumulus Linux) 生態系中,存取控制串列(ACL)是管理流量、保護控制層與提升效能的核心元件。以下將從架構、與 iptables 的關係、使用方式與資料流、狀態機制,以及使用限制來為你全面解析。
在 Cumulus Linux 中,ACL 主要用於在 OSI 模型的第 2、3 和 4 層對封包進行分類與過濾。它的架構基於 Linux 核心的過濾機制。下圖顯示了封包從進入到輸出的流程:Prerouting -> 路由決定 -> (Input -> 控制平面軟體 -> Output) / Forward -> Postrouting

-t mangle (Table) -A PREROUTING (Chain) -p tcp --dport 22 (Matches) -j (Jump) DSCP --set-dscp 46 (Targets)

每個表都有一組預設鏈,這些鏈在通過交換器的路徑的不同點修改或檢查封包。鏈包含影響流量的個別規則。在架構上,Cumulus 5.0 以後的版本,將硬體轉發(Transit)的 Ingress(入站)ACL 規則放在 -t mangle -A PREROUTING 鏈中,而 Egress(出站)ACL 則放在 -t mangle -A POSTROUTING 鏈中。
Cumulus Linux 是基於 Linux 的作業系統,其 ACL 語法完全相容於 Linux 的使用者空間工具:iptables (IPv4)、ip6tables (IPv6) 和 ebtables (Layer 2 MAC)。
絕對不要直接使用 iptables 指令來設定資料層(Data Plane)的轉發規則。如果直接下達 iptables -A INPUT ...,該規則只會存在於 Linux Kernel 中,無法被硬體加速 (Hardware Accelerated),交換器的 ASIC 晶片不會生效。
在 NVIDIA 交換器上,必須透過 NVUE 或 cl-acltool 進行配置。這些工具會將規則寫入 /etc/cumulus/acl/policy.d/ 等目錄中,並透過 switchd 這個硬體抽象層守護行程 (Daemon),將 Linux Kernel 的設定同步燒錄到 Spectrum ASIC 底層的 TCAM / ATCAM 記憶體中,藉此實現線速 (Wire-speed) 轉發。如果執行 cl-acltool -i 進行重載,系統會清空所有不在 policy 設定檔內的 iptables 規則。
在防火牆與 ACL 的概念中
ESTABLISHED, RELATED 狀態)。在 Cumulus Linux 的支援情況
match ip connection-state new 或 established 這種 Stateful 的比對機制。下圖可以看到 1 和 2 貫穿交換器屬於資料平面;3 和 4 屬於控制平面。

在使用 Cumulus Linux 的 ACL 時,請注意以下架構限制:
No More Resources 的硬體寫入錯誤。iptables 功能都能寫入硬體。例如:不支援 Inverse matching (反向比對,如 ! -p tcp)、不支援基於 UID 的 LOG 功能,以及部分 Extended targets。bond (Port-channel) 介面進行比對,你只能把規則套用到組成 Bond 的實體成員介面上。swp49s1.100) 將無法成功比對,只能套用於主要實體埠。