封包過濾器 nftables 1.0.0 版本已發布,統一了 IPv4、IPv6、ARP 和橋接器的封包過濾介面(旨在取代 iptables、ip6table、arptables 和 ebtables)。 Linux 1.0.0 核心中包含 nftables 5.13 版本正常運作所需的變更。版本號的重大變化與任何根本性變化無關,而只是十進制計數方式一致延續的結果(之前的版本是 0.9.9)。
nftables 軟體包包括在用戶空間中運行的資料包過濾器元件,而核心級工作由 nf_tables 子系統提供,該子系統自 3.13 版本以來一直是 Linux 核心的一部分。 核心層僅提供通用的與協定無關的接口,提供從資料包中提取資料、執行資料操作和流量控制的基本功能。
過濾規則本身和協定特定的處理程序在使用者空間被編譯成字節碼,之後該字節碼透過 Netlink 介面載入到核心中,並在核心中以特殊方式執行。 虛擬機這與伯克利數據包過濾器(BPF)類似。這種方法可以顯著減少核心級過濾程式碼的大小,並將所有規則解析和協定邏輯移至使用者空間。
主要創新:
- 對「*」遮罩元素的支援已新增至集合清單中,對於不屬於集合中定義的其他元素的任何套件都會觸發該支援。 table x { map blocklist { type ipv4_addr : 判決標誌間隔 elements = { 192.168.0.0/16 : 接受, 10.0.0.0/8 : 接受, * : drop } } chain y { 類型過濾器鉤子預先路由優先權 0 } };政策接受; ip Saddr vmap @blocklist } }
- 可以使用“--define”選項從命令列定義變數。 # cat test.nft table netdev x { chain y { 類型過濾器鉤子入口裝置 = $dev 優先權 0;政策下降; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
- 在映射清單中,允許使用常數(有狀態)表達式: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packet 0 bytes 0 : Jump ssh_input, * counter packet 0 bytes 0 : Jump ssh_input, * counter packet XNUMX by XNUMX chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain 預先路由{ type filter hook 預先路由優先權raw;政策接受; iif vmap { "lo" : 跳轉 wan_input } } }
- 新增了「list hooks」指令來顯示給定資料包系列的處理程序清單: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300, mookw [wook input { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } 鉤子轉接 { -0000000225 selinux_ipv4_forward 0000000000 0000000225_output } 鉤子後路由 { +4 0000000225 selinux_ipv4_postroute } }
- 佇列區塊允許組合 jhash、symhash 和 numgen 表達式,將資料包分發到使用者空間中的佇列。 ...隊列到 symhash mod 65536 ...隊列標誌旁路到 numgen inc mod 65536 ...隊列到 jhash oif 。 meta mark mod 32“queue”也可以與映射清單結合使用,以根據任意鍵選擇使用者空間中的佇列。 ……佇列標誌繞過 oifname 映射 { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
- 可以將包含集合清單的變數擴展為多個映射。定義介面 = { eth0, eth1 } 表 ip x { 鏈 y { 類型過濾器鉤子輸入優先權 0;政策接受; iifname vmap { lo : Accept, $interfaces : drop } } } # nft -f x.nft # nft 清單規則集表 ip x { chain y { type 過濾器鉤子 輸入優先權 0;政策接受; iifname vmap { "lo" : 接受, "eth0" : 丟棄, "eth1" : 丟棄 } } }
- 允許以一定時間間隔組合 vmap(判定圖): # nft add Rule xy tcp dport 。 ip Saddr vmap { 1025-65535 。 192.168.10.2:接受}
- NAT 映射的語法已簡化。現在允許指定位址範圍:… snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } 或明確指定位址範圍 IP位址 以及連接埠:… dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } 或 IP 位址範圍和連接埠的組合:… dnat to ip saddr . tcp dport map { 192.168.1.2 . 10.141.10.2-10.141.10.5 . 8888-8999 }
來源: opennet.ru
