教程:使用 Azure CLI 启用 Web 应用程序防火墙

应用程序网关上使用 Web 应用程序防火墙 (WAF) 限制流量。 WAF 使用 OWASP 规则保护应用程序。 这些规则包括针对各种攻击(例如 SQL 注入、跨站点脚本攻击和会话劫持)的保护。

本教程介绍如何执行下列操作:

  • 设置网络
  • 创建启用 WAF 的应用程序网关
  • 创建虚拟机规模集
  • 创建存储帐户和配置诊断

Web 应用程序防火墙示例

如果需要,可以使用 Azure PowerShell 完成本教程中的步骤。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.0.4 或更高版本。 若要查找版本,请运行 az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI

创建资源组

资源组是在其中部署和管理 Azure 资源的逻辑容器。 使用 az group create 创建名为 myResourceGroupAG 的 Azure 资源组。

az group create --name myResourceGroupAG --location chinanorth

创建网络资源

虚拟网络和子网用于提供与应用程序网关及其关联资源的网络连接。 分别使用 az network vnet createaz network vnet subnet create 创建名为 myVNet 的虚拟网络和名为 myAGSubnet 的子网。 使用 az network public-ip create 创建名为 myAGPublicIPAddress 的公共 IP 地址。

az network vnet create `
  --name myVNet `
  --resource-group myResourceGroupAG `
  --location chinanorth `
  --address-prefix 10.0.0.0/16 `
  --subnet-name myBackendSubnet `
  --subnet-prefix 10.0.1.0/24

az network vnet subnet create `
  --name myAGSubnet `
  --resource-group myResourceGroupAG `
  --vnet-name myVNet `
  --address-prefix 10.0.2.0/24

az network public-ip create `
  --resource-group myResourceGroupAG `
  --name myAGPublicIPAddress

创建具有 WAF 的应用程序网关

可以使用 az network application-gateway create 创建名为 myAppGateway 的应用程序网关。 使用 Azure CLI 创建应用程序网关时,请指定配置信息,例如容量、sku 和 HTTP 设置。 将应用程序网关分配给之前创建的 myAGSubnetmyAGPublicIPAddress

az network application-gateway create `
  --name myAppGateway `
  --location chinanorth `
  --resource-group myResourceGroupAG `
  --vnet-name myVNet `
  --subnet myAGSubnet `
  --capacity 2 `
  --sku WAF_Medium `
  --http-settings-cookie-based-affinity Disabled `
  --frontend-port 80 `
  --http-settings-port 80 `
  --http-settings-protocol Http `
  --public-ip-address myAGPublicIPAddress

az network application-gateway waf-config set `
  --enabled true `
  --gateway-name myAppGateway `
  --resource-group myResourceGroupAG `
  --firewall-mode Detection `
  --rule-set-version 3.0

创建应用程序网关可能需要几分钟时间。 创建应用程序网关后,可以看到它的这些新功能:

  • appGatewayBackendPool - 应用程序网关必须至少具有一个后端地址池。
  • appGatewayBackendHttpSettings - 指定将端口 80 和 HTTP 协议用于通信。
  • appGatewayHttpListener - 与 appGatewayBackendPool 关联的默认侦听器。
  • appGatewayFrontendIP - 将 myAGPublicIPAddress 分配给 appGatewayHttpListener
  • rule1 - 与 appGatewayHttpListener 关联的默认路由规则。

创建虚拟机规模集

在此示例中,将创建虚拟机规模集,以便为应用程序网关的后端池提供两个服务器。 规模集中的虚拟机与 myBackendSubnet 子网相关联。 若要创建规模集,可以使用 az vmss create

az vmss create `
  --name myvmss `
  --resource-group myResourceGroupAG `
  --image UbuntuLTS `
  --admin-username azureuser `
  --admin-password Azure123456! `
  --instance-count 2 `
  --vnet-name myVNet `
  --subnet myBackendSubnet `
  --vm-sku Standard_DS2 `
  --upgrade-policy-mode Automatic `
  --app-gateway myAppGateway `
  --backend-pool-name appGatewayBackendPool

安装 NGINX

az vmss extension set `
  --publisher Microsoft.Azure.Extensions `
  --version 2.0 `
  --name CustomScript `
  --resource-group myResourceGroupAG `
  --vmss-name myvmss `
  --settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"],"commandToExecute": "./install_nginx.sh" }'

创建存储帐户和配置诊断

在本教程中,应用程序网关使用存储帐户来存储用于检测和防范目的的数据。 也可以使用 Log Analytics 或事件中心来记录数据。

创建存储帐户

使用 az storage account create 创建名为 myagstore1 的存储帐户。

az storage account create \
  --name myagstore1 \
  --resource-group myResourceGroupAG \
  --location chinanorth \
  --sku Standard_LRS \
  --encryption blob

配置诊断

配置诊断以将数据记录到 ApplicationGatewayAccessLog、ApplicationGatewayPerformanceLog 和 ApplicationGatewayFirewallLog 日志中。 将 <subscriptionId> 替换为你的订阅标识符,然后使用 az monitor diagnostic-settings create 配置诊断。

appgwid=$(az network application-gateway show --name myAppGateway --resource-group myResourceGroupAG --query id -o tsv)

storeid=$(az storage account show --name myagstore1 --resource-group myResourceGroupAG --query id -o tsv)

az monitor diagnostic-settings create --name appgwdiag --resource $appgwid \
  --logs '[ { "category": "ApplicationGatewayAccessLog", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } }, { "category": "ApplicationGatewayPerformanceLog", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } }, { "category": "ApplicationGatewayFirewallLog", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } } ]' \
  --storage-account $storeid

测试应用程序网关

若要获取应用程序网关的公共 IP 地址,请使用 az network public-ip show。 复制该公共 IP 地址,并将其粘贴到浏览器的地址栏。

az network public-ip show `
  --resource-group myResourceGroupAG `
  --name myAGPublicIPAddress `
  --query [ipAddress] `
  --output tsv

在应用程序网关中测试基 URL

清理资源

当不再需要资源组、应用程序网关以及所有相关资源时,请将其删除。

az group delete --name myResourceGroupAG --location chinanorth

后续步骤

在本教程中,你已学习了如何执行以下操作:

  • 设置网络
  • 创建启用 WAF 的应用程序网关
  • 创建虚拟机规模集
  • 创建存储帐户和配置诊断