Proxmox VE 防火牆與權限:門鎖跟鑰匙一次講清楚

8 min read

系統跑起來了、服務也上線了,但你有沒有想過:誰能進來?進來之後能做什麼?防火牆管的是「門開給誰」,權限管的是「進來之後哪些抽屜能打開」。兩件事都做好,才不會某天醒來發現 VM 被人當礦機用。如果你的叢集還沒跑起來,可以先看看叢集管理網路管理那兩篇。

防火牆:三層洋蔥式防護

PVE 的防火牆分三層,由外到內越來越細:

┌──────────────────────────────────┐
│  Datacenter(整個叢集的通用規則)  │
├──────────────────────────────────┤
│  Host(每台節點自己的規則)        │
├──────────────────────────────────┤
│  VM/CT(每台虛擬機/容器的規則)    │
└──────────────────────────────────┘

規則處理順序也是這個方向:Datacenter 先看、Host 再看、VM/CT 最後看。沒有匹配到的流量?預設 DROP——不認識的一律不放行。

超級重要:防火牆預設是關的。開啟之前,一定要先設好「允許你自己連進來」的規則,不然就是經典的「把自己鎖在門外」劇情。

設定叢集防火牆

# /etc/pve/firewall/cluster.fw
[OPTIONS]
enable: 1
policy_in: DROP
policy_out: ACCEPT

[RULES]
IN ACCEPT -source 192.168.1.0/24 -p tcp -dport 8006  # Web GUI
IN ACCEPT -source 192.168.1.0/24 -p tcp -dport 22     # SSH
IN ACCEPT -p icmp                                       # Ping

VM 層級防火牆

# /etc/pve/firewall/<vmid>.fw
[OPTIONS]
enable: 1
policy_in: DROP
policy_out: ACCEPT

[RULES]
GROUP web-server
IN ACCEPT -p tcp -dport 22 -source 10.0.0.0/8

實用功能

Security Group:定義一組規則,取個名字(如 web-server),套用到多台 VM。就像衣服的標籤——Web Server 的穿 Web Server 的制服,Database 穿 Database 的。

IPSet:把一堆 IP 打包成一個集合,規則裡引用集合名稱就好。特殊的 blacklist IPSet 還能做全叢集黑名單。

Macro:預定義好的服務規則,省得你記埠號:

Macro 協定/埠 用途
SSH TCP 22 遠端連線
HTTP TCP 80 Web
HTTPS TCP 443 Web(加密)
DNS TCP/UDP 53 域名解析
Ping ICMP 連通測試
MySQL TCP 3306 資料庫
Proxmox Web TCP 8006 PVE 管理介面

權限:誰能做什麼

防火牆管完「誰能連進來」,接下來是「進來之後能幹嘛」。

五種認證後端

後端 適合誰
PAM 主機系統管理員(root@pam 就是這個)
PVE 一般用戶,不需要 Linux 帳號
LDAP 接 OpenLDAP
Active Directory 接 Windows AD
OpenID Connect 接 Keycloak、Azure AD 這類 SSO

RBAC 模型

PVE 的權限模型就是經典的 RBAC(Role-Based Access Control):

使用者/群組 → 角色(Role) → 綁定到資源路徑(Path)

路徑長這樣:/vms/100(某台 VM)、/storage/local-lvm(某個儲存)、/pool/dev(某個資源池)。

內建角色一覽

角色 能做什麼
Administrator 什麼都能做(最高權限,別亂發)
PVEAdmin 管 VM/CT/儲存,但改不了系統
PVEVMAdmin VM/CT 完整管理權
PVEVMUser 只能開關機和看 Console
PVEDatastoreUser 能用儲存(上傳 ISO 之類)
PVEAuditor 純看不能動,稽核用
NoAccess 什麼都不能做

實際操作

# 建使用者
pveum user add dev01@pve --password <password>
 
# 建群組
pveum group add developers --comment "Development Team"
 
# 使用者加入群組
pveum user modify dev01@pve --group developers
 
# 給群組權限:只能管 dev-pool 裡的 VM
pveum acl modify /pool/dev-pool --role PVEVMAdmin --group developers
 
# 建 API Token(自動化用,比密碼安全,搭配 [自動化部署](13-automation) 使用更香)
pveum user token add dev01@pve ci-bot --privsep 0
 
# 看目前所有 ACL
pveum acl list

2FA 雙因素認證

所有管理員帳號都建議開 2FA。PVE 支援:

  • TOTP:Google Authenticator、Authy 那種六位數字
  • WebAuthn/FIDO2:YubiKey 之類的硬體金鑰
  • Recovery Keys:萬一手機掉了的救命繩

設定路徑:Web GUI → Datacenter → Permissions → Two Factor

安全黃金法則

  1. 最小權限原則:給剛好夠用的權限,不要圖方便開 Administrator
  2. 用群組管理:別一個一個使用者改權限,會改到懷疑人生
  3. API Token 取代密碼:腳本和自動化工具用 Token,設定期限、限制權限
  4. 防火牆只開需要的埠:多開一個埠就多一個被攻擊的面
  5. 定期檢查 ACL:人會離職、專案會結束,權限要跟著收回

弱密碼 + 管理介面對外 + root 帳號共用 = 資安事件倒數計時器。認真的。


防火牆跟權限管理不是最有趣的題目,但絕對是最值得花時間搞好的。花一個下午設定清楚,能省你好幾個失眠的夜晚。

更多細節可以查閱 Proxmox 防火牆官方文件PVE 使用者管理官方指南 以及 PVE 管理手冊 - 權限章節

常見問題

Q: PVE 防火牆開啟後把自己鎖在外面怎麼辦?

直接到主機的實體 Console 或 IPMI 登入,編輯 /etc/pve/firewall/cluster.fwenable 改為 0 暫時關閉防火牆,修好規則後再開回來。所以開啟前一定要先加好允許自己 IP 的規則。

Q: PVE 的 RBAC 權限可以限制到單台 VM 嗎?

可以。權限綁定路徑支援到 /vms/{vmid} 層級,也能用 /pool/{poolname} 批次管理。搭配群組和角色,可以精確控制每個使用者能操作哪些資源。

Q: Proxmox 支援哪些 2FA 方式?

支援 TOTP(如 Google Authenticator)、WebAuthn/FIDO2(如 YubiKey 硬體金鑰)和 Recovery Keys 備用碼。建議所有管理員帳號至少開啟 TOTP,搭配 Recovery Keys 做備援。

Q: PVE 防火牆跟外部防火牆(如 OPNsense)需要二選一嗎?

不用,兩者互補。外部防火牆管南北向流量(進出網路邊界),PVE 內建防火牆管東西向流量(VM 之間、節點之間),搭配使用能做到更細緻的微分段防護。

下一步

安全底子打好了,來聊怎麼用 Cloud-init 和 API 把重複的工作自動化: 自動化部署