使用firewall-cmd在iptables中添加永久的PREROUTING规则

我试图在RHEL 7上使用firewall-cmdiptables(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量的影响相同。