nftables 数据包过滤器 0.9.9 发布

数据包过滤器 nftables 0.9.9 版本已经发布,统一了 IPv4、IPv6、ARP 和网桥的数据包​​过滤接口(旨在取代 iptables、ip6table、a​​rptables 和 ebtables)。 同时,发布了配套库 libnftnl 1.2.0,提供了用于与 nf_tables 子系统交互的低级 API。 Linux 内核 0.9.9-rc5.13 中包含 nftables 1 版本正常工作所需的更改。

nftables 软件包包括在用户空间中运行的数据包过滤器组件,而内核级工作由 nf_tables 子系统提供,该子系统自 3.13 版本以来一直是 Linux 内核的一部分。 内核层仅提供通用的与协议无关的接口,提供从数据包中提取数据、执行数据操作和流量控制的基本功能。

过滤规则和特定于协议的处理程序在用户空间中编译为字节码,然后使用 Netlink 接口将该字节码加载到内核中,并在内核中的特殊虚拟机(类似于 BPF(伯克利数据包过滤器))中执行。 这种方法允许您显着减少在内核级别运行的过滤代码的大小,并将用于处理协议的解析规则和逻辑的所有功能移至用户空间。

主要创新:

  • 使用“卸载”标志启用将可流处理移动到网络适配器端的能力已经实现。 Flowtable是一种优化数据包重定向路径的机制,其中所有规则处理链的完整通过仅应用于第一个数据包,流中的所有其他数据包都直接转发。 table ip global { flowtable f { hook 入口优先级过滤器 + 1 devices = { lan3, lan0, ​​wan } flags offload } chainforward { type filter hook 转发优先级过滤器; 政策接受; ip 协议 { tcp, udp } flow add @f } chain post { type nat hook 后路由优先级过滤器; 政策接受; oifname“wan”伪装 } }
  • 添加了对将所有者标志附加到表的支持,以确保进程独占使用该表。 当进程终止时,与其关联的表将自动删除。 有关进程的信息以注释的形式显示在规则转储中: table ip x { # progname nft flags Owner chain y { type filter hook inputpriority filter; 政策接受; 计数器数据包 1 字节 309 } }
  • 添加了对 IEEE 802.1ad 规范(VLAN 堆栈或QinQ)的支持,该规范定义了将多个 VLAN 标记替换为单个以太网帧的方法。 例如,要检查外部以太网帧类型8021ad且vlan id=342,可以使用构造... ether type 802.1ad vlan id 342来检查外部以太网帧类型8021ad/vlan id=1,嵌套802.1 q/vlan id=2 并进一步封装 IP 数据包: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • 添加了对使用统一层次结构 cgroups v2 管理资源的支持。 cgroups v2 和 v1 之间的主要区别在于,对所有类型的资源使用通用的 cgroups 层次结构,而不是使用单独的层次结构来分配 CPU 资源、调节内存消耗和 I/O。 例如,要检查第一级 cgroupv2 的套接字的祖先是否与“system.slice”掩码匹配,可以使用以下构造: ... socket cgroupv2 level 1 “system.slice”
  • 添加了检查 SCTP 数据包组件的功能(此功能所需的功能将出现在 Linux 5.14 内核中)。 例如,要检查数据包是否包含类型为“data”且字段为“type”的块: ... sctp chunk data 存在 ... sctp chunk data type 0
  • 使用“-f”标志,规则加载操作的执行速度加快了大约两倍。 规则清单的输出也加快了。
  • 提供了一种用于检查标志位是否被设置的紧凑形式。 例如,要检查 snat 和 dnat 状态位是否未设置,您可以指定: ... ct status ! snat,dnat 检查位掩码 syn,ack 中是否设置了 syn 位: ... tcp 标志 syn / syn,ack 检查位掩码 syn,ack,fin,rst 中是否未设置 fin 和 rst 位: ... tcp 标志 != fin,rst / syn,ack,fin,rst
  • 允许在 set/map typeof 定义中使用“verdict”关键字: add map xm { typeof iifname . IP协议th dport:判决;}

来源: opennet.ru

添加评论