寫了防火牆規則卻毫無作用:三層開關

Proxmox 防火牆要在三個層級分別啟用,只要有一層沒開,規則就不會有任何作用。最常見的情況是規則本身正確,卻位在一個沒有開啟的開關底下。

AtlasPVE ·

本條目涵蓋以下問題

  • proxmox 防火牆沒有作用
  • proxmox 防火牆規則無效
  • proxmox 啟用資料中心防火牆
  • proxmox vm 防火牆設定
  • proxmox 封鎖連接埠

規則寫好了,也儲存了,卻什麼都沒變。流量照樣通過,或者原本想封鎖的東西並沒有被封鎖。不是因為規則寫錯,而是因為規則所在的那一層被關掉了。

三個層級,三者缺一不可

防火牆不是在單一位置啟用的。它有三個層級,每一層都有自己的開關:最上層是叢集層級,中間是節點層級,最下層是虛擬機器的網路介面。只有整條鏈都開啟時,規則才會生效。在虛擬機器上寫了一條完美的規則,只要上層的開關是關閉的,它就毫無作用,而且也不會發出任何警告。

所以診斷要由上往下進行:先看最上層的開關是否開啟,再看節點,最後看虛擬機器。從底層開始查會浪費時間。

虛擬機器層級的第二個開關

在虛擬機器這一側,開關並不在虛擬機器本身,而是在網路介面上。只替虛擬機器開啟防火牆而沒有在網路介面上開啟,或者反過來,規則依然不會生效。因為這是兩個不同的位置,所以經常被遺漏。

方向的問題

規則是從虛擬機器的角度來寫的。傳入和傳出不是同一條規則,而哪一側算是傳入,也取決於所在的層級。規則始終沒有符合,最普遍的原因就是寫錯了方向。

順序也是規則

規則是由上往下讀取,第一條符合的規則勝出。寫在一條寬鬆允許規則下方的狹窄拒絕規則,永遠不會被讀到。規則清單不是一個集合,而是一個序列。

讓所有人卻步的恐懼

開啟最上層的開關讓人害怕,因為一開啟就可能失去面板的連線,從此再也不敢開啟。這種恐懼並非沒有根據:在這裡起決定作用的,是預設行為,以及管理存取是否受到某條規則保護。正確的順序是先寫好讓管理存取保持開放的規則,再開啟開關。若反過來做,被鎖在門外一次的人就再也不會碰那個開關,而那台機器就這樣多年處於沒有防護的狀態。

如何知道規則是否在運作

最有用的習慣是查看記錄。規則一旦符合就會留下痕跡;如果什麼都沒出現,那麼不是整條鏈被關閉,就是規則沒有符合。在這裡,實際查看而不是猜測,最能節省時間。

防火牆有兩道,兩道都要看

虛擬機器自己的作業系統可能也在執行防火牆。在虛擬機器內部被擋下的封包,永遠不會出現在伺服器端的記錄中。伺服器上全都開放了卻還是連不上,這種情況最常見的答案就是這個。

Atlas 的做法

Atlas 會在單一畫面中列出節點層級的規則。規則清單上方另有一條狀態列,顯示整條鏈的狀態:它會說明這些規則此刻是否生效。清單本身只能說明規則存在,而不能說明規則正在運作;狀態列說明的正是這個差別。

從那條狀態列直接開啟開關的選項,是刻意省略的。如果在沒有規則保護管理存取的情況下開啟最上層的開關,面板就可能失聯;顯示與切換是兩件不同的工作。

規則可以個別啟用與停用,因此不必刪除規則,就能測試它的作用。

資料來源

Proxmox 官方文件。內容為英文,且在此主題上以官方文件為準。

相關條目

這項工作在 Atlas 中是什麼樣子?

前往產品頁面