nftables 包過濾器版本 1.0.7

nftables 1.0.7 數據包過濾器版本已發布,統一了 IPv4、IPv6、ARP 和網橋的數據包過濾接口(旨在取代 iptables、ip6table、a​​rptables 和 ebtables)。 nftables 軟件包包括在用戶空間中運行的數據包過濾器組件,而內核級別由 nf_tables 子系統提供,該子系統自 3.13 版本以來一直是 Linux 內核的一部分。 在內核層面,僅提供通用的與協議無關的接口,提供從數據包中提取數據、對數據執行操作以及控制流量的基本功能。

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

主要變化:

  • 對於Linux 6.2+內核系統,添加了對vxlan、geneve、gre和gretap協議匹配的支持,允許簡單的表達式檢查封裝數據包中的標頭。 例如,要檢查來自 VxLAN 的嵌套數據包標頭中的 IP 地址,您現在可以使用規則(無需首先解封裝 VxLAN 標頭並將過濾器綁定到 vxlan0 接口): ... udp dport 4789 vxlan ip 協議 udp ... udp dport 4789 vxlan ip Saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip Saddr . vxlan ip baddr { 1.2.3.4 . 4.3.2.1}
  • 實現了對部分刪除集合列表元素後殘差的自動合併的支持,這允許從現有範圍中刪除元素或範圍的一部分(以前,範圍只能全部刪除)。 例如,從範圍為 25-24 和 30-40 的集合列表中刪除元素 50 後,24、26-30 和 40-50 將保留在列表中。 自動合併工作所需的修復將在內核 5.10+ 穩定分支的糾正版本中提供。 # nft 列表規則集表 ip x { set y { typeof tcp dport flags 間隔自動合併 elements = { 24-30, 40-50 } } } # nft 刪除元素 ip xy { 25 } # nft 列表規則集表 ip x { set y { typeof tcp dport 標誌間隔自動合併元素 = { 24, 26-30, 40-50 } } }
  • 允許在地址轉換 (NAT) 映射中使用聯繫人和範圍。 表 ip nat { 鏈預路由 { 類型 nat hook 預路由優先級 dstnat; 政策接受; dnat 到 ip baddr 。 tcp dport 映射 { 10.1.1.136 . 80:1.1.2.69。 1024、10.1.1.10-10.1.1.20。 8888-8889:1.1.2.69。 2048-2049 } 堅持 } }
  • 添加了對“last”表達式的支持,它允許您找出最後一次使用規則元素或集列表的時間。 從 Linux 內核 5.14 開始就支持該功能。 表 ip x { 設置 y { ip baddr 類型。 tcp dport size 65535 flags dynamic,timeout 最後超時 1h } chain z { type filter hook 輸出優先級過濾器; 政策接受; 更新@y { ip baddr . tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip baddr . tcp dport 大小 65535 標誌動態,超時最後超時 1h 元素 = { 172.217.17.14 . 443 最後使用 1s591ms 超時 1h 過期 59m58s409ms, 172.67.69.19 。 443 最後使用 4s636ms 超時 1h 過期 59m55s364ms, 142.250.201.72 。 443 最後使用 4s748ms 超時 1h 過期 59m55s252ms, 172.67.70.134 。 443 最後使用 4s688ms 超時 1h 過期 59m55s312ms, 35.241.9.150 。 443 最後使用 5s204ms 超時 1h 過期 59m54s796ms, 138.201.122.174 。 443 最後使用 4s537ms 超時 1h 過期 59m55s463ms, 34.160.144.191 。 443 最後使用 5s205ms 超時 1h 過期 59m54s795ms, 130.211.23.194 。 443 最後使用 4s436ms 超時 1h 過期 59m55s564ms } } }
  • 添加了在設置列表中定義配額的功能。 例如,要為每個目標 IP 地址定義流量配額,您可以指定: table netdev x { set y { typeof ip baddr size 65535quota over 10000 MB } chain y { type filter hook egress device "eth0"priority filter; 政策接受; ip baddr @y drop } } # nft 添加元素 inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft 列表規則集表 netdev x { set y { 輸入 ipv4_addr 大小 65535 超過 10000 MB 的配額 elements = { 8.8.8.8. 10000 配額超過 196 MB,使用 0 字節 } } chain y { type filter hook egress device "ethXNUMX" 優先級過濾器; 政策接受; ip baddr @y drop } }
  • 允許在集合列表中使用常量。 例如,當使用目標地址和 VLAN ID 列表作為鍵時,可以直接指定 VLAN 編號 (daddr . 123): table netdev t { set s { typeof ether Saddr . 2048 。 vlan id 大小 1 標誌動態,超時超時 0m } chain c { 類型過濾器掛鉤入口設備 eth0 優先級 8021; 政策接受; 以太類型!= 123q 更新@s { 以太daddr 。 XNUMX} 計數器 } }
  • 添加了新的“destroy”命令來無條件刪除對象(與刪除命令不同,它在嘗試刪除丟失的對象時不會生成 ENOENT)。 至少需要 Linux 6.3-rc 內核才能工作。 銷毀表 ip 過濾器

來源: opennet.ru

添加評論