在 VMM 中管理端口 ACL
重要
此版本的 Virtual Machine Manager (VMM) 已终止支持。 建议 升级到 VMM 2022。
在 System Center - Virtual Machine Manager (VMM) 中可集中配置和管理 Hyper-V 端口访问控制列表 (ACL)。 可以为网络控制器托管构造和不由网络控制器管理的网络配置端口 ACL。
- 端口 ACL 是一组规则,用于在第 2 层端口级别上筛选流量。 VMM 中的端口 ACL 可筛选对特定 VMM 对象的访问。 网络对象可附加最多一个端口 ACL。
- ACL 包含规则,可以附加到任意数量的网络对象。 可以创建不包含规则的 ACL,然后在以后添加规则。 每个 ACL 规则仅对应于一个端口 ACL。
- 如果 ACL 具有多个规则,则会根据优先级应用这些规则。 规则与条件匹配并应用后,则不会处理其他规则。
- 全局设置端口 ACL 应用于基础结构中所有 VM 虚拟网络适配器。 没有针对全局设置的单独对象类型。 相反,全局设置端口 ACL 附加到 VMM 管理服务器。
- 端口 ACL 设置只能通过 VMM 中的 PowerShell cmdlet 公开,不能在 VMM 控制台中配置。
- 端口 ACL 可应用于:
- 网络控制器部署中的虚拟子网和适配器。
- 不由网络控制器托管的网络中的虚拟子网、网络适配器、VM 网络和 VMM 管理服务器。
开始之前
- 若要将 ACL 应用于网络控制器托管的对象,请使用 ManagedByNC 标记,并将其设置为 True。 如果未设置为 True,则 ACL 仅适用于不由网络控制器管理的网络对象。
- ACL 类型不可互换。 不能将 ManagedByNC 设置为 false 的 ACL 应用于由网络控制器管理的对象,反之亦然。
- 这两种 ACL 之间的主要区别在于,在对非网络控制器管理的对象应用 ACL 后,需要修正每个网络适配器。
- 此外,在优先级范围方面也存在差异:
- Hyper-V 端口 ACL(不由网络控制器托管) :1 - 65535
- SDN 端口 ACL(由网络控制器托管) :1 - 64500
- 需要完整的 VMM 管理员权限才可将端口 ACL 附加到全局设置。 若要将 ACL 附加到 VMM 对象 (VM 网络、子网、虚拟网络适配器) ,需要是 VMM 管理员、租户管理员或自助服务用户。
不支持的方案
下面是不受支持的方案的列表:
- ACL 与多个实例进行共享时,管理单个实例的单个规则。 所有规则都在其父 ACL 中集中管理并应用到 ACL 附加的位置。
- 将多个 ACL 附加到实体。
- 将端口 ACL 应用于 Hyper-V 父分区(管理操作系统)中的虚拟网络适配器。
- 在 VMM 中创建包含 IP 级协议(而不是 TCP 或 UDP)的端口 ACL 规则。 其他协议仍由 Hyper-V 以本机方式支持。
- 将端口 ACL 应用于逻辑网络、网络站点 (逻辑网络定义) 、子网 VLAN 和其他未提及为受支持的 VMM 网络对象。
部署步骤
使用 VMM PowerShell 接口执行以下操作:
定义端口 ACL 和规则。
- 规则将作为“扩展端口 ACL” (VMNetworkAdapterExtendedAcl) 应用于 Hyper-V 服务器上的虚拟交换机端口。 这意味着它们仅可应用于运行 Windows Server 2012 R2 或更高版本的主机,因为 VMM 不会为早期版本创建旧版 Hyper-V 端口 ACL (VMNetworkAdapterAcl)。
- 规则将作为“扩展端口 ACL” (VMNetworkAdapterExtendedAcl) 应用于 Hyper-V 服务器上的虚拟交换机端口。 这意味着它们只能应用于运行 Windows Server 2016 或更高版本的主机,因为 VMM 不会 (VMNetworkAdapterAcl) 为早期版本创建旧版 Hyper-V 端口 ACL。
- 对于 TCP 来说,VMM 中定义的所有端口 ACL 规则都具有状态。 无法创建无状态的 TCP ACL 规则。
将端口 ACL 附加到全局设置。 这会将 ACL 应用到所有 VM 虚拟网络适配器。
将端口 ACL 附加到 VM 网络、VM 子网或 VM 虚拟网络适配器。
管理端口 ACL 规则。
创建端口 ACL
在 VMM 中打开 PowerShell。
使用 New-SCPortACL cmdlet 创建端口 ACL。
New-SCPortACL [-Name] <String> [-Description <String>] [-JobVariable <String>] [-ManagedByNC] [-OnBehalfOfUser <String>] [-OnBehalfOfUserRole <UserRole>] [-Owner <String>] [-PROTipID <Guid>] [-RunAsynchronously] [-UserRole <UserRole>] [-VMMServer <ServerConnection>] [<CommonParameters>]
参数
参数 | 详细信息 |
---|---|
Name; Description | 端口 ACL 名称和描述 |
JobVariable | 存储作业进度 |
ManagedByNC | 指定是否由网络控制器托管对象 |
OnBehalfOfUser/OnBehalfOfRole | 使用用户名或角色运行作业 |
Owner | 以一个有效的域用户帐户形式指定 VMM 对象的所有者。 示例:Contoso\PattiFuller 或 PattiFuller@Contoso |
ProTipID | 触发操作的 ProTip 的 ID |
RunAsychronously | 指示是否以异步方式运行作业 |
UserRole | 指定用户角色 |
VMMServer | 指定 VMM 服务器 |
CommonParameters | 了解详细信息 |
示例
为网络控制器托管的对象创建端口 ACL“DemoACLManagedByNC”:
PS: C:\> New-SCPortACL -Name "DemoACLManagedByNC" -Description "PortACL Example Managed by NC" -ManagedByN
为不由网络控制器托管的对象创建端口 ACL“DemPortACL”:
PS: C:\> New-SCPortACL -Name "DemoPortACL" -Description "Port ACL Example Non Managed by NC"
定义端口 ACL 的规则
在 VMM 中打开 PowerShell。
使用 New-SCPortACLRule cmdlet 创建一个或多个规则。
New-SCPortACLrule -PortACL <PortACL> -Name <string> [-Description <string>] -Type <Inbound | Outbound> -Action <Allow | Deny> -Priority <uint16> -Protocol <Tcp | Udp | Any> [-LocalAddressPrefix <string: IPAddress | IPSubnet>] [-LocalPortRange <string:X|X-Y|Any>] [-RemoteAddressPrefix <string: IPAddress | IPSubnet>] [-RemotePortRange <string:X|X-Y|Any>]
参数
参数 | 详细信息 |
---|---|
Name, Description | 规则名称和描述 |
类型 | 指定要应用 ACL 的流量方向(“入站”或“出站”) |
操作 | 指定 ACL 是否允许或阻止流量(“允许”或“拒绝”) |
LocalAddressPrefix | 指定用于标识应筛选的流量的源 IP 地址或子网。 |
LocalPortRange | 指定用于标识流量的源端口范围。 |
RemoteAddressPrefix | 指定用于标识要筛选的流量的源 IP 地址或子网。 |
RemotePortRange | 指定用于标识流量的目标端口范围。 |
协议 | 指定应用规则的协议。 |
优先级 | 在端口 ACL 中指定规则的优先级。 按顺序应用规则。 优先级设置在 1 至 65535 之间,其中最小的数字具有最高优先级。 用于网络控制器托管的对象的端口 ACL 规则应设为等于或大于 100。 网络控制器不支持低于 100 的优先级。 |
示例
创建端口 ACL 并将对象存储在 $portACL 中:
PS: C:\> $portACL = New-SCPortACL -Name "RDP ACL" -Description "Acl on RDP access"
创建端口 ACL 规则,以允许从远程子网进行 RDP 访问:
PS: C:\> New-SCPortACLRule -Name "AllowRDPAccess" -PortACL $portACL -Description "Allow RDP Rule from a subnet" -Action Allow -Type Inbound -Priority 110 -Protocol Tcp -LocalPortRange 3389 -RemoteAddressPrefix 10.184.20.0/24
修改 ACL 规则优先级:
PS: C:\> $portACLRule = Get-SCPortACLRule -Name "AllowRDPAccess" `` <br/><br/> `` PS: C:\> Set-SCPortACLRule -PortACLRule $portACLRule -Priority 220
第一个命令获取端口 ACL 规则“AllowRDPAccess”。 第二个命令将规则的优先级更改为 220。
修改目标地址范围的端口 ACL 规则和规则的协议:
PS: C:\> $portACLRule = Get-SCPortACLRule -Name "AllowRDPAccess" `` <br/><br/> `` PS: C:\> Set-SCPortACLRule -PortACLRule $portACLRule -RemoteAddressPrefix 172.185.21.0/24 -Protocol Udp
第一个命令检索规则“AllowRDPAccess”。 第二个命令将协议更改为 UDP,并将目标设置为子网 172.185.21.0/24。
附加和分离端口 ACL
端口 ACL 可附加到全局设置、VM 网络、VM 子网和虚拟网络适配器。 附加到全局设置的端口 ACL 默认适用于所有 VM 虚拟网络适配器。
在 VMM 中打开 PowerShell。
使用 Set-SCVMMServer cmdlet 附加端口 ACL。
Set-SCVMMServer –VMMServer <VMMServer> [-PortACL <NetworkAccessControlList> | -RemovePortACL ]
参数
参数 | 详细信息 |
---|---|
VMM 服务器 | 应用端口 ACL 的 VMM 服务器的名称。 |
PortACL | (可选)将指定端口 ACL 附加到全局设置。 |
示例
将 ACL 附加到全局设置:
Set-SCVMMServer -VMMServer "VMM.Contoso.Local" -PortACL $acl`` <br/><br/> ExampleL: `` Set-SCVMMServer -VMMServer "VMM.Contoso.Local" -PortACL $acl
将 ACL 从全局设置分离:
Set-SCVMMServer -VMMServer "VMM.Contoso.Local" -RemovePortACL
在创建期间将 ACL 附加到 VM 网络:
New-SCVMNetwork [–PortACL <NetworkAccessControlList>] [rest of the parameters]
将 ACL 附加到现有的 VM 网络:
Set-SCVMNetwork -PortACL $acl`
在创建期间将 ACL 附加到 VM 子网:
New-SCVMSubnet [–PortACL <NetworkAccessControlList>] [rest of the parameters]
将 ACL 附加到现有的 VM 子网:
Set-SCVMSubnet [–PortACL <NetworkAccessControlList> | -RemovePortACL] [rest of the parameters]
检索和查看端口 ACL 和规则
在 VMM 中打开 PowerShell。
运行 Get-SCPortACL cmdlet 来检索和查看端口 ACL:
Get-SCPortACL [[-Name] <String> ] [-ID <Guid> ] [-OnBehalfOfUser <String> ] [-OnBehalfOfUserRole <UserRole> ] [-VMMServer <ServerConnection> ] [ <CommonParameters>]
运行 Get-SCPortACLRule 来检索和查看规则:
Get-SCPortACLRule [-Name <String> ] [-ID <Guid> ] [-OnBehalfOfUser <String> ] [-OnBehalfOfUserRole <UserRole> ] [-PortACL <PortACL> ] [-VMMServer <ServerConnection> ] [ <CommonParameters>]
参数
参数 | 详细信息 |
---|---|
无参数 | 检索所有 ACL |
Name/ID | 按名称或 GUID 检索 |
OnBehalfOfUser/OnBehalfOfUserRole | 使用用户名或角色运行 |
VMMServer | 在特定 VMM 服务器上检索 ACL |
CommonParameters | 了解详细信息 |
示例
检索特定 ACL:
PS: C:> $portACL = Get-SCPortACL -Name "DemoPortACL"
获取特定 ACL 的规则:
PS: C:> Get-SCPortACLRule -Name "AllowRDPAccess"
获取 ACL 的所有规则:
PS: C:> Get-SCPortACLRule -PortACL $portACL
修改端口 ACL 和规则
在 VMM 中打开 PowerShell。
运行 Set-SCPortACL cmdlet 来修改端口 ACL:
Set-SCPortACL [-PortACL] <PortACL> [[-Description] <String>] [-JobVariable <String>] [-Name <String>] [-OnBehalfOfUser <String>] [-OnBehalfOfUserRole <UserRole>] [-PROTipID <Guid>] [-RunAsynchronously] [-VMMServer <ServerConnection>] [<CommonParameters>]
运行 Remove-SCPortACL 来删除 ACL:
Remove-SCPortACL [-PortACL] <PortACL> [-Confirm] [-JobVariable <String>] [-OnBehalfOfUser <String>] [-OnBehalfOfUserRole <UserRole>] [-PROTipID <Guid>] [-RunAsynchronously] [-VMMServer <ServerConnection>] [-WhatIf] [<CommonParameters>]
参数
参数 | 详细信息 |
---|---|
Name/Description | 端口 ACL 的名称和描述 |
JobVariable | 存储作业进度 |
OnBehalfOfUser/OnBehalfOfUserRole | 使用用户名或角色运行。 |
ProTipID | 触发操作的 ProTip 的 ID |
RunAsynchronously | 指示是否以异步方式运行作业。 |
确认 | 运行作业前进行提示 |
WhatIf | 显示未运行命令会发生什么情况 |
示例
设置 ACL 描述:
PS: C:> $portACL = Get-SCPortACL -Name "DemoPortACL"
PS: C:> Set-SCPortACL -PortACL $portACL -Description "Port ACL Example Non Managed by Network Controller"
第一个 cmdlet 检索 ACL,第二个 cmdlet 在 ACL 上设置描述。
删除 ACL:
PS: C:> $portACL = Get-SCPortACL -Name "DemoPortACL"
PS: C:> Remove-SCPortACL -PortACL $portACL
第一个 cmdlet 检索 ACL,第二个 cmdlet 删除 ACL。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈