nftables 数据包过滤器 1.0.0 发布

数据包过滤器 nftables 1.0.0 版本已发布,统一了 IPv4、IPv6、ARP 和网桥的数据包​​过滤接口(旨在取代 iptables、ip6table、a​​rptables 和 ebtables)。 Linux 1.0.0 内核中包含 nftables 5.13 版本正常工作所需的更改。 版本号的重大变化与任何根本性变化无关,而只是十进制计数法一致延续的结果(之前的版本是 0.9.9)。

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

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

主要创新:

  • 对“*”掩码元素的支持已添加到集合列表中,对于不属于集合中定义的其他元素的任何包都会触发该支持。 table x { map blocklist { type ipv4_addr : 判决标志间隔 elements = { 192.168.0.0/16 : 接受, 10.0.0.0/8 : 接受, * : drop } } chain y { 类型过滤器钩子预路由优先级 0; 政策接受; ip Saddr vmap @blocklist } }
  • 可以使用“--define”选项从命令行定义变量。 # cat test.nft table netdev x { chain y { 类型过滤器钩子入口设备 = $dev 优先级 0; 政策下降; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • 在映射列表中,允许使用常量(有状态)表达式: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packet 0 bytes 0 : Jump ssh_input, * counter packet 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain 预路由 { type filter hook 预路由优先级 raw; 政策接受; iif vmap { "lo" : 跳转 wan_input } } }
  • 添加了“list hooks”命令来显示给定数据包系列的处理程序列表: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 链 ip ab [nf_tables] +0000000300 链 inet mz [nf_tables] } 钩子转发 { -0000000225 selinux_ipv4_forward 0000000000 链 ip ac [nf_tables] } 钩子输出 { -0000000225 selinux_ipv4_output } 钩子 postrou汀 { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • 队列块允许组合 jhash、symhash 和 numgen 表达式,将数据包分发到用户空间中的队列。 ...队列到 symhash mod 65536 ...队列标志旁路到 numgen inc mod 65536 ...队列到 jhash oif 。 meta mark mod 32“queue”还可以与映射列表结合使用,以根据任意键选择用户空间中的队列。 ...队列标志绕过 oifname 映射 { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • 可以将包含集合列表的变量扩展为多个映射。 定义接口 = { eth0, eth1 } 表 ip x { 链 y { 类型过滤器钩子输入优先级 0; 政策接受; iifname vmap { lo : Accept, $interfaces : drop } } } # nft -f x.nft # nft 列表规则集表 ip x { chain y { type 过滤器钩子 输入优先级 0; 政策接受; iifname vmap { "lo" : 接受, "eth0" : 丢弃, "eth1" : 丢弃 } } }
  • 允许按一定时间间隔组合 vmap(判定图): # nft add Rule xy tcp dport 。 ip Saddr vmap { 1025-65535 。 192.168.10.2:接受}
  • NAT 映射的简化语法。 允许指定地址范围: ... snat 到 ip Saddr 映射 { 10.141.11.4 : 192.168.2.2-192.168.2.4 } 或显式 IP 地址和端口: ... dnat 到 ip Saddr 映射 { 10.141.11.4 : 192.168.2.3 。 80 } 或 IP 范围和端口的组合: ... dnat 到 ip Saddr 。 tcp dport 映射 { 192.168.1.2 。 80:10.141.10.2-10.141.10.5。 8888-8999}

来源: opennet.ru

添加评论