在许多 firewalld 配置示例中,我看到提到了正常的INPUT
iptables 链,以及一个名为INPUT_direct
.
例如
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 \
# etc...
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 1 \
# etc...
有什么意义INPUT_direct
?我必须用它代替吗INPUT
?
INPUT_direct 0
, , 等之间有什么区别INPUT_direct 1
?
长话短说:
如果确实需要直接规则,请始终使用
INPUT
而不是INPUT_direct
:它将始终有效。如果您不知道要使用什么优先级值,只需为每个要添加的新直接规则将优先级值增加一个。
该链(有时)由firewalld的直接规则接口使用。此接口/功能允许使用firewalld存储自定义iptables规则(并且即使firewalld的后端是nftables也总是iptables)并确保这些规则是任何数据包(在表和链中)的第一个看到的。通常只有在firewalld无法处理的情况下才应该使用它,包括firewalld的丰富语言。
filter
INPUT
这是一个已弃用的功能:
我不太确定它是否已被所有用途的政策所取代,无论如何......
同样被弃用的是iptables后端。最近系统上的典型安装还包括
/etc/firewalld/firewalld.conf
:firewalld可以使用iptables或nftables作为后端,但直接规则总是使用iptables。即使后端是nftables ,也没有nftables直接规则的概念:这可能是不推荐使用直接规则的原因之一。
当后端是iptables时
firewalld创建
INPUT_direct
链并添加为INPUT
跳转中的第一条规则,INPUT_direct
因此它始终是第一个看到数据包的链(在INPUT
路径中)。直接规则中对的任何引用
INPUT
都切换为对的引用INPUT_direct
当后端是nftables时
所以
INPUT
它挂钩的优先级为 10 而不是 0。这再次确保iptables做的任何事情都会先做INPUT
用。这种特殊性可以在 python 代码中看到
fw_direct.py
:在这两种情况下,任何使用
firewall-cmd --direct --add-rule ipv4 filter INPUT 0
(后跟与不包括表和链的命令提供的语法相同的语法iptables
)创建的任何内容都将在firewalld本身看到它之前被数据包看到。对于 prority 值:这会影响您要使用的规则的顺序,以防它们的顺序很重要。如果规则是由管理员选择的,规则不依赖于以前的规则,那么它的优先级并不重要,甚至可以保持不变。要确保在其他规则之后添加规则,请增加其优先级: