2.3.2. nftables 链的基础知识
表由链组成,后者是规则的容器。存在以下两种规则类型:
- 基本链 :您可以使用基本链作为来自网络堆栈的数据包的入口点。
-
常规链 :您可以使用常规链作为
jump
目标来更好地组织规则。
如果要在表中添加基本链,要使用的格式取决于您的防火墙脚本:
在原生语法的脚本中,使用:
table <table_address_family> <table_name> { chain <chain_name> { type <type> hook <hook> priority <priority> policy <policy> ; } }
在 shell 脚本中,使用:
nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }
为了避免 shell 将分号解释为命令的结尾,请在分号的前面放置
\
转义字符。
这两个示例都创建了 基本链。要创建 常规链,请不要在大括号中设置任何参数。
链类型
以下是链类型以及您可以使用的地址系列和 hook 概述:
类型 | 地址系列 | Hook | 描述 |
---|---|---|---|
| all | all | 标准链类型 |
|
|
| 这个类型的链根据连接跟踪条目执行原生地址转换。只有第一个数据包遍历此链类型。 |
|
|
| 如果 IP 标头的相关部分已更改,则遍历此链类型的数据包会导致新的路由查找。 |
链优先级
priority 参数指定数据包使用相同的 hook 值遍历链的顺序。您可以将此参数设置为整数值,或使用标准优先级名称。
以下列表概述了标准优先级名称及其数字值,您可以使用哪个地址系列和 hook:
文本值 | 数字值 | 地址系列 | Hook |
---|---|---|---|
|
|
| all |
|
|
| all |
|
|
|
|
|
|
| |
|
|
| all |
|
| all | |
|
|
| all |
|
|
|
|
|
|
| |
|
|
|
|
链策略
链策略定义 nftables
是否应该接受或丢弃数据包(如果此链中的规则没有指定任何操作)。您可以在链中设置以下策略之一:
-
accept
(默认) -
drop