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

主要创新:

  • 集合中添加了对与集合元素关联的数据包和流量计数器的支持。 使用“counter”关键字启用计数器:

    表 ip x {
    设置 y {
    ip Saddr 类型
    对付
    元素 = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    链 z {
    type过滤器钩子输出优先级过滤器; 政策接受;
    ip 爸爸@y
    }
    }

  • 要设置计数器的初始值,例如重启后恢复之前的计数器,可以使用命令“nft -f”:

    # 猫规则​​集.nft
    表 ip x {
    设置 y {
    ip Saddr 类型
    对付
    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 Saddr 类型
    对付
    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 过滤器钩子预路由优先级过滤器; 政策下降;
    ip 爸爸。 tcp dport @whitelist 接受
    }
    }

  • typeof 指令现在也适用于映射列表中的连接:

    表 ip foo {
    地图地址2标记{
    ip Saddr 类型。 tcp dport : 元标记
    元素={192.168.10.35。 80:0x00000001,
    192.168.10.135。 80:0x00000002}
    }

    链杆{
    type 过滤器钩子预路由优先级过滤器; 政策下降;
    元标记设置 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

添加评论