6.2. 创建和管理 nftables 表、链和规则
本节介绍如何显示
nftables 规则集以及如何管理它。
6.2.1. 显示 nftables 规则集 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
nftables 的规则集包含表、链和规则。本节介绍如何显示此规则集。
要显示所有规则集,请输入:
注意
默认情况下,
nftables 不预先创建表。因此,在没有表的情况下显示主机上设置的规则,nft list ruleset 命令不会显示任何输出。
6.2.2. 创建 nftables 表 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
nftables 中的表是包含链、规则、集合和其他对象集合的名字空间。本节介绍如何创建表。
每个表都必须定义一个地址系列。表的地址系列定义了表进程的类型。在创建表时,您可以设置以下地址系列之一:
ip:仅匹配 IPv4 数据包。如果没有指定地址系列,这是默认设置。ip6: 仅匹配 IPv6 数据包。inet: 匹配 IPv4 和 IPv6 数据包。arp: 匹配 IPv4 地址解析协议(ARP)数据包。网桥:匹配遍历网桥设备的数据包。netdev:匹配来自 ingress 的数据包。
过程 6.4. 创建 nftables 表
- 使用 nft add table 命令来创建新表。例如,要创建一个名为 example_table 的表,用于处理
IPv4和IPv6数据包:nft add table inet example_table
# nft add table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 另外,还可列出规则集中的所有表:
nft list tables
# nft list tables table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关地址系列的详情,请查看
nft (8)手册页中的Address families部分。 - 有关您可以在表中运行的其他操作的详情,请查看
nft (8)手册页中的Tables部分。
6.2.3. 创建 nftables 链 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
chains 是规则的容器。存在以下两种规则类型:
- 基本链:您可以使用基础链作为来自网络堆栈的数据包的入口点。
- 常规链:您可以使用常规链作为
跳过目标,并更好地组织规则。
这个步骤描述了如何在现有表中添加基本链。
先决条件
- 已存在您要添加新链的表。
过程 6.5. 创建 nftables 链
- 使用 nft add chain 命令来创建新链。例如,要在 example_table 中创建一个名为 example_chain 的链:
nft add chain inet example_table example_chain '{ type filter hook input priority 0 ; policy accept ; }'# nft add chain inet example_table example_chain '{ type filter hook input priority 0 ; policy accept ; }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要要避免 shell 认为分号作为命令结尾,您必须用反斜杠转义分号。此外,一些 shell 也解译大括号,因此请使用 ticks (1)将大括号和它们内的任何内容引用。这个链过滤传入的数据包。priority参数指定nftables进程处理具有相同 hook 值的链的顺序。较低优先级的值优先于优先级更高的值。policy参数为此链中的规则设置默认操作。请注意,如果您远程登录到服务器,并将默认策略设置为drop,如果没有其他规则允许远程访问,则会立即断开连接。 - 另外,还可以显示所有链:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关地址系列的详情,请查看
nft (8)手册页中的Address families部分。 - 有关您可以在链上运行的其他操作的详情,请查看
nft (8)手册页中的链部分。
6.2.4. 将规则附加到 nftables 链的末尾 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本节介绍如何在现有 nftables 链的末尾附加规则。
先决条件
- 您要添加该规则的链已存在。
过程 6.6. 将规则附加到 nftables 链的末尾
- 要添加新规则,请使用 nft add rule 命令。例如,要在 example_table 中的 example_chain 中添加一条规则,以允许端口 22 上的 TCP 流量:
nft add rule inet example_table example_chain tcp dport 22 accept
# nft add rule inet example_table example_chain tcp dport 22 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以指定服务名称而不是端口号。在示例中,您可以使用ssh而不是端口号22。请注意,服务名称根据/etc/services文件中的条目解析为端口号。 - 另外,还可在 example_table 中显示所有链及其规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关地址系列的详情,请查看
nft (8)手册页中的Address families部分。 - 有关您可以在链中运行的其他操作的详情,请查看
nft (8)手册页中的Rules部分。
6.2.5. 在 nftables 链的开头插入一条规则 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本节介绍如何在现有
nftables 链的开头插入规则。
先决条件
- 您要添加该规则的链已存在。
过程 6.7. 在 nftables 链的开头插入一条规则
- 要插入新规则,请使用 nft insert rule 命令。例如,要在 example_table 中的 example_chain 插入一条规则,以允许端口
22上的 TCP 流量:nft insert rule inet example_table example_chain tcp dport 22 accept
# nft insert rule inet example_table example_chain tcp dport 22 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以指定服务名称而不是端口号。在示例中,您可以使用ssh而不是端口号22。请注意,服务名称根据/etc/services文件中的条目解析为端口号。 - 另外,还可在 example_table 中显示所有链及其规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关地址系列的详情,请查看
nft (8)手册页中的Address families部分。 - 有关您可以在链中运行的其他操作的详情,请查看
nft (8)手册页中的Rules部分。
6.2.6. 在 nftables 链的特定位置插入一条规则 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本节解释了如何在
nftables 链中的现有规则前后插入规则。这样,您可以将新规则放在正确的位置上。
先决条件
- 您要添加该规则的链已存在。
过程 6.8. 在 nftables 链的特定位置插入一条规则
- 使用 nft -a list ruleset 命令显示 example_table 中的所有链及其规则,包括其句柄:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用-a显示句柄。您需要此信息才能在后续步骤中定位新规则。 - 将新规则插入到 example_table 中的 example_chain 链中:
- 要在句柄 3 前插入一条允许端口 636 上 TCP 流量的规则,请输入:
nft insert rule inet example_table example_chain position 3 tcp dport 636 accept
# nft insert rule inet example_table example_chain position 3 tcp dport 636 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 要添加一条规则,在句柄 3 后允许端口 80 上的 TCP 流量,请输入:
nft add rule inet example_table example_chain position 3 tcp dport 80 accept
# nft add rule inet example_table example_chain position 3 tcp dport 80 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 另外,还可在 example_table 中显示所有链及其规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关地址系列的详情,请查看
nft (8)手册页中的Address families部分。 - 有关您可以在链中运行的其他操作的详情,请查看
nft (8)手册页中的Rules部分。