当前位置: 首页 > 虚拟化 > 快速在ESXi主机上获取VM的DFW(NSX-T)信息

快速在ESXi主机上获取VM的DFW(NSX-T)信息

虚拟化 0条评论 2023-9-15 444 views

NSX的分布式防火墙(简称:DFW)能够帮助企业进行严格的东西/南北向的访问控制,如果策略配置得当,最大程度保障企业环境的安全性。在部署和实施NSX的DFW策略时,经常需要登录到ESXi主机查看虚拟机的策略应用情况,并需要通过多个命令组合完成,极大降低了工作效率。 为解决此问题,我写了一个脚本,用于获取虚拟机的以下DFW信息:

  • 虚拟机的网卡名称,支持多网卡
  • 每个网卡上已应用的DFW策略
  • 每个网卡上的策略状态
  • 每个网卡上的活动流
  • 每个网卡上的地址集合中IP地址

相关资料

Troubleshooting DFW on ESX Hosts

相关命令解释

summarize-dvfiltervsipioctl 都是与 VMware NSX 相关的命令,用于获取有关虚拟化环境中虚拟机、网络和安全策略的信息。以下是对这两个命令的简要说明:

  1. summarize-dvfilter

    • 这个命令主要用于显示 ESXi 主机上所有虚拟机的分布式防火墙 (Distributed Firewall, DFW) 过滤器信息。
    • 它会列出所有虚拟机、它们的 World ID、vNic 以及与这些 vNic 相关联的 dvFilter 信息。
    • 使用这个命令可以帮助管理员识别与特定 VM 或 vNic 关联的 DFW 规则。
  2. vsipioctl

    • 这是一个更通用的命令,用于查询和管理 NSX DFW 的状态和配置。
    • 常见的用法包括:
      • vsipioctl getrules -f <vNic Name>:显示与指定 vNic 关联的所有 DFW 规则。
      • vsipioctl getrules -f <vNic Name> -s:获取与指定 vNic 关联的 DFW 规则的状态。
      • vsipioctl getaddrset -f <vNic Name>:获取与指定 vNic 关联的真实地址集。
    • 通过这个命令,管理员可以查看、修改或调试分布式防火墙的配置和行为。

总之,这两个命令为 VMware NSX 管理员提供了强大的工具,使他们可以深入了解、管理和调试其虚拟化环境中的网络安全策略。

脚本示例

此脚本用于获取单个虚拟机的DFW信息,在ESXi中,执行此脚本,第一个参数时“虚拟机名称”。

注意:要查询的虚拟机必须在所在的ESXi主机上运行,不能垮ESXi主机查询。

#!/bin/sh
# ******************************************************
# * Author        : Guoqiang Li
# * Email         : guoqiangli@vmware.com
# * Create time   : 2023-09-15
# * Description   : quickly get the NSX-T dfw policy information and status of the VM on ESXi.
# ******************************************************

if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <VM Name>"
    exit 1
fi

VM_NAME=$1

# Get VM ID
VM_ID=$(vim-cmd vmsvc/getallvms | grep "${VM_NAME}" | awk '{print $1}')

if [ -z "$VM_ID" ]; then
    echo "Cannot find VM with name: ${VM_NAME}"
    exit 1
fi

# Get VM's World ID
WORLD_ID=$(esxcli vm process list | grep -A1 "${VM_NAME}" | grep "World ID:" | awk '{print $3}')

if [ -z "$WORLD_ID" ]; then
    echo "Cannot find World ID for VM: ${VM_NAME}"
    exit 1
fi

# Get vNic Name
vNicNames=$(summarize-dvfilter | awk -v worldid="$WORLD_ID" '
$1 == "world" && $2 == worldid { flag=1; next }
$1 == "world" && flag { exit }
flag && /^   name:/ { sub(/^   name: /, ""); print }
')
# sort by vNic Name,eg: eth0->eth1.
sortedVNicNames=$(echo "$vNicNames" | sort -t'-' -k3 -n)
# Get DFW info by vNic Name.
for vNic in $sortedVNicNames; do
    echo    "-----------------------------------"
    echo    "vNic Name: ${vNic}"
    echo -e "-----------------------------------\n"

    #  Get Policy
    echo    "----------Policy:------------------"
    vsipioctl getrules -f ${vNic}
    echo -e "----------Policy End.--------------\n"

    # Get Policy Status
    echo    "-------Policy Status:--------------"
    vsipioctl getrules -f ${vNic} -s
    echo -e "-------Policy Status End.----------\n"

    # Get Active Flow
    echo    "------Active Firewall flow:--------"
    vsipioctl getflows -f ${vNic}
    echo -e "------Active Firewall flow End.----\n"

    #  Get Real Address
    echo    "------Real Address:----------------"
    vsipioctl getaddrset -f ${vNic}
    echo -e "------Real Address End.------------\n"
done

命令执行完成后,看到以下内容输出,通过这个输出,可以快速判断防火墙策略的优先级,以及策略是否符合预期期望。

完毕

至此,我们通过一个简单的脚本,快速在ESXi主机上,获取DFW策略的应用和状态情况,当然,您也可以根据需要,修改脚本,以满足特定的需求。


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注