在许多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
等等之间有什么区别?
答案1
总结:
如果确实需要直接规则,只需始终使用
INPUT
而不是INPUT_direct
:它将始终有效。如果您不知道使用什么优先级值,只需为要添加的每条新直接规则将优先级值增加一即可。
此链有时由直接规则的接口防火墙。此接口/功能允许存储自定义iptables规则(并且总是iptables即使防火墙的后端是nftables) 使用防火墙filter
并确保这些规则是任何数据包(此处的表和链中)首先看到的规则INPUT
。通常,只有当某些事情无法处理时,您才应该使用它防火墙包括防火墙的丰富的语言。
这是一个已弃用的功能:
已弃用
直接接口已弃用。它将在将来的版本中被删除。它已被政策取代,请参阅 防火墙策略(5)。
无论如何,我不确定它是否会被所有用途的政策所取代......
同样被弃用的还有iptables后端。最近系统上的典型安装还包括/etc/firewalld/firewalld.conf
:
# FirewallBackend # Selects the firewall backend implementation. # Choices are: # - nftables (default) # - iptables (iptables, ip6tables, ebtables and ipset) # Note: The iptables backend is deprecated. It will be removed in a future # release. FirewallBackend=nftables
防火墙可以使用iptables或者nftables作为后端,但直接规则总是使用iptables. 没有概念nftables即使后端是直接规则nftables:这可能是直接规则被弃用的原因之一。
当后端iptables
防火墙创建
INPUT_direct
链并将其添加为INPUT
跳转中的第一个规则,INPUT_direct
因此它始终是第一个看到数据包的链(在路径中INPUT
)。直接规则中对 的任何引用都
INPUT
将切换为对INPUT_direct
当后端nftables
- 防火墙本身不会创造任何iptables链或规则,但确保其自身nftables规则优先挂接到 Netfilteriptables将会使用+10。
因此
INPUT
它的优先级为 10,而不是 0。这再次确保了任何iptables会先做- 引用内置链的直接规则不会改变。此时间
INPUT
被使用。
这种特殊性可以在 Python 代码中看到fw_direct.py
:
# if nftables is in use, just put the direct rules in the chain # specified by the user. i.e. don't append _direct. if not self._fw.nftables_enabled \ and backend.is_chain_builtin(ipv, table, chain): _chain = "%s_direct" % (chain)
在这两种情况下,使用firewall-cmd --direct --add-rule ipv4 filter INPUT 0
(后面跟着与命令中提供的语法相同的语法,iptables
但不包含表和链)创建的任何内容都将在数据包之前被看到防火墙它自己也看到了它。
对于优先级值:如果规则的顺序很重要,则会影响要使用的规则的顺序。顺便说一下,如果规则是由管理员选择的,则规则不依赖于先前的规则,那么它的优先级就无关紧要,甚至可以保持不变。要确保规则在其他规则之后添加,请增加其优先级:
如果您想确保一条规则在另一条规则之后添加,请对第一条规则使用低优先级,对后续规则使用较高优先级。