如何使用 firewall-cmd 创建高级规则?

use*_*322 4 firewall iptables firewalld

我想使用 firewalld 创建一个规则,该规则使用标准用户名或用户 ID 以及一个其他模块标准。

在 iptables 中,我认为你可以做这样的事情

iptables -A OUTPUT -m owner --uid-owner <UID> -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

(并且您可以将其他 -m 模块或 -p 协议添加到同一命令中)

但是我阅读了firewall-cmd联机帮助页,但找不到如何制定相同类型的规则。即使是“丰富的规则”似乎也没有这种支持。我必须使用“直接”功能吗?我不太明白它的语法。尤其让我担心的是这些没有任何回报!

firewall-cmd --direct --get-chains ipv4 filter
firewall-cmd --direct --get-rules ipv4 filter OUTPUT
firewall-cmd --direct --get-rules ipv4 filter INPUT
Run Code Online (Sandbox Code Playgroud)

当然iptables -L显示我有这些表、链和规则。

那么我如何使用firewalld为所有者添加一个永久规则,也许还有一个标准?

Mic*_*ton 6

您不需要添加甚至自定义直接链(尽管如果您想变得非常复杂,您可以。只需直接添加到您现有的链中即可。

在 IP 版本、表、链和优先级之后,您只需指定相关的 iptables 选项:

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 \
        -m owner --uid-owner $UID -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

在下面,在 iptables 中,这实际上将被添加到名为 OUTPUT_direct 的 firewalld 管理的链中,该链是从 OUTPUT 链调用的。

  • 是的,这很糟糕。Firewalld 仍然需要一些工作。但它主要是可用的。大多数情况下,如果我必须添加直接规则,我会直接编辑 XML。但是在添加规则后,您应该会看到带有 `--get-rules` 的规则。 (2认同)