nftables 包過濾器版本 1.0.0

封包過濾器 nftables 1.0.0 版本已發布,統一了 IPv4、IPv6、ARP 和橋接器的封包過濾介面(旨在取代 iptables、ip6table、a​​rptables 和 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 到 ip Saddr 映射 { 10.141.11.4 : 192.168.2.2-192.168.2.4 } 或明確 IP 位址和連接埠: ... dnat 到 ip Saddr 映射 { 10.141.11.4位址和連接埠: ... dnat 到 ip Saddr 映射 { 192.168.2.3位址和連接埠: ... dnat 到 ip Saddr 映射 { 80位址和連接埠: ... d192.168.1.2. 。 80 } 或 IP 範圍和連接埠的組合: ... dnat 到 ip Saddr 。 tcp dport 映射 { 10.141.10.2 。 10.141.10.5:8888-8999。 XNUMX-XNUMX}

來源: opennet.ru

添加評論