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(伯克利数据包过滤器))中执行。 这种方法允许您显着减少在内核级别运行的过滤代码的大小,并将用于处理协议的解析规则和逻辑的所有功能移至用户空间。

主要创新:

  • 支持连接范围(串联、简化比较的某些地址和端口包)。 例如,对于其元素是附件的集合“白名单”,指定“间隔”标志将指示该集合可以在附件中包含范围(对于附件“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_服务
    标志间隔
    元素={192.168.10.35-192.168.10.40。 192.68.11.123-192.168.11.125。 80}
    }

    链杆{
    type 过滤器钩子预路由优先级过滤器; 政策下降;
    ip Saddr。 ip 爸爸。 tcp dport @whitelist 接受
    }
    }

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

    表 ip foo {
    设置白名单{
    ip Saddr 类型
    元素 = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    链杆{
    type 过滤器钩子预路由优先级过滤器; 政策下降;
    ip baddr @whitelist 接受
    }
    }

    表 ip foo {
    地图地址2标记{
    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_service \\; }
    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 的数据包的操作是在网卡级别执行的,而不将数据包传递给内核:

    # cat 文件.nft
    表 netdev x {
    链 y {
    输入过滤器挂钩入口设备 eth0 优先级 10; 标志卸载;
    ip Saddr 192.168.30.20 下降
    }
    }
    # nft -f 文件.nft

  • 改进了有关规则中错误位置的信息。

    # nft 删除规则 ip yz 句柄 7
    错误:无法处理规则:没有这样的文件或目录
    删除规则 ip yz 句柄 7
    ^

    # nft 删除规则 ip xx 句柄 7
    错误:无法处理规则:没有这样的文件或目录
    删除规则 ip xx 句柄 7
    ^

    # nft 删除表 twst
    错误:没有这样的文件或目录; 你的意思是家庭ip中的表“test”吗?
    删除表twst
    ^^^^

    第一个示例显示表“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 listruleset”,运行“nft listruleset -a”将导致错误。

    来源: opennet.ru

添加评论