nftables(2)表、链、规则查询和管理(新增、插入、修改、删除)

简介

在上篇文章中,我们介绍了nftables基本原理以及与iptables的区别,nftables安装和配置保存的操作。这篇文章主要介绍nftables的基本操作,表、链、规则的新增、插入、修改、删除等操作。

注意:在进行nftables实验时和iptables一样,请务必在个人的测试机上进行,不要在有任何业务的机器上进行测试。

在进行测试前,为保障我们环境的纯粹性,我们需要将nftables清空,以便进行后续的各项实验测试。

nft flush ruleset  #清除 nftables 中的所有规则

nft list ruleset
此时我的nftables没有任何规则

nftables 中的表是一个包含链、规则、集合和其他对象集合的名字空间。

每个表都必须分配一个地址系列。地址系列定义此表处理的数据包类型。在创建表时,可以设置以下地址系列之一:

  • ip:仅匹配 IPv4 数据包。如果没有指定地址系列,这是默认设置。
  • ip6 :仅匹配 IPv6 数据包.
  • inet:匹配 IPv4 和 IPv6 数据包。
  • arp:匹配 IPv4 地址解析协议(ARP)数据包。
  • bridge:匹配通过网桥设备的数据包。
  • netdev:匹配来自 ingress 的数据包。

添加表

nft add table <table_address_family> <table_name>

nft list tables  #列出所有表
nft list table <table_name> #列出指定表的规则

nft list table <table_address_family> <table_name> #列出对应族中对应对应表的所有规则
不指定地址族默认就是ip,通过list tables查看创建的表

 删除表

nft delete table <table_address_family> <table_name>
通过delete删除表

刷新表

当我们需要清除一个表中的所有规则但是不需要删除我们表的结构和配置的时候可以通过以下命令实现:

nft flush table <table_address_family> <table_name>

链的用途是包含规则,与 iptables 中的链不同,nftables 中没有内置链。这意味着,如果没有任何类型或钩子使用链,nftables 将不会触及流经这些链的数据包,因为它们没有定义任何规则来处理这些数据包。

表由链组成,链又是规则的容器。存在以下两种规则类型:

基本链 :可以使用基本链作为来自网络堆栈的数据包的入口点。

常规链 :可以将常规链用作 jump 目标来更好地组织规则。

基本链

nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }

链类型

类型地址系列钩子描述

filter

all

all

标准链类型

nat

ip,ip6,inet

preroutinginputoutputpostrouting

这个类型的链根据连接跟踪条目执行原生地址转换。只有第一个数据包会遍历此链类型。

route

ip,ip6

output

如果 IP 头的相关部分已更改,则接受的遍历此链类型的数据包会导致新的路由查找。

链优先级

priority 参数指定数据包遍历具有相同 hook 值的链的顺序。可以将此参数设为整数值,或使用标准优先级名称。数字较低的链首先被处理,并且可以是负数。

文本值数字值地址系列钩子

raw

-300

ip,ip6,inet

all

mangle

-150

ip,ip6,inet

all

dstnat

-100

ip,ip6,inet

prerouting

-300

bridge

prerouting

filter

0

ip,ip6,inet,arp,netdev

all

-200

bridge

all

security

50

ip,ip6,inet

all

srcnat

100

ip,ip6,inet

postrouting

300

bridge

postrouting

out

100

bridge

output

链策略

如果此链中的规则没有指定任何操作,则链策略定义 nftables 是否应该接受或丢弃数据包。可以在链中设置以下策略之一:

  • accept (默认)
  • drop

常规链

nft add chain <table_address_family> <table_name> <chain_name>

查看链

nft list chains #列出所有链信息
nft list chain 族类型 表名 链名

编辑链

想要编辑链,只需按其名称调用它并定义要更改的规则

nft chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }

删除链

和删除表一样通过delete参数

 nft delete chain 族类型 表名 链名

刷新来自链的规则

清空指定表中特定链的所有规则,但保留该链的结构和配置

nft flush chain 族类型 表名 链名

举例

定义一个表为filter-table,定义一个链为input-chain,设置类型为filter,hook为input,优先级为-10

如上图所示,我们通过add chain命令添加了链,没有指定任何policy参数,此时默认的参数为accept

此时需要将该链默认动作指定为drop,应该怎么做呢?

通过如下方式可以实现,但是该命令的后果将会直接拒绝所有input的数据包,切记不可随意配置。该动作就相当于我们iptables中默认的filter链中INPUT表的默认动作。

nft chain ip filter-table input-chain '{ type filter hook input priority -10 ; policy drop ; }'

规则

规则定义对通过包含此规则的链的数据包执行的操作。规则由表达式或语句构成,并包含在链中。如果规则还包含匹配表达式,则 nftables 仅在所有之前的表达式都应用时才执行操作。

添加规则

nft add rule <table_address_family> <table_name> <chain_name> <rule>
此命令在链的末尾附加新规则。
如果要在链的开头添加一条规则,请使用 nft insert 命令而不是 nft add

指定位置添加规则

在iptables中我们可以通过在rule前面添加序号来删除增加规则和设置匹配顺序,在nftables中同样也可以通过该方式实现,那么就是handle参数

nft add rule <table_address_family> <table_name> <chain_name> <handle> <rule> 
如果未指定handle值,则默认在最后添加规则
如果要在指定位置插入规则,则需要使用如下命令
nft insert rule <table_address_family> <table_name> <chain_name> <handle> <rule> 
此时如果未指定handle值,则在链开头添加规则

查看规则

nft list chain 族类型 表名 链名

nft --handle list chain 族类型 表名 链名
nft -a list chain 族类型 表名 链名
通过-a/--handle参数可以查看携带handle值的规则信息

删除规则

单个规则只能通过handle删除。

 nft delete rule <table_address_family> <table_name> <chain_name> handle x
通过对应的handle值删除对应的规则

刷新规则

# nft flush table 表名
# nft flush chain 族类型 表名 链名

举例

环境和前面的iptables/firewalld是一样的,本机内网ip地址192.168.140.250

拒绝192.168.140.248访问本机80端口

通过tcp dport 80 drop拒绝目的端口是80的流量,没有指定任何handle值,因为是add rule所以会在末尾添加规则。通过nft -a参数可以查看handle值,此时值为3

测试访问

此时已经无法访问无法访问

规则顺序测试

如上图所示直接通过insert    handle 3插入一个tcp 50-80端口的accept规则,那么此时能否正常访问呢?

此时已经可以通过140.248正常访问250的80端口了
直接通过add添加一个规则,阻止tcp50-100端口,那么该条规则就会被插入到末尾,此时,我们80可以正常访问, 注意:真实匹配规则的时候不是按照handle这个数值来匹配的,而是按照规则的前后顺序来匹配的。
当没有保存nftables规则的时候,通过flush命令就可以清空该条链的规则

总结

上面所介绍的就是nftables基本的表、链、规则的创建和管理,如果熟悉iptables的配置方式的话,那么nftables的配置逻辑理解起来还是相对比较容易的。大家可以多做实验理解表、链、规则的相关性和其互相的关系,如果不是非常清楚,可以参考iptables部分相关的文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值