nftables 包過濾器版本 0.9.9

封包過濾器 nftables 0.9.9 版本已經發布,統一了 IPv4、IPv6、ARP 和橋接器的封包過濾介面(旨在取代 iptables、ip6table、a​​rptables 和 ebtables)。 同時,發布了配套庫 libnftnl 1.2.0,提供了用於與 nf_tables 子系統互動的低階 API。 Linux 核心 0.9.9-rc5.13 中包含 nftables 1 版本正常運作所需的變更。

nftables 軟體包包括在用戶空間中運行的資料包過濾器元件,而核心級工作由 nf_tables 子系統提供,該子系統自 3.13 版本以來一直是 Linux 核心的一部分。 核心層僅提供通用的與協定無關的接口,提供從資料包中提取資料、執行資料操作和流量控制的基本功能。

過濾規則本身和特定於協議的處理程序被編譯成用戶空間字節碼,之後使用 Netlink 接口將該字節碼加載到內核中,並在類似於 BPF(伯克利數據包過濾器)的特殊虛擬機中的內核中執行。 這種方法可以顯著減少在內核級別運行的過濾代碼的大小,並將所有解析規則的功能和處理協議的邏輯移至用戶空間。

主要創新:

  • 使用「卸載」標誌啟用將可流處理移至網路適配器端的能力已經實現。 Flowtable是一種最佳化資料包重新導向路徑的機制,其中所有規則處理鏈的完整通過僅應用於第一個資料包,流中的所有其他資料包都直接轉送。 table ip global { flowtable f { hook 入口優先權過濾器 + 1 devices = { lan3, lan0, ​​wan } flags offload } chainforward { type filter hook 轉送優先權過濾器; 政策接受; ip 協定 { tcp, udp } flow add @f } chain post { type nat hook 後路由優先權過濾器; 政策接受; oifname「wan」偽裝 } }
  • 新增了將擁有者標誌附加到表格的支持,以確保進程獨佔使用該表。 當進程終止時,與其關聯的表將自動刪除。 有關進程的資訊以註解的形式顯示在規則轉儲中: table ip x { # progname nft flags Owner chain y { type filter hook inputpriority filter; 政策接受; 計數器封包 1 位元組 309 } }
  • 新增了對 IEEE 802.1ad 規範(VLAN 堆疊或QinQ)的支持,該規範定義了將多個 VLAN 標記替換為單一乙太網路訊框的方法。 例如,要檢查外部乙太網路訊框類型8021ad且vlan id=342,可以使用構造... ether type 802.1ad vlan id 342來檢查外部乙太網路訊框類型8021ad/vlan id=1,嵌套802.1 q/vlan id =2 並進一步封裝IP 封包: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • 新增了使用統一層次結構 cgroups v2 管理資源的支援。 cgroups v2 和 v1 之間的主要區別在於,對所有類型的資源使用通用的 cgroups 層次結構,而不是使用單獨的層次結構來分配 CPU 資源、調節記憶體消耗和 I/O。 例如,要檢查第一級 cgroupv2 的套接字的祖先是否與“system.slice”掩碼匹配,可以使用以下構造: ... socket cgroupv2 level 1 “system.slice”
  • 新增了檢查 SCTP 封包組件的功能(此功能所需的功能將出現在 Linux 核心 5.14 中)。 例如,要檢查封包是否包含類型為「data」和欄位為「type」的區塊: ... sctp chunk data 存在 ... sctp chunk data type 0
  • 使用“-f”標誌,規則載入操作的執行速度加快了大約兩倍。 規則清單的輸出也加快了。
  • 提供了一種用於檢查標誌位是否被設定的緊湊形式。 例如,要檢查 snat 和 dnat 狀態位是否未設置,您可以指定: ... ct status ! snat,dnat 檢查位元遮罩 syn,ack 中是否設定了 syn 位元: ... tcp 標誌 syn / syn,ack 檢查位元遮罩 syn,ack,fin,rst 是否未設定 fin 和 rst 位元: ... tcp 標誌!= fin,rst / syn,ack,fin,rst
  • 允許在 set/map typeof 定義中使用「verdict」關鍵字: add map xm { typeof iifname . IP協定th dport:判決;}

來源: opennet.ru

添加評論