nftables 包過濾器版本 0.9.5

發表 數據包過濾器釋放 nftables 0.9.5,透過統一 IPv6、IPv4、ARP 和橋接器的資料包過濾接口,開發作為 iptables、ip6table、a​​rptables 和 ebtables 的替代品。 nftables 軟體包包括在用戶空間中運行的資料包過濾器元件,而核心級工作由 nf_tables 子系統提供,該子系統自 3.13 版本以來一直是 Linux 核心的一部分。 nftables 0.9.5 版本正常運作所需的變更包含在內核中 Linux 5.7.

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

主要創新:

  • 集合中新增了與集合元素關聯的資料包和流量計數器的支援。 使用“counter”關鍵字啟用計數器:

    表 ip x {
    設定 y {
    ip地址類型
    對付
    元素 = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    鏈 z {
    type過濾器鉤子輸出優先權過濾器; 政策接受;
    ip 爸爸@y
    }
    }

  • 要設定計數器的初始值,例如重新啟動後恢復先前的計數器,可以使用命令“nft -f”:

    # 貓規則集.nft
    表 ip x {
    設定 y {
    ip地址類型
    對付
    elements = { 192.168.10.35 計數器封包 1 位元組 84, 192.168.10.101 \
    計數器 p 192.168.10.135 計數器封包 0 位元組 0 }
    }

    鏈 z {
    type過濾器鉤子輸出優先權過濾器; 政策接受;
    ip 爸爸@y
    }
    }
    # nft -f 規則集.nft
    #nft 清單規則集
    表 ip x {
    設定 y {
    ip地址類型
    對付
    elements = { 192.168.10.35 計數器封包 1 位元組 84, 192.168.10.101 \
    計數器 p 192.168.10.135 計數器封包 0 位元組 0 }
    }

    鏈 z {
    type過濾器鉤子輸出優先權過濾器; 政策接受;
    ip 爸爸@y
    }
    }

  • flowtable 中也新增了計數器支援:

    表 ip foo {
    可流動的酒吧{
    鉤子入口優先權-100
    設備 = { eth0, eth1 }
    對付
    }

    連鎖前進{
    類型過濾器鉤子轉發優先權過濾器;
    流程添加@bar計數器
    }
    }

    您可以使用命令“conntrack -L”查看計數器清單:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 封包=9 位元組=608 \
    src = 10.0.1.2 dst = 10.0.1.1 sport = 5201 dport = 47278封包= 8位元組= 428 [卸載]標記= 0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    封包=1005763位元組=44075714753 src=10.0.1.2 dst=10.0.1.1運動=5201 dport=47280 \
    封包 = 967505 位元組 = 50310268 [卸載] 標記 = 0 secctx = null 使用 = 2

  • 在用於串聯的集合中(串聯,某些簡化比較的位址和連接埠包),可以使用「typeof」指令,它來確定集合元素的組成部分的元素的資料類型:

    表 ip foo {
    設置白名單{
    ip Saddr 類型。 TCP 資料連接埠
    元素={192.168.10.35。 80、192.168.10.101。 80}
    }

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

  • typeof 指令現在也適用於映射清單中的連線:

    表 ip foo {
    地圖 addr2mark {
    ip Saddr 類型。 tcp dport : 元標記
    元素={192.168.10.35。 80:0x00000001,
    192.168.10.135。 80:0x00000002}
    }

    鏈條{
    type filter hook 預路由優先過濾器; 政策下降;
    元標記設定 ip baddr 。 tcp dport 映射 @addr2mark 接受
    }
    }

  • 新增了對匿名(未命名)集中的範圍連接的支援:

    # nft 新增規則 inet 過濾器輸入 ip baddr 。 TCP 資料連接埠\
    { 10.0.0.0/8 。 10-23、192.168.1.1-192.168.3.8。 80-443}接受

  • 提供在處理網橋時丟棄帶有 802.1q (VLAN) 標誌的資料包的功能:

    # nft 新增規則網橋 foo bar ether 類型 vlan 拒絕並重設 TCP

  • 新增了對 TCP 會話標識符 (conntrack ID) 匹配的支援。 要確定 conntrack ID,您可以使用“--output id”選項:

    # conntrack -L —輸出 ID
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 封包=2 \
    位元組=122 src=192.168.2.1 dst=192.168.2.118 運動=53 dport=36424 封包=2 位元組=320 \
    [確定] 標記=0 使用=1 id=2779986232

    # nft 新增規則 foo bar ct id 2779986232 計數器

來源: opennet.ru

添加評論