我试图在RHEL 7上使用firewall-cmd
在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 -t nat -L
检查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 ... 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
永久地添加,并且即使在防火墙守护进程被禁用之后也能保持在那里。 你正在使用带有--direct
选项的firewall-cmd
,这意味着它接受一个iptables命令。 所以,你可以只用iptables -t nat
来select相同的选项,只有一个例外。 使用firewall-cmd
这种方法将直接使用iptables
将规则添加到PREROUTING
链中,并将规则添加到PREROUTING
链中。
在iptables -t nat -L
的输出中,您添加了两次规则:一次到每个链。
至于问题的第二部分,firewalld服务将在停止时移除所有定义的链。 因此,添加到PREROUTING_direct
规则将不再可用。 简短的回答是不
我在Chain PREROUTING中得到了这个额外的规则,即使防火墙被禁用,这也允许预路由工作。
所以我不完全确定这是真的。
如果PREROUTING在停止firewalld的时候不再工作(我不清楚为什么要这样做),那么我会认为是因为firewalld正在删除它的整个策略(例如iptables -F
/ iptables -X
)。 在这种情况下,您手动添加另一个版本的相同规则的事实将毫无区别。 iptables -F
仍然会删除它。
你的(第一)命令应该是给你一个永久的预路由规则,只要你不停止firewalld。 我会倾向于认为这应该是足够的,但是我很可能错过了你的需求。
只需要清楚:在PREROUTING_DIRECT链或PREROUTING链中使用prerouting规则之间没有实际的区别。 这两种方法的工作原理是一样的,具有相同的效果,如果没有对防火墙策略进行其他更改,应该按照您的需要进行操作。
唯一的区别是,firewalld本质上是在幕后为你做一个小小的pipe理员,把你的实际规则放在一个用户定义的链中,而不是一个定义好的系统。
tl; dr :我只想让firewalld继续运行,并使用它的命令来创build和pipe理你的规则。 虽然firewall-cmd vs'raw'iptables命令的视觉效果略有不同,但它们对networkingstream量的影响相同。