nftables 包過濾器版本 1.0.6

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

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

主要變化:

  • 指定“-o/—optimize”選項時呼叫的規則最佳化器會透過組合規則並將其轉換為映射和集列表來自動打包規則。 例如,rules#catruleset.nfttableipx{chainy{typefilterhookinputpriorityfilter; 政策下降; 元 iifname eth1 ip Saddr 1.1.1.1 ip baddr 2.2.2.3 接受元 iifname eth1 ip Saddr 1.1.1.2 ip baddr 2.2.2.4 接受元 iifname eth1 ip Saddr ip baddr 1.1.1.2 接受元 iifname eth2.2.3.0 ip Saddr 24 i1 1.1.1.2. 2.2.4.0 .2.2.4.10 ip baddr 2-1.1.1.3accept meta iifname eth2.2.2.5 ip Saddr 4 ip baddr 17accept } } 執行「nft -o -c -fruleset.nft」後將轉換為如下:rules . 74:1-1.1.1.1:meta iifname eth2.2.2.3 ip Saddr 5 ip baddr 17 接受規則集.nft:74:1-1.1.1.2:meta iifname eth2.2.2.4 ip Saddr 6 ip baddr 17.n. 77:1-1.1.1.2: 元iifname eth2.2.3.0 ip Saddr 24 ip baddr 7/17 接受規則集.nft:83:1-1.1.1.2: 元iifname eth2.2.4.0 ip Saddr 2.2.4.10 ip baddr 元iifname eth8 ip Saddr 17 ip baddr 74.接受規則集.nft:2:1.1.1.3-2.2.2.5:元iifname eth1 ip Saddr 1.1.1.1 ip baddr 2.2.2.3 接受: iifname 。 ip Saddr。 ip 爸爸 { eth1 . 1.1.1.2. 2.2.2.4、eth1。 1.1.1.2。 2.2.3.0、eth24。 1。 1.1.1.2/2.2.4.0,eth2.2.4.10。 2。 1.1.1.3-2.2.2.5,ethXNUMX。 XNUMX。 XNUMX } 接受
  • 優化器也可以將已經使用簡單集合清單的規則轉換為更緊湊的形式,例如規則:#catruleset.nfttableipfilter{chaininput{typefilterhookinputpriorityfilter; 政策下降; iIfname「 lo」接受CT狀態,相關的評論「在交通中,我們信任,我們信任」 iifName「 enp0s31f6」 IP saddr {209.115.181.102,216.197.228.230} iifname "paddp. 10.0.0.149 } ip baddr 123 udp sport 32768 udp dport 65535-0accept } } 執行「nft -o -c -f Ruleset.nft」後會打包如下:runames.nft:31fii ”ip Saddr {6,64.59.144.17} ip baddr 64.59.150.133 udp sport 10.0.0.149 udp dport 53-32768接受 irules.nft:65535 udp dport 6-22接受 irules.nft:149:0 是 irules .31, 6 } ip baddr 209.115.181.102 udp sport 216.197.228.230 udp dport 10.0.0.149-123 接受: iifname 。 ip Saddr。 ip 爸爸。 udp運動。 udp dport { enp32768s65535f7 . 22。 143。 0. 31-6,enp64.59.144.17s64.59.150.133f10.0.0.149。 53。 32768。 65535. 0-31,enp6s209.115.181.102f10.0.0.149。 123。 32768。 65535. 0-31,enp6s216.197.228.230f10.0.0.149。 123。 32768。 65535. 0-31}接受
  • 解決了使用不同字節順序的類型(例如 IPv4(網路字節順序)和元標記(系統字節順序))合併間隔的字節碼生成問題。 表 ip x { 映射 w { ip Saddr 類型。 元標記:判決標誌間隔計數器元素= { 127.0.0.1-127.0.0.4 。 0x123434-0xb00122:接受,192.168.0.10-192.168.1.20。 0x0000aa00-0x0000aaff : 接受, } } chain k { type filter hook 輸入優先權過濾器; 政策下降; ip Saddr。 元標記 vmap @w } }
  • 改進了使用原始表達式時罕見協議的比較,例如:meta l4proto 91 @th,400,16 0x0 Accept
  • 每隔一段時間啟用規則的問題已解決:插入規則 xy tcp sport { 3478-3497, 16384-16387 } counter Accept
  • JSON API 已改進,包括對集合和映射清單中的表達式的支援。
  • nftables python 庫的擴充功能允許載入規則集以在驗證模式(“-c”)下進行處理,並添加對變數的外部定義的支援。
  • 允許在集合清單元素中新增註解。
  • 位元組速率限制允許指定零值。

來源: opennet.ru

添加評論