nftables 1.0.2 版本已發布,它是一個統一了 IPv4、IPv6、ARP 和網路橋接封包過濾介面的封包過濾框架(旨在替代 iptables、ip6table、arptables 和 ebtables)。 nftables 1.0.2 所需的變更已合併至核心。 Linux 5.17-rc。
nftables 軟體包包含在用戶空間運行的資料包過濾元件,而核心級工作由核心的一部分 nf_tables 子系統提供。 Linux 自 3.13 版本以來,核心層級僅提供了一個通用的、與協定無關的接口,提供從資料包中提取資料、執行資料操作和流量控制的基本功能。
過濾規則本身和協定特定的處理程序在使用者空間被編譯成字節碼,之後該字節碼透過 Netlink 介面載入到核心中,並在核心中以特殊方式執行。 虛擬機這與伯克利數據包過濾器(BPF)類似。這種方法可以顯著減少核心級過濾程式碼的大小,並將所有規則解析和協定邏輯移至使用者空間。
主要創新:
- 新增了規則最佳化模式,透過新的「-o」(「--optimize」)選項啟用,該選項可以與「--check」選項結合使用,以檢查和最佳化規則集檔案的更改,而無需實際載入它。最佳化允許您組合類似的規則,例如,規則: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.5 cept accept ip saddr 1.1.1.1 ip daddr 2.2.2.2 drop
將被合併到 meta iifname 中。 ip saddr。 ip daddr { eth1 . 1.1.1.1。 2.2.2.3,eth1。 1.1.1.2. 2.2.2.5 } 接受 ip saddr 。 ip daddr vmap { 1.1.1.1 . 2.2.2.2 :接受,2.2.2.2 。 3.3.3.3 :刪除 }
使用範例:# nft -c -o -f ruleset.test 合併:ruleset.nft:16:3-37: ip daddr 192.168.0.1 counter accept ruleset.nft:17:3-37: ip daddr 192.168.0.2.accept ruleset.nft:18:3-37: ip daddr 192.168.0.3 192.168.0.1:192.168.0.2-192.168.0.3: ip daddr 0. 0 counter accept 合併為:ip daddr { XNUMX, XNUMX, XNUMX } counter packages XNUMX bytes XNUMX accept
- 設定清單現在支援指定 ip 和 tcp 選項以及 sctp 區塊:set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp chunk init num-inbound-streams elements = { 1, 4 valain 5 sctp chunk init num-inbound-streams @s5 accept }
- 新增了對 TCP 選項 fastopen、md5sig 和 mptcp 的支援。
- 增加了在映射中使用 mp-tcp 子類型的支援:tcp 選項 mptcp 子類型 1
- 改進了核心端過濾程式碼。
- Flowtable 現在完全支援 JSON 格式。
- 允許在乙太網路幀匹配操作中使用「拒絕」操作。以太 saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 拒絕
來源: opennet.ru
