VMware NSX Security
면책사항: 이는 커뮤니티에서 유지 관리하는 오픈소스 프로젝트이며, VMware, Inc. 또는 Broadcom Inc.와 제휴되지 않았으며, 보증되거나 후원되지 않습니다. "VMware"와 "NSX"는 Broadcom의 상표입니다. 소스 코드는 github.com/zw008/VMware-NSX-Security에서 MIT 라이선스 하에 공개적으로 감사 가능합니다.
VMware NSX DFW 마이크로세그멘테이션 및 보안 — 분산 방화벽, 보안 그룹, VM 태그, Traceflow, IDPS를 위한 21개 MCP 도구.
도메인 중심의 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 수명주기, 배포, 게스트 작업 →
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 수명주기, 배포, 게스트 작업 | 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 변경으로 모든 사용자가 잠길 수 있음):
- 먼저 기본 허용: 새 정책의 첫 번째 규칙은 관리 트래픽(DNS, NTP, vCenter, 점프호스트에서 SSH)에 대해 ALLOW여야 합니다. 그렇지 않으면, 기본 차단을 추가하는 순간 자신의 접근이 차단됩니다.
- 태그 인벤토리: 보호하려는 VM에 실제로 태그가 있는지 확인합니다 (
tag list <vm>). 존재하지 않는 태그를 기반으로 한 그룹은 일치하는 VM이 0개입니다. 정책이 "적용된" 것처럼 보이지만 아무것도 적용되지 않습니다. - 카테고리 선택: 애플리케이션 계층 마이크로세그멘테이션에는
Application을 사용합니다 (규칙은 Infrastructure 규칙이 통과된 후 늦게 평가됨). 일상적인 규칙에Emergency를 사용하면 실제 인시던트 대응 능력이 부족해집니다. - Stateless? 기본적으로 stateful로 설정합니다. NSX DFW는 stateful이며 거의 모든 규칙은 stateless가 아니어야 합니다. Stateless = 양방향 모두 명시적으로 허용해야 합니다.
- 항상 새 규칙에서 로깅을 활성화한 후, 확인이 완료되면 비활성화합니다. 무음 드롭은 최악의 버그입니다.
단계:
- 먼저 VM에 태그를 지정합니다 (아래 워크플로 참조) — 빈 그룹은 강제되지 않음
tag_scope/tag_value를 사용하여create_groupMCP 도구로 그룹을 생성합니다 (태그 조건은"scope|tag"형식으로 일치, 예:tier|web; 여러 기준 유형(태그/IP/세그먼트)은 AND가 아닌 OR로 결합됨)policy create app-microseg --category Application- 규칙을 순서대로 추가: ALLOW 관리 → ALLOW 계층 내 → ALLOW web→app (앱 포트) → DROP any-any (로깅 포함)
- 기본 차단을 활성화하기 전에 traceflow로 확인합니다 (아래 참조)
VM에 NSX 태그 적용
판단: 태그는 그룹 멤버십을 결정하며, 이는 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>
다중 대상 작업
모든 명령은 특정 NSX Manager에 대해 작업하려면 --target <name>을 허용합니다:
# 기본 대상
vmware-nsx-security policy list
# 특정 대상
vmware-nsx-security policy list --target nsx-prod
vmware-nsx-security group list --target nsx-lab
사용 모드
| 시나리오 | 권장 | 이유 |
|---|---|---|
| 로컬/소형 모델 (Ollama, Qwen) | CLI | MCP의 ~8K 토큰 대비 ~2K 토큰 |
| 클라우드 모델 (Claude, GPT-4o) | 둘 다 | MCP는 구조화된 JSON I/O 제공 |
| 자동화된 파이프라인 | MCP | 타입 안전 파라미터, 구조화된 출력 |
MCP 도구 (21개 — 읽기 10, 쓰기 11)
모든 MCP 도구는 선택적 target 파라미터를 허용합니다.
| 카테고리 | 도구 | 유형 | 설명 |
|---|---|---|---|
| DFW 정책 | list_dfw_policies | 읽기 | 카테고리, 시퀀스, 규칙 수와 함께 모든 DFW 보안 정책 목록 |
get_dfw_policy | 읽기 | 정책 세부정보: 카테고리, stateful, 잠김, 범위, 태그 | |
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 | 읽기 | 규칙의 패킷/바이트/세션/히트 수 및 인기도 인덱스 조회 | |
| 보안 그룹 | list_groups | 읽기 | 표현식 수와 함께 모든 보안 그룹 목록 |
get_group | 읽기 | 그룹 세부정보: 표현식 기준 + 최대 50개 유효 VM 멤버 | |
create_group | 쓰기 | 태그/IP/세그먼트 멤버십 기준으로 그룹 생성 (태그는 "scope | |
delete_group | 쓰기 | DFW 규칙/범위에서 참조되거나 참조 스캔이 실패하면 거부하는 그룹 삭제 | |
| VM 태그 | list_vm_tags | 읽기 | 표시 이름으로 VM의 NSX 태그 목록 |
apply_vm_tag | 쓰기 | VM에 scope/value 태그 적용 (추가적, 기존 태그 유지) | |
remove_vm_tag | 쓰기 | VM에서 scope/value 태그 제거 (다른 태그는 유지됨; 동적 그룹 멤버십이 변경될 수 있음) | |
| Traceflow | run_traceflow | 쓰기 | 프로브 패킷 주입; operation_state + 홉별 관찰 (resource_type 기준) + dfw_hits 반환 |
get_traceflow_result | 읽기 | 기존 traceflow의 operation_state/관찰 확인 | |
| IDPS | list_idps_profiles | 읽기 | 심각도 및 필터 기준으로 IDPS 프로필 목록 |
get_idps_status | 읽기 | IDPS 서명 상태 + 글로벌 IDS 설정 (auto_update, syslog export) 조회 |
CLI 빠른 참조
# DFW 정책
vmware-nsx-security policy list [--target <name>]
vmware-nsx-security policy get <policy-id>
vmware-nsx-security policy create <id> --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 연결을 확인하고 다시 시도하세요.
"display_name으로 가상 머신을 찾을 수 없습니다"
list_vm_tags는 NSX 패브릭 API를 통해 표시 이름으로 VM을 찾습니다. 일반적인 원인:
- 표시 이름 불일치 — NSX Manager의 이름이 vCenter와 다를 수 있습니다. 정확한 NSX 패브릭 표시 이름은
vmware-monitor vm list로 확인하세요. - VM이 등록되지 않음 — 새로 배포된 VM은 NSX 패브릭에 나타나는 데 1분 정도 걸릴 수 있습니다.
- 동일한 이름의 여러 VM — 특정 external_id를 사용하여
apply_vm_tag를 사용하세요.
Traceflow가 빈 관찰을 반환함
operation_state가IN_PROGRESS이면 추적이 완료되지 않은 것입니다.get_traceflow_result <traceflow-id>로 다시 폴링하세요.src_lport_id가 올바른 논리적 포트 연결 UUID인지 확인하세요. 세그먼트 포트 경로가 아닙니다.vmware-nsx troubleshoot vm-segment <vm>에서 가져옵니다.- 소스 VM이 전원이 켜져 있고 NSX 오버레이 세그먼트에 연결되어 있어야 합니다.
- VM이 VLAN 기반 세그먼트에 있는 경우 Traceflow가 지원되지 않습니다.
- NSX Manager는 소스 VM을 호스팅하는 트랜스포트 노드에 연결 가능해야 합니다.
vmware-nsx health transport-nodes를 확인하세요.
DFW 규칙 통계에 히트 수가 0으로 표시됨
새로 생성된 규칙은 트래픽이 일치할 때까지 히트 수가 0입니다. 예상 트래픽에도 여전히 0이 표시되면:
- 규칙이 비활성화되지 않았는지 확인하세요 (
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 프록시가 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 쓰기 명령은 API 호출을 실행하지 않고 미리 보기 위해
--dry-run을 지원합니다. - 이중 확인: CLI 파괴 작업(삭제)은 두 번의 별도 확인 프롬프트가 필요합니다.
- 자격 증명 안전: 비밀번호는 환경 변수(
.env파일)에서만 로드되며,config.yaml에서는 절대 로드되지 않습니다. - 네트워킹 변경 불가: 세그먼트, 게이트웨이, NAT 또는 라우팅을 수정할 수 없습니다. 해당 범위는
vmware-nsx에 속합니다. - 프롬프트 인젝션 방어: 모든 API 소스 문자열은 도구 출력에 포함되기 전에
_sanitize()를 통과합니다.
설정
uv tool install vmware-nsx-security
vmware-nsx-security doctor