CentOS 8 firewalld + nftables 或只是 nftables
我已經使用 CentOS 7 很長時間了,並且習慣於
iptables
在各種個人和商業機器上建構我的自定義配置。我最近開始使用 CentOS 8 並了解了從
iptables
to的遷移nftables
,因此我能夠重寫我的規則集並讓一切正常執行。問題是我的自定義 nft 規則集在重新啟動後沒有持續存在,我必須手動systemctl restart nftables
讓我的規則重新生效。我了解到罪魁禍首是,根據我的理解(因為我從未在 CentOS 7 中使用過它),它是兩者的
firewalld
前端管理工具……對嗎?一旦我嘗試重新啟動,我的規則集就如預期的那樣到位。問題解決了。iptables``nftables``systemctl disable firewalld``nftables
我的問題是,不使用的影響是什麼
firewalld
,nftables
仍在執行且處於活動狀態,所以我假設我的實際防火牆仍然存在,是否有任何理由讓我應該firewalld
繼續執行並調整設置以確保它正在使用我的nftables
規則集。任何關於它的使用的清晰度將不勝感激!
我認為答案相當簡單。首先,你做了完全正確的事……
Firewalld 是一個純前端。它本身並不是一個獨立的防火牆。它只是通過接受指令,然後將它們變成 nftables 規則(以前稱為 iptables)來操作,而 nftables 規則就是防火牆。因此,您可以在執行“使用 nftables 的防火牆”和執行“僅 nftables”之間進行選擇。Nftables 反過來直接作為核心的一部分工作,在那裡使用許多模組,這些模組部分是新的,部分重複了核心鉤子和模組的“netfilter”系統,該系統在 2000 年左右成為核心的一部分。
並行執行 firewalld 和 nftables(以前稱為 iptables)會讓人很困惑,儘管我相信有些人會這樣做。如果您習慣於執行自己的 iptables 規則,那麼將它們轉換為 nftables 規則並讓它們成為防火牆的規則是完美的解決方案。最好的事情確實是完全禁用並最好屏蔽 firewalld - 有點迂腐,你可以執行:
sudo systemctl stop firewalld sudo systemctl disable firewalld sudo systemctl mask --now firewalld
您無需做任何其他事情。我自己也直接使用 nftables 執行。我發現這比使用前端透明得多(當然還有其他的而不是 firewalld)——它讓你完全了解你在做什麼,並且你可以通過執行
sudo nft list ruleset > /etc/nftables.conf
. 在 /etc/nftables.d 中使用單獨的 nft 表是一種很好且簡單的方法來跟踪您所做的事情以及事情的位置……隨後@eriknelson 在評論中詢問了為什麼你要屏蔽一項服務。這樣做,afaik,出於使用者體驗的實際原因,並防止錯誤和難以發現的錯誤。執行多個防火牆系統是非常不可取的,因為對於大多數人來說結果是不可預測的,並且您不太可能從任何防火牆獲得關於它與另一個預計不存在的防火牆互動的明確錯誤消息。然而,核心會嘗試處理給定的任何內容。如果您使用 nftables 或 iptables,則不應使用 firewalld。或者 ufw。或任何其他更高級別的系統。如果你主要使用更高級別的防火牆,比如 firewalld,你不會
當你屏蔽一個 systemd 服務時,你既不能直接啟動也不能啟用它。如果您發現/意識到該服務被屏蔽,您可以取消屏蔽它 - 然後做您想做的事。這是為了防止無意或自動進行的任何此類更改。您可以通過執行親自查看您的電腦上是否有屏蔽服務
sudo systemctl list-unit-files | grep mask
因此,您可能不一定要完全刪除 firewalld,但同樣不想在不經意間執行它,這正是 using
sudo systemctl mask xyz.service
可以派上用場的情況之一。我想從你寫的東西你知道這一切。但我有點像 nftables 的傳道者,如果其他人讀到這個答案,他們可能會從這些小提示中得到幫助。nftables 的文件很好,但並不過分。