Iptables

使用 firewall-cmd 在 iptables 中添加永久 PREROUTING 規則

  • March 2, 2017

我正在嘗試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即使在禁用防火牆守護程序後,是否可以通過永久添加並保留該規則?

您正在使用firewall-cmdwith--direct選項,這意味著它接受 iptables 命令。因此,您可以使用相同的選項iptables -t nat來獲得相同的效果,但有一個例外。使用firewall-cmd這種方式將 NAT 規則添加到PREROUTING_direct鏈中,而iptables直接使用添加規則到PREROUTING鏈。

在 的輸出中iptables -t nat -L,您添加了兩次規則:每個鏈一次。

至於問題的第二部分,firewalld 服務將在停止時刪除所有定義的鏈。因此,添加到的規則PREROUTING_direct將不再可用。簡短的回答是不。

引用自:https://serverfault.com/questions/835791