Proxmox VE 防火牆與權限:門鎖跟鑰匙一次講清楚
系統跑起來了、服務也上線了,但你有沒有想過:誰能進來?進來之後能做什麼?防火牆管的是「門開給誰」,權限管的是「進來之後哪些抽屜能打開」。兩件事都做好,才不會某天醒來發現 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 list2FA 雙因素認證
所有管理員帳號都建議開 2FA。PVE 支援:
- TOTP:Google Authenticator、Authy 那種六位數字
- WebAuthn/FIDO2:YubiKey 之類的硬體金鑰
- Recovery Keys:萬一手機掉了的救命繩
設定路徑:Web GUI → Datacenter → Permissions → Two Factor
安全黃金法則
- 最小權限原則:給剛好夠用的權限,不要圖方便開 Administrator
- 用群組管理:別一個一個使用者改權限,會改到懷疑人生
- API Token 取代密碼:腳本和自動化工具用 Token,設定期限、限制權限
- 防火牆只開需要的埠:多開一個埠就多一個被攻擊的面
- 定期檢查 ACL:人會離職、專案會結束,權限要跟著收回
弱密碼 + 管理介面對外 + root 帳號共用 = 資安事件倒數計時器。認真的。
防火牆跟權限管理不是最有趣的題目,但絕對是最值得花時間搞好的。花一個下午設定清楚,能省你好幾個失眠的夜晚。
更多細節可以查閱 Proxmox 防火牆官方文件、PVE 使用者管理官方指南 以及 PVE 管理手冊 - 權限章節。
常見問題
Q: PVE 防火牆開啟後把自己鎖在外面怎麼辦?
直接到主機的實體 Console 或 IPMI 登入,編輯 /etc/pve/firewall/cluster.fw 把 enable 改為 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 把重複的工作自動化: 自動化部署