nftables 包過濾器版本 0.9.4

發表 數據包過濾器釋放 nftables 0.9.4,它通過統一 IPv6、IPv4、ARP 和網橋的包過濾接口,正在發展成為 iptables、ip6table、a​​rptables 和 ebtables 的替代品。 nftables 包包括在用戶空間中運行的數據包過濾器組件,而內核級別由 nf_tables 子系統提供,它自 3.13 版以來一直是 Linux 內核的一部分。 發布 nftables 0.9.4 所需的更改包含在未來的內核分支中 Linux 5.6.

在內核層,只提供了一個通用的協議無關接口,提供從數據包中提取數據、對數據進行操作和控制流量的基本功能。 過濾規則本身和特定於協議的處理程序被編譯成用戶空間字節碼,之後使用 Netlink 接口將該字節碼加載到內核中,並在類似於 BPF(Berkeley Packet Filters)的特殊虛擬機中在內核中執行。 這種方法可以顯著減少在內核級別運行的過濾代碼的大小,並將解析規則的所有功能和使用協議的邏輯移至用戶空間。

主要創新:

  • 支持連接中的範圍(連接、地址和端口的特定綁定,以簡化匹配)。 例如,對於其元素是附件的“白名單”集,指定“間隔”標誌將指示該集可以包含附件中的範圍(對於附件“ipv4_addr.ipv4_addr.inet_service”,以前可以準確列出匹配如“192.168.10.35”,現在您可以指定地址組“192.68.11.123-80-192.168.10.35”):

    表 ip foo {
    設置白名單{
    輸入 ipv4_addr 。 ipv4_地址。 inet_service
    標誌間隔
    元素 = { 192.168.10.35-192.168.10.40 。 192.68.11.123-192.168.11.125。 80}
    }

    鏈條{
    type filter hook 預路由優先過濾器; 政策下降;
    知識產權地址。 ip 爸爸。 tcp dport@whitelist 接受
    }
    }

  • 在集合和映射列表中,可以使用“typeof”指令,它確定映射時元素的格式。
    例如:

    表 ip foo {
    設置白名單{
    ip地址類型
    元素 = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    鏈條{
    type filter hook 預路由優先過濾器; 政策下降;
    ip daddr @whitelist 接受
    }
    }

    表 ip foo {
    地圖 addr2mark {
    typeof ip saddr : 元標記
    元素 = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • 添加了在 NAT 綁定中使用附件的功能,這允許您在基於映射列表或命名集定義 NAT 轉換時指定地址和端口:

    nft 添加規則 ip nat pre dnat ip addr。 端口到 ip saddr 映射 { 1.1.1.1 : 2.2.2.2 . 三十 }

    nft 添加地圖 ip nat 目的地 { 輸入 ipv4_addr 。 inet_service : ipv4_addr 。 inet_服務\\; }
    nft 添加規則 ip nat pre dnat ip addr。 端口到 ip saddr 。 tcp dport 映射@destinations

  • 支持硬件加速,去除網卡肩上的一些過濾操作。 加速通過 ethtool 實用程序(“ethtool -K eth0 hw-tc-offload on”)啟用,之後使用“offload”標誌在主鏈的 nftables 中激活。 使用 Linux 5.6 內核時,結合接收、丟棄、複製 (dup) 和轉發 (fwd) 數據包,支持頭字段匹配和傳入接口檢查的硬件加速。 在下面的示例中,丟棄來自地址 192.168.30.20 的數據包的操作是在網卡級別執行的,而不會將數據包傳遞給內核:

    # 貓文件.nft
    表 netdev x {
    鏈 y {
    type filter hook 入口設備 eth0 優先級 10; 標誌卸載;
    ip saddr 192.168.30.20 下降
    }
    }
    # nft -f 文件.nft

  • 改進了有關規則中錯誤位置的信息。

    # nft 刪除規則 ip yz handle 7
    錯誤:無法處理規則:沒有這樣的文件或目錄
    刪除規則 ip yz handle 7
    ^

    # nft 刪除規則 ip xx handle 7
    錯誤:無法處理規則:沒有這樣的文件或目錄
    刪除規則 ip xx handle 7
    ^

    # nft 刪除表 twst
    錯誤:沒有那個文件或目錄; 您是說家庭 ip 中的表“測試”嗎?
    刪除表扭曲
    ^^^^

    第一個示例顯示系統中不存在表“y”,第二個示例顯示缺少“7”處理程序,第三個示例在鍵入表名時顯示拼寫錯誤提示。

  • 添加了通過指定“meta sdif”或“meta sdifname”檢查從接口的支持:

    … 元 sdifname vrf1 …

  • 添加了對右移或左移操作的支持。 例如,要將現有數據包標籤左移 1 位並將較低位設置為 1:

    ... 元標記集元標記 lshift 1 或 0x1 ...

  • 實施“-V”選項以顯示擴展版本信息。

    #nft-V
    nftables v0.9.4(五點鐘)
    cli:readline
    JSON:是的
    迷你版:沒有
    libxtables:是的

  • 現在必須在命令之前要求命令行選項。 比如需要指定“nft -a list ruleset”,運行“nft list ruleset -a”會報錯。

    來源: opennet.ru

添加評論