firewall-cmd
我正在尝试在 RHEL 7 上的iptables(NAT)中的 PREROUTING 链中添加一条新规则:
$ firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8161
然后我通过以下方式检查 iptables $ iptables -t nat -L
:
...
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
PREROUTING_direct all -- anywhere anywhere
PREROUTING_ZONES_SOURCE all -- anywhere anywhere
PREROUTING_ZONES all -- anywhere anywhere
...
Chain PREROUTING_direct (1 references)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8161
...
但是,如果我运行如下等效的 iptables 命令:
...
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
PREROUTING_direct all -- anywhere anywhere
PREROUTING_ZONES_SOURCE all -- anywhere anywhere
PREROUTING_ZONES all -- anywhere anywhere
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8161
...
Chain PREROUTING_direct (1 references)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8161
我得到了这个附加规则,Chain PREROUTING
即使防火墙被禁用(即禁用防火墙守护程序并运行命令iptables
),这也允许预路由工作。
所以,我的问题有两个:
- 是否有
firewall-cmd
与上述命令功能完全相同的命令iptables
? - 是否可以通过永久添加此规则
firewall-cmd
并在防火墙守护程序被禁用后仍然保留在那里?
答案1
您使用的是firewall-cmd
with--direct
选项,这意味着它接受 iptables 命令。因此,您只需使用相同的选项即可iptables -t nat
获得相同的效果,但有一个例外。使用firewall-cmd
这种方式会将 NAT 规则添加到PREROUTING_direct
链中,而直接使用iptables
with 会将规则添加到PREROUTING
链中。
在 的输出中iptables -t nat -L
,您添加了两次规则:每个链一次。
至于问题的第二部分,firewalld 服务在停止时将删除所有定义的链。因此,添加的规则PREROUTING_direct
将不再可用。简短的回答是“否”。
答案2
我在 Chain PREROUTING 中获得了这个附加规则,即使防火墙被禁用,这也允许预路由工作。
所以我并不完全确定这是否属实。
如果在停止firewalld时PREROUTING不再起作用(我不清楚你为什么要这样做),那么我会假设这是因为firewalld正在删除其整个策略(例如iptables -F
/ iptables -X
)。在这种情况下,手动添加同一规则的另一个版本的事实不会有什么区别。
iptables -F
仍然会删除它。
只要您不停止防火墙,您的(第一个)命令应该会为您提供所需的永久预路由规则。我倾向于认为这应该足够了,但我很可能遗漏了您的一些需求。
需要明确的是:没有实际的在 PREROUTING_DIRECT 链或 PREROUTING 链中使用预路由规则之间的区别。这两种方法的工作原理相同,效果相同,并且无需对防火墙策略进行其他更改,应该可以满足您的需要。
唯一的区别是,firewalld 本质上是在后台为你做一些管理工作,并将你的实际的规则是用户定义的链而不是系统定义的链。
总结:我只会让firewalld保持运行,并使用其命令来创建和管理您的规则。虽然firewall-cmd与“raw”iptables命令的视觉效果略有不同,但它们对网络流量的影响相同。