VMware NSX 安全性
免責聲明:此為社群維護的開源專案,與 VMware, Inc. 或 Broadcom Inc. 無關聯、亦未獲得其背書或贊助。「VMware」與「NSX」為 Broadcom 之商標。原始碼以 MIT 授權公開於 github.com/zw008/VMware-NSX-Security,可供稽核。
VMware NSX DFW 微分段與安全性 — 21 個 MCP 工具,涵蓋分散式防火牆、安全群組、VM 標籤、Traceflow 及 IDPS。
以安全性為導向的領域技能,適用於 NSX-T / NSX 4.x Policy API。 配套技能:vmware-nsx(網路)、vmware-aiops(VM 生命週期)、vmware-monitor(唯讀監控)、vmware-avi(AVI/ALB/AKO)、vmware-harden(合規基準)。 | vmware-pilot(工作流程編排)| vmware-policy(稽核/政策)|
此技能的功能
| 類別 | 工具 | 數量 |
|---|---|---|
| DFW 政策 | 列出、取得、建立、更新、刪除、列出規則 | 6 |
| DFW 規則 | 建立、更新、刪除、取得統計資料 | 4 |
| 安全群組 | 列出、取得、建立、刪除 | 4 |
| VM 標籤 | 列出 VM 標籤、套用標籤、移除標籤 | 3 |
| Traceflow | 執行追蹤、取得結果 | 2 |
| IDPS | 列出設定檔、取得狀態 | 2 |
總計:21 個工具(10 個唯讀 + 11 個寫入)
快速安裝
uv tool install vmware-nsx-security
vmware-nsx-security doctor
何時使用此技能
- 列出、建立或修改 DFW 安全政策與規則
- 根據 VM 標籤、IP 範圍或區段成員資格建立安全群組
- 在虛擬機器上套用或列出 NSX 標籤
- 執行 Traceflow 以追蹤封包路徑並診斷丟棄原因
- 檢查 IDPS 設定檔配置、特徵碼狀態與全域 IDS 設定
- 在應用程式層之間實施零信任微分段
使用配套技能來處理:
- NSX 區段、閘道、NAT、路由、IPAM →
vmware-nsx - VM 生命週期、部署、Guest 操作 →
vmware-aiops - vSphere 庫存、健康狀態、警示、事件 →
vmware-monitor - 儲存:iSCSI、vSAN、資料存放區 →
vmware-storage - Tanzu Kubernetes →
vmware-vks - 負載平衡、AVI/ALB、AKO、Ingress →
vmware-avi
相關技能 — 技能路由
| 使用者意圖 | 建議技能 |
|---|---|
| NSX 安全:DFW 規則、安全群組、IDS/IPS | vmware-nsx-security ← 此技能 |
| NSX 網路:區段、閘道、NAT、路由 | vmware-nsx |
| 唯讀式 vSphere 監控、警示、事件 | vmware-monitor |
| VM 生命週期、部署、Guest 操作 | vmware-aiops |
| 儲存:iSCSI、vSAN、資料存放區 | vmware-storage |
| Tanzu Kubernetes | vmware-vks |
| 多步驟工作流程(需審核) | vmware-pilot |
| 合規基準(CIS / 等保 / PCI-DSS)、漂移偵測、LLM 修復顧問 | vmware-harden(uv tool install vmware-harden) |
| 負載平衡器、AVI、ALB、AKO、Ingress | vmware-avi(uv tool install vmware-avi) |
| 稽核日誌查詢 | vmware-policy(vmware-audit CLI) |
常見工作流程
實施應用程式層微分段
前置檢查(判斷 — DFW 變更可能將所有人鎖在門外):
- 先預設允許:任何新政策中的第一條規則必須是 ALLOW 管理流量(DNS、NTP、vCenter、來自跳板機的 SSH)。若無此規則,一旦您加入預設拒絕,便會立即阻斷自己的存取。
- 標籤清查:確認您要保護的 VM 確實帶有標籤(
tag list <vm>)。基於不存在的標籤的群組比對到零個 VM — 政策看似「已套用」,但實際上毫無作用。 - 類別選擇:應用程式層微分段應使用
Application(規則在基礎架構規則通過後才進行評估,執行順序較晚)。若將例行規則設為Emergency,將耗盡真正的突發事件回應容量。 - 無狀態?預設為有狀態 — NSX DFW 是有狀態的,幾乎沒有規則應設為無狀態。無狀態 = 雙向都必須明確允許。
- 務必先在新規則上啟用記錄,待驗證後再關閉。無聲丟棄是最難除錯的錯誤。
步驟:
- 先為 VM 加上標籤(請見下方工作流程)— 空的群組 = 無實際強制力
- 使用
create_groupMCP 工具,搭配tag_scope/tag_value來建立群組(標籤條件比對為"scope|tag",例如tier|web;請注意多種條件類型 — 標籤/IP/區段 — 是以 OR 而非 AND 方式結合) policy create app-microseg --category Application- 依序加入規則:ALLOW 管理流量 → ALLOW 階層內流量 → ALLOW web→app 於 app-port → DROP any-any(含記錄)
- 在啟用預設拒絕之前,先使用 traceflow 進行驗證(請見下方)
將 NSX 標籤套用至 VM
判斷:標籤驅動群組成員資格,進而驅動 DFW 強制力。拼錯的標籤會讓 VM 在無聲中被排除在保護之外。套用後務必重新列出確認。
tag list my-web-vm-01→ 記錄 VM 外部 ID,同時查看已存在的標籤(避免重複/拼寫衝突)tag apply <vm-external-id> --scope tier --value web- 驗證:再次執行
tag list my-web-vm-01→ 確認新標籤已存在,且無意外出現的標籤
使用 Traceflow 追蹤封包
判斷:Traceflow 是您對任何 DFW 變更的驗證機制。請在啟用拒絕規則之前以及每次規則修改之後執行。切勿相信「UI 上看起來正確」。
- 透過
vmware-nsx troubleshoot vm-segment取得來源 VM 的邏輯連接埠 ID traceflow run <lport-id> --src-ip <src> --dst-ip <dst> --proto TCP --dst-port <port>- 檢查 DFW 命中鏈:哪條規則匹配、ALLOW 或 DROP、以及在哪個傳輸節點上
- 常見失敗:規則在 Application 類別匹配,但被較早的 Environment 類別中的 DROP 規則遮蔽 — 請從頭到尾閱讀追蹤結果,而非僅看最終判決
檢查 DFW 政策命中計數
vmware-nsx-security policy list
vmware-nsx-security rule list <policy-id>
vmware-nsx-security rule stats <policy-id> <rule-id>
多目標操作
所有指令皆可接受 --target <name> 來針對特定 NSX Manager 操作:
# 預設目標
vmware-nsx-security policy list
# 特定目標
vmware-nsx-security policy list --target nsx-prod
vmware-nsx-security group list --target nsx-lab
使用模式
| 情境 | 建議 | 原因 |
|---|---|---|
| 本地/小型模型(Ollama、Qwen) | CLI | 約 2K tokens,相較於 MCP 的約 8K |
| 雲端模型(Claude、GPT-4o) | 兩者皆可 | MCP 提供結構化 JSON I/O |
| 自動化管線 | MCP | 型別安全參數、結構化輸出 |
MCP 工具(21 個 — 10 個讀取、11 個寫入)
所有 MCP 工具皆可接受選用 target 參數。
| 類別 | 工具 | 類型 | 說明 |
|---|---|---|---|
| DFW 政策 | list_dfw_policies | 讀取 | 列出所有 DFW 安全政策,包含類別、順序與規則數量 |
get_dfw_policy | 讀取 | 取得政策詳細資料:類別、有狀態、鎖定、範圍、標籤 | |
create_dfw_policy | 寫入 | 建立新的 DFW 政策,包含類別與序號 | |
update_dfw_policy | 寫入 | 部分更新:display_name、description、sequence_number、stateful | |
delete_dfw_policy | 寫入 | 刪除政策 — 若存在作用中規則則拒絕 | |
list_dfw_rules | 讀取 | 列出政策中的規則:動作、來源、目的地、服務 | |
| DFW 規則 | create_dfw_rule | 寫入 | 建立規則,包含來源/目的地/服務/動作/範圍 |
update_dfw_rule | 寫入 | 部分更新規則欄位 | |
delete_dfw_rule | 寫入 | 從政策中刪除規則 | |
get_dfw_rule_stats | 讀取 | 取得規則的封包/位元組/工作階段/命中計數與 popularity_index | |
| 安全群組 | list_groups | 讀取 | 列出所有安全群組及其表達式數量 |
get_group | 讀取 | 取得群組詳細資料:表達式條件 + 最多 50 個有效 VM 成員 | |
create_group | 寫入 | 建立群組,包含標籤/IP/區段成員資格條件(標籤比對為 "scope | |
delete_group | 寫入 | 刪除群組 — 若被 DFW 規則/範圍參照,或參照掃描失敗則拒絕 | |
| VM 標籤 | list_vm_tags | 讀取 | 依顯示名稱列出 VM 上的 NSX 標籤 |
apply_vm_tag | 寫入 | 將 scope/value 標籤套用至 VM(累加式,保留現有標籤) | |
remove_vm_tag | 寫入 | 從 VM 移除 scope/value 標籤(其他標籤保留;可能變更動態群組成員資格) | |
| Traceflow | run_traceflow | 寫入 | 注入探測封包;傳回 operation_state + 逐跳觀察(依 resource_type)+ dfw_hits |
get_traceflow_result | 讀取 | 檢查現有 traceflow 的 operation_state/observations | |
| IDPS | list_idps_profiles | 讀取 | 列出 IDPS 設定檔及其嚴重性與過濾條件 |
get_idps_status | 讀取 | 取得 IDPS 特徵碼狀態 + 全域 IDS 設定(auto_update、syslog 匯出) |
CLI 快速參考
# DFW 政策
vmware-nsx-security policy list [--target <name>]
vmware-nsx-security policy get <policy-id>
vmware-nsx-security policy create <id> --name "Display Name" --category Application [--dry-run]
vmware-nsx-security policy delete <id> [--dry-run]
# DFW 規則
vmware-nsx-security rule list <policy-id>
vmware-nsx-security rule stats <policy-id> <rule-id>
vmware-nsx-security rule delete <policy-id> <rule-id> [--dry-run]
# 安全群組
vmware-nsx-security group list
vmware-nsx-security group get <group-id>
vmware-nsx-security group delete <group-id> [--dry-run]
# 標籤
vmware-nsx-security tag list <vm-display-name>
vmware-nsx-security tag apply <vm-external-id> --scope env --value production [--dry-run]
vmware-nsx-security tag remove <vm-external-id> --scope env --value production [--dry-run]
# Traceflow
vmware-nsx-security traceflow run <lport-id> --src-ip <src-ip> --dst-ip <dst-ip>
# IDPS
vmware-nsx-security idps profiles
vmware-nsx-security idps status
# 診斷
vmware-nsx-security doctor [--skip-auth]
疑難排解
「無法刪除政策 — 存在作用中規則」
delete_dfw_policy 會在刪除前檢查是否含有作用中規則。請使用 vmware-nsx-security rule list <policy-id> 查看需要先移除哪些規則。然後逐一刪除每個規則,再重試刪除政策。
「無法刪除群組 — 被 DFW 規則參照」
delete_group 會掃描所有政策中,規則的 source_groups、destination_groups 以及套用範圍 (applied-to) 是否參照此群組,同時也會檢查政策層級的範圍。請先從這些參照中移除該群組(透過 update_dfw_rule 將群組路徑取代為 'ANY' 或其他群組),然後重試。若錯誤訊息指出參照掃描本身失敗,則基於預防措施已中止刪除 — 請使用 vmware-nsx-security doctor 驗證 NSX 連線後重試。
「未找到顯示名稱為 ... 的虛擬機器」
list_vm_tags 會透過 NSX fabric API 依顯示名稱查詢 VM。常見原因:
- 顯示名稱不符 — NSX Manager 中的名稱可能與 vCenter 不同。請使用
vmware-monitor vm list確認確切的 NSX fabric 顯示名稱。 - VM 未註冊 — 新部署的 VM 可能需要一分鐘才會出現在 NSX fabric 中。
- 多個 VM 同名 — 請使用
apply_vm_tag搭配特定的 external_id。
Traceflow 傳回空白的觀察結果
- 若
operation_state為IN_PROGRESS,表示追蹤尚未完成 — 請使用get_traceflow_result <traceflow-id>再次輪詢。 - 確認
src_lport_id是正確的邏輯連接埠連接 UUID — 而非區段連接埠路徑。請從vmware-nsx troubleshoot vm-segment <vm>取得。 - 來源 VM 必須已開機並連接到 NSX Overlay 區段。
- 若 VM 位於 VLAN 支援的區段上,則不支援 Traceflow。
- NSX Manager 需要能夠連線到託管來源 VM 的傳輸節點。請使用
vmware-nsx health transport-nodes檢查。
DFW 規則統計顯示零命中
新建立的規則在流量匹配之前,命中計數會是零。若預期有流量但仍顯示零:
- 確認規則未被停用(在
list_dfw_rules輸出中disabled: false)。 - 使用
get_group檢查來源/目的地群組成員資格是否正確。 - 驗證規則序號 — 序號較低的規則(ALLOW/DROP)可能優先匹配。
「找不到密碼」錯誤
密碼變數慣例:VMWARE_NSX_SECURITY_<TARGET_UPPER>_PASSWORD
其中連字號以底線取代。對於目標 nsx-prod:
VMWARE_NSX_SECURITY_NSX_PROD_PASSWORD。請檢查 ~/.vmware-nsx-security/.env。
invalid peer certificate: UnknownIssuer(uvx)
企業 TLS Proxy 不受 uv 內建憑證儲存庫信任。請使用 v1.5.15+ 的單指令形式 vmware-nsx-security mcp(不重新解析 PyPI),或設定 export UV_NATIVE_TLS=true 讓 uv 使用系統憑證儲存庫。
安全性
- 稽核記錄:所有寫入操作皆記錄至
~/.vmware/audit.db(SQLite WAL,透過 vmware-policy),包含時間戳記、使用者、目標、操作、參數與結果 - 相依性檢查:
delete_dfw_policy檢查作用中規則;delete_group檢查 DFW 規則參照 — 防止意外的連鎖失敗 - 輸入驗證:所有 ID 皆驗證安全字元集(字母數字、連字號、底線、點號);所有文字欄位皆經消毒以移除控制字元
- 試執行模式:CLI 寫入指令支援
--dry-run以預覽 API 呼叫而不實際執行 - 雙重確認:CLI 破壞性操作(刪除)需要兩個獨立的確認提示
- 憑證安全:密碼僅從環境變數(
.env檔案)載入,絕不來自config.yaml - 不修改網路設定:無法修改區段、閘道、NAT 或路由 — 該範疇屬於
vmware-nsx - 提示注入防禦:所有來自 API 的字串在納入工具輸出前,皆會通過
_sanitize()處理
設定
uv tool in