寫了防火牆規則卻毫無作用:三層開關
Proxmox 防火牆要在三個層級分別啟用,只要有一層沒開,規則就不會有任何作用。最常見的情況是規則本身正確,卻位在一個沒有開啟的開關底下。
AtlasPVE ·
本條目涵蓋以下問題
- proxmox 防火牆沒有作用
- proxmox 防火牆規則無效
- proxmox 啟用資料中心防火牆
- proxmox vm 防火牆設定
- proxmox 封鎖連接埠
規則寫好了,也儲存了,卻什麼都沒變。流量照樣通過,或者原本想封鎖的東西並沒有被封鎖。不是因為規則寫錯,而是因為規則所在的那一層被關掉了。
三個層級,三者缺一不可
防火牆不是在單一位置啟用的。它有三個層級,每一層都有自己的開關:最上層是叢集層級,中間是節點層級,最下層是虛擬機器的網路介面。只有整條鏈都開啟時,規則才會生效。在虛擬機器上寫了一條完美的規則,只要上層的開關是關閉的,它就毫無作用,而且也不會發出任何警告。
所以診斷要由上往下進行:先看最上層的開關是否開啟,再看節點,最後看虛擬機器。從底層開始查會浪費時間。
虛擬機器層級的第二個開關
在虛擬機器這一側,開關並不在虛擬機器本身,而是在網路介面上。只替虛擬機器開啟防火牆而沒有在網路介面上開啟,或者反過來,規則依然不會生效。因為這是兩個不同的位置,所以經常被遺漏。
方向的問題
規則是從虛擬機器的角度來寫的。傳入和傳出不是同一條規則,而哪一側算是傳入,也取決於所在的層級。規則始終沒有符合,最普遍的原因就是寫錯了方向。
順序也是規則
規則是由上往下讀取,第一條符合的規則勝出。寫在一條寬鬆允許規則下方的狹窄拒絕規則,永遠不會被讀到。規則清單不是一個集合,而是一個序列。
讓所有人卻步的恐懼
開啟最上層的開關讓人害怕,因為一開啟就可能失去面板的連線,從此再也不敢開啟。這種恐懼並非沒有根據:在這裡起決定作用的,是預設行為,以及管理存取是否受到某條規則保護。正確的順序是先寫好讓管理存取保持開放的規則,再開啟開關。若反過來做,被鎖在門外一次的人就再也不會碰那個開關,而那台機器就這樣多年處於沒有防護的狀態。
如何知道規則是否在運作
最有用的習慣是查看記錄。規則一旦符合就會留下痕跡;如果什麼都沒出現,那麼不是整條鏈被關閉,就是規則沒有符合。在這裡,實際查看而不是猜測,最能節省時間。
防火牆有兩道,兩道都要看
虛擬機器自己的作業系統可能也在執行防火牆。在虛擬機器內部被擋下的封包,永遠不會出現在伺服器端的記錄中。伺服器上全都開放了卻還是連不上,這種情況最常見的答案就是這個。
Atlas 的做法
Atlas 會在單一畫面中列出節點層級的規則。規則清單上方另有一條狀態列,顯示整條鏈的狀態:它會說明這些規則此刻是否生效。清單本身只能說明規則存在,而不能說明規則正在運作;狀態列說明的正是這個差別。
從那條狀態列直接開啟開關的選項,是刻意省略的。如果在沒有規則保護管理存取的情況下開啟最上層的開關,面板就可能失聯;顯示與切換是兩件不同的工作。
規則可以個別啟用與停用,因此不必刪除規則,就能測試它的作用。
資料來源
Proxmox 官方文件。內容為英文,且在此主題上以官方文件為準。