内核层仅提供通用的与协议无关的接口,提供从数据包中提取数据、执行数据操作和流量控制的基本功能。 过滤逻辑本身和特定于协议的处理程序在用户空间中编译为字节码,然后使用 Netlink 接口将该字节码加载到内核中,并在特殊的虚拟机(例如 BPF(伯克利数据包过滤器))中执行。 这种方法允许您显着减少在内核级别运行的过滤代码的大小,并将用于处理协议的解析规则和逻辑的所有功能移至用户空间。
主要创新:
- 支持按时间匹配数据包。您可以定义触发规则的时间和日期范围,并配置在一周中的个别日子触发。还添加了一个新选项“-T”以秒为单位显示纪元时间。
元时间 \»2019-12-24 16:00\" — \»2020-01-02 7:00\"
元时间“17:00”-“19:00”
元日“星期五” - 支持恢复和保存 SELinux 标记 (secmark)。
ct secmark 设置元secmark
元安全标记 设置 ct 安全标记 - 支持同步代理映射列表,允许您为每个后端定义多个规则。
表 ip foo {
synproxy https-synproxy {
女士 1460
尺度7
时间戳 sack-perm
}synproxy 其他 Synproxy {
女士 1460
尺度5
}链预{
类型过滤器钩子预路由优先级原始; 政策接受;
tcp dport 8888 tcp 标志 syn notrack
}链杆{
类型过滤器钩子转发优先级过滤器; 政策接受;
ct 状态无效,未跟踪的 synproxy 名称 ip Saddr 映射 { 192.168.1.0/24 : “https-synproxy”, 192.168.2.0/24 : “other-synproxy” }
}
} - 从数据包处理规则中动态删除集合元素的能力。
nft 添加规则...删除@set5 { ip6 Saddr . ip6 爸爸}
- 支持通过网桥接口元数据中定义的ID和协议进行VLAN映射;
元 ibrpvid 100
元 IBRV 协议 VLAN - 选项“-t”(“--terse”)在显示规则时排除集合集合的元素。运行“nft -t listruleset”将输出:
表 ip x {
设置 y {
输入 ipv4_addr
}
}并使用“nft 列表规则集”
表 ip x {
设置 y {
输入 ipv4_addr
元素 = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34}
}
} - 能够在 netdev 链中指定多个设备(仅适用于内核 5.5)以组合常见的过滤规则。
添加表 netdev x
添加链 netdev xy { \
输入过滤器钩子入口设备 = { eth0, eth1 } 优先级 0;
} - 能够添加数据类型的描述。
#nft 描述 ipv4_addr
数据类型 ipv4_addr(IPv4 地址)(基本类型整数),32 位 - 能够使用 linenoise 库而不是 libreadline 构建 CLI 界面。
./configure --with-cli=linenoise
来源: opennet.ru