Proxmox VE 防火牆提供了一種簡單的方法來保護您的 IT 基礎設施。您可以為集群內的所有主機設置防火牆規則,或為虛擬機和容器定義規則。防火牆宏、安全組、IP 集和別名等功能有助於簡化該任務。
雖然所有配置都存儲在集群文件系統上,但基於iptables的防火牆服務運行在每個集群節點上,從而在虛擬機之間提供完全隔離。該系統的分布式特性還提供比中央防火牆解決方案高得多的帶寬。
防火牆完全支持 IPv4 和 IPv6。IPv6 支持是完全透明的,默認情況下我們會過濾兩種協議的流量。因此無需為 IPv6 維護一組不同的規則。
區域
Proxmox VE 防火牆將網絡分組為以下邏輯區域:
- 主機
進出集群節點的流量。
- 虛擬機
來自或到達特定虛擬機的流量。
對於每個區域,您可以為傳入和傳出流量定義防火牆規則。
配置文件
集群范圍設置
集群范圍的防火牆配置存儲在:/etc/pve/firewall/cluster.fw
GUI設置界面如下:
默認情況下防火牆是完全禁用的。如果啟用防火牆,默認情況下會阻止所有主機的流量。只有來自本地網絡的 WebGUI(8006) 和 ssh(22) 例外。
如果要從遠程管理 Proxmox VE 主機,則需要創建規則以允許從這些遠程 IP 到 Web GUI(端口 8006)的流量。您可能還想允許 ssh(端口 22),也可能是 SPICE(端口 3128)。
在啟用防火牆之前,請打開與您的 Proxmox VE 主機之一的 SSH 連接。這樣,如果出現問題,您仍然可以訪問主機。
為了簡化該任務,您可以改為創建一個名為“management”的 IPSet,並在其中添加所有遠程 IP。這將創建從遠程訪問 GUI 所需的所有防火牆規則。設置示例如下:
配置文件相關內容如下:
[OPTIONS]
enable: 1
[ALIASES]
management 10.0.0.0/24
[IPSET management]
management
[RULES]
GROUP management
IN ACCEPT -source +management -p tcp -dport 80 -log nolog
IN DROP -log nolog
[group management]
IN ACCEPT -source +management -p tcp -dport 3128 -log nolog
IN ACCEPT -source +management -p tcp -dport 22 -log nolog
IN ACCEPT -source +management -p tcp -dport 8006 -log nolog
[group webserver]
IN ACCEPT -p tcp -dport 443 -log nolog
IN ACCEPT -p tcp -dport 80 -log nolog
主機范圍設置
主機范圍的防火牆配置存儲在:/etc/pve/nodes/
GUI設置界面如下:
虛擬機范圍設置
虛擬機范圍的防火牆配置存儲在:/etc/pve/firewall/
GUI設置界面如下:
每個虛擬網絡設備都有自己的防火牆啟用標志。因此,您可以有選擇地為每個接口啟用防火牆。除了常規防火牆啟用選項之外,這也是必需的。
虛擬機防火牆默認是禁用的。啟用后,默認的輸入策略是 DROP,默認的輸出策略是 ACCEPT,不記錄任何日志。
下面是一個GUI設置示例:
配置文件相關內容如下:
[OPTIONS]
log_level_in: nolog
enable: 1
log_level_out: nolog
[RULES]
IN ACCEPT -p tcp -dport 22 -log nolog
IN ACCEPT -p tcp -dport 80 -log nolog
防火牆規則
防火牆規則由方向(IN或OUT)和操作(ACCEPT、DENY、REJECT)組成。您還可以指定宏名稱。宏包含預定義的規則和選項集。規則可以通過添加前綴“|”來禁用。
示例
[RULES]
IN SSH(ACCEPT) -i net0
IN SSH(ACCEPT) -i net0 # a comment
IN SSH(ACCEPT) -i net0 -source 192.168.2.192 # only allow SSH from 192.168.2.192
IN SSH(ACCEPT) -i net0 -source 10.0.0.1-10.0.0.10 # accept SSH for IP range
IN SSH(ACCEPT) -i net0 -source 10.0.0.1,10.0.0.2,10.0.0.3 #accept ssh for IP list
IN SSH(ACCEPT) -i net0 -source +mynetgroup # accept ssh for ipset mynetgroup
IN SSH(ACCEPT) -i net0 -source myserveralias #accept ssh for alias myserveralias
|IN SSH(ACCEPT) -i net0 # disabled rule
IN DROP # drop all incoming packages
OUT ACCEPT # accept all outgoing packages
安全組
安全組是在集群級別定義的規則集合,可以在所有 VM 的規則中使用。例如,您可以定義一個名為“webserver”的組,其中包含打開http和https端口的規則。
[group webserver]
IN ACCEPT -p tcp -dport 443 -log nolog
IN ACCEPT -p tcp -dport 80 -log nolog
IP 別名
IP 別名允許您將網絡的 IP 地址與名稱相關聯。然后您可以使用這些名稱:
- 內部 IP 集定義
- 在防火牆規則的源和目標屬性中
IP Set
IP 集可用於定義網絡和主機組。您可以在防火牆規則的源和目標 屬性中使用“+name”來引用它們。
服務和命令
防火牆在每個節點上運行兩個服務守護進程:
- pvefw-logger:NFLOG 守護進程(ulogd 替換)。
- pve-firewall:更新 iptables 規則
還有一個名為pve-firewall的 CLI 命令,可用於啟動和停止防火牆服務:
# pve-firewall start
# pve-firewall stop
要獲取狀態使用:
# pve-firewall status
上述命令讀取並編譯所有防火牆規則,因此如果您的防火牆配置包含任何錯誤,您將看到警告。
如果要查看生成的 iptables 規則,可以使用:
# iptables-save
默認防火牆規則
以下流量由默認防火牆配置過濾:
數據中心傳入/傳出 DROP/REJECT
如果防火牆的輸入或輸出策略設置為 DROP 或 REJECT,集群中的所有 Proxmox VE 主機仍然允許以下流量:
-
環回接口上的流量
-
已經建立的連接
-
使用 IGMP 協議的流量
-
從管理主機到端口 8006 的 TCP 流量,以允許訪問 Web 界面
-
從管理主機到端口范圍 5900 到 5999 的 TCP 流量允許 VNC Web 控制台的流量
-
從管理主機到端口 3128 的 TCP 流量,用於連接到 SPICE 代理
-
從管理主機到端口 22 的 TCP 流量以允許 ssh 訪問
-
用於 corosync 的集群網絡中到端口 5404 和 5405 的 UDP 流量
-
集群網絡中的 UDP 多播流量
-
ICMP 流量類型 3(目標不可達)、4(擁塞控制)或 11(超時)
以下流量被丟棄,但即使啟用日志記錄也不會記錄:
-
連接狀態無效的 TCP 連接
-
與 corosync 無關的廣播、多播和任播流量,即不通過端口 5404 或 5405
-
到端口 43 的 TCP 流量
-
UDP 流量到端口 135 和 445
-
UDP 流量到端口范圍 137 到 139
-
UDP 流量從源端口 137 到端口范圍 1024 到 65535
-
UDP 流量到端口 1900
-
TCP 流量到端口 135、139 和 445
-
來自源端口 53 的 UDP 流量
其余的流量分別被丟棄或拒絕,並被記錄下來。這可能會因防火牆→選項中啟用的其他選項而異 ,例如 NDP、SMURFS 和 TCP 標志過濾。
請檢查輸出:
# iptables-save
system 命令以查看系統上活動的防火牆鏈和規則。此輸出也包含在系統報告中,可通過 Web GUI 中節點的訂閱選項卡或通過pvereport命令行工具訪問。
VM 傳入/傳出 DROP/REJECT
這會丟棄或拒絕所有到 VM 的流量,但 DHCP、NDP、路由器廣告、MAC 和 IP 過濾的一些例外情況取決於設置的配置。丟棄/拒絕數據包的相同規則是從數據中心繼承的,而主機接受的傳入/傳出流量的例外情況並不適用。
同樣,您可以使用iptables-save(見上文) 來檢查所有應用的規則和鏈。
Proxmox VE 使用的端口
-
Web 界面:8006(TCP、HTTP/1.1 over TLS)
-
VNC Web 控制台:5900-5999(TCP、WebSocket)
-
SPICE 代理:3128 (TCP)
-
sshd(用於集群操作):22 (TCP)
-
rpcbind: 111 (UDP)
-
發送郵件:25(TCP,傳出)
-
corosync 集群流量:5404、5405 UDP
-
實時遷移(VM 內存和本地磁盤數據):60000-60050 (TCP)