使用 PowerShell 创建网络安全组(经典)

可以在虚拟网络中使用 NSG 控制流向一个或多个虚拟机 (VM)、角色实例、网络适配器 (NIC) 或子网的流量。 NSG 包含根据流量方向、协议、源地址和端口以及目标地址和端口允许或拒绝流量的访问控制规则。 可以随时更改 NSG 的规则,所做的更改适用于所有关联的实例。

有关 NSG 的详细信息,请访问什么是 NSG

重要

在使用 Azure 资源之前,请务必了解 Azure 当前使用两种部署模型:Azure 资源管理器部署模型和经典部署模型。 在使用任何 Azure 资源之前,请确保了解 部署模型和工具 。 可以通过单击本文顶部的选项卡来查看不同工具的文档。

本文介绍经典部署模型。 还可以在 Resource Manager 部署模型中创建 NSG

方案

为了更好地说明如何创建 NSG,本文档使用以下方案:

VNet 方案

在此方案中,需要为 TestVNet 虚拟网络中的每个子网创建 NSG,如下所述:

  • NSG-FrontEnd。 前端 NSG 应用于 FrontEnd 子网,并且包含以下两个规则:
    • rdp-rule。 允许将 RDP 流量传输到 FrontEnd 子网。
    • web-rule。 允许将 HTTP 流量传输到 FrontEnd 子网。
  • NSG-BackEnd。 后端 NSG 应用于 BackEnd 子网,并且包含以下两个规则:
    • sql-rule。 仅允许来自 FrontEnd 子网的 SQL 流量。
    • web-rule。 拒绝来自 BackEnd 子网的所有 Internet 入站流量。

将这些规则组合起来可创建一个与外围网络类似的方案,其中后端子网只能接收来自前端子网的 SQL 的传入流量且不能访问 Internet,而前端子网可以与 Internet 通信并只接收传入 HTTP 请求。

下面的示例 PowerShell 命令需要基于上述方案创建的简单环境。 如果想要运行本文档中所显示的命令,首先通过创建 VNet 构建测试环境。

为前端子网创建 NSG

  1. 如果从未用过 Azure PowerShell,请参阅如何安装和配置 Azure PowerShell

  2. 创建一个名为 NSG-FrontEnd 的网络安全组:

    New-AzureNetworkSecurityGroup -Name "NSG-FrontEnd" -Location uswest `
      -Label "Front end subnet NSG"
    
  3. 创建一个允许从 Internet 访问端口 3389 的安全规则:

    Get-AzureNetworkSecurityGroup -Name "NSG-FrontEnd" `
      | Set-AzureNetworkSecurityRule -Name rdp-rule `
      -Action Allow -Protocol TCP -Type Inbound -Priority 100 `
      -SourceAddressPrefix Internet  -SourcePortRange '*' `
      -DestinationAddressPrefix '*' -DestinationPortRange '3389'
    
  4. 创建一个允许从 Internet 访问端口 80 的安全规则:

    Get-AzureNetworkSecurityGroup -Name "NSG-FrontEnd" `
      | Set-AzureNetworkSecurityRule -Name web-rule `
      -Action Allow -Protocol TCP -Type Inbound -Priority 200 `
      -SourceAddressPrefix Internet  -SourcePortRange '*' `
      -DestinationAddressPrefix '*' -DestinationPortRange '80'
    
  5. 将网络安全组与子网相关联:

    Get-AzureNetworkSecurityGroup -Name "NSG-Frontend" `
    | Set-AzureNetworkSecurityGroupToSubnet -VirtualNetworkName "TestVNet" `
    -Subnet "FrontEnd"
    

为后端子网创建 NSG

  1. 创建一个名为 NSG-BackEnd 的网络安全组:

    New-AzureNetworkSecurityGroup -Name "NSG-BackEnd" -Location uswest `
      -Label "Back end subnet NSG"
    
  2. 创建一个允许从前端子网访问端口 1433(SQL Server 使用的默认端口)的安全规则:

    Get-AzureNetworkSecurityGroup -Name "NSG-FrontEnd" `
      | Set-AzureNetworkSecurityRule -Name rdp-rule `
      -Action Allow -Protocol TCP -Type Inbound -Priority 100 `
      -SourceAddressPrefix 192.168.1.0/24  -SourcePortRange '*' `
      -DestinationAddressPrefix '*' -DestinationPortRange '1433'
    
  3. 创建一个阻止从子网访问 Internet 的安全规则:

    Get-AzureNetworkSecurityGroup -Name "NSG-BackEnd" `
      | Set-AzureNetworkSecurityRule -Name block-internet `
      -Action Deny -Protocol '*' -Type Outbound -Priority 200 `
      -SourceAddressPrefix '*'  -SourcePortRange '*' `
      -DestinationAddressPrefix Internet -DestinationPortRange '*'
    
  4. 将网络安全组与子网相关联:

    Get-AzureNetworkSecurityGroup -Name "NSG-Backend" `
    | Set-AzureNetworkSecurityGroupToSubnet -VirtualNetworkName "TestVNet" `
    -Subnet "BackEnd"