Iptables

iptables 在 firewalld 重新載入時刷新

  • October 12, 2021

我在 Rocky Linux(基於 RHEL8)上執行,並且在使用 firewalld 和 iptables 時遇到了一些困難。好吧,反正不是真正的 iptables……讓我解釋一下。

我在 VMWare ESXi 上設置了一個 K8S 集群,有六個虛擬機,都一樣。鑑於這種環境,我需要執行firewalld。我正在使用 Wea​​ve CNI,它使用 iptables 來創建其網路規則。

以下是我的初步發現:

  • 在 weave docker 容器VM 主機上,使用帶有 nf_tables 後端的 iptables

    • 輸出證實了這一點,iptables -V這給了我iptables v1.8.4 (nf_tables)
  • firewalld 設置為使用 nftables 作為其後端(FirewallBackend

  • iptables 服務不存在( Unit iptables.service could not be found.)

  • nftables 服務已載入,但處於非活動狀態

  • 防火牆服務正在執行

  • 如果我啟動 nftables 服務,firewalld 服務將停止,反之亦然

根據我對firewalld的理解,因為它使用nftables,所以它根本不應該刷新iptables,根據他們關於nftables後端的部落格文章。

當 weave 設置其 iptables 規則(用於路由和網路策略)時,我可以使用iptables-save或看到它們nft list ruleset。這意味著即使 weave 使用 iptables 來設置它的規則,它們實際上也被設置到 nftables 中。

現在,我的問題是,如果我在 weave 設置規則後重新載入 firewalld(使用firewall-cmd --reloador systemctl reload firewalld.service),所有規則都會被刷新!iptables-save我可以用或來確認nft list ruleset

可能與使用iptables命令而不是有關nft?即使 iptables 使用 nf_tables 後端?

請注意,weave 部分解決了這個問題,因為他們監視規則以查看特殊(空)鏈 WEAVE-CANARY 是否仍然存在。如果它不存在,它們會重新創建路由路由,但不會對網路策略規則執行任何操作。這是目前的功能請求

有哪些可能的解決方案?我考慮過連接firewalld服務來添加ExecStopPreExecReloadPre保存除firewalld之外的其他規則/etc/sysconfig/nftables.conf(或另一個文件,包括從那裡),但它有點hackish,我不喜歡這個“解決方案”。此外,鑑於 nftables 服務已停止,我什至不確定這是否可行。

編輯:我做了一些測試,行為真的很奇怪。

我用iptables:添加了一條規則iptables -I INPUT 3 -s 10.1.1.9 -j DROP,然後重新載入了防火牆,該規則不再存在!nft我對:進行了同樣的嘗試nft add rule ip filter INPUT ip saddr 10.1.1.9 drop,重新載入了防火牆,結果是一樣的……

這讓我發瘋,firewalld 不應該觸及其他規則表而不是它自己的規則表,但這裡不是這種情況!

來源:來自firewalld合作者的GitHub問題回复

這裡發生了幾件事。

  • 的 nft 變體iptablesnftables在已知表中添加規則:filternatraw等。
  • firewalld 總是刷新所有iptables規則(例如iptables -F -t filter),這些規則會刷新表中的所有鏈filter。這對應於nftables上面提到的已知表名。

Firewalld 的nftables後端接觸firewalld表格,但通過支持 iptables 直接規則間接接觸表格、、、等filter。由於兼容性,此行為無法更改。不過, Firewalld 不會觸及其他表,例如,名為的表不會被刷新。nat``raw``iptables-nft``nftables``foobar

不幸的是,我們在這裡無能為力。我們要麼 a) 保持兼容性並讓iptables命名表被刷新,要麼 b) 放棄iptables直接規則支持。選項 A 是最使用者友好的。

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