排查网络安全问题
确定 Web 应用程序防火墙(WAF)阻止所需流量的原因
偶尔会阻止通过 Web 应用程序防火墙(WAF)传递的请求。
为了根据应用程序或组织的需求优化严格的 Open Web 应用程序安全项目(OWASP)法规,WAF 可帮助你自定义或禁用规则,或创建可能导致问题或误报的排除项。 这是按每个站点和每个 URI 来完成的。 也就是说,对策略的更改只会影响特定的站点/URI,并且不会影响其他可能没有相同问题的站点。
以下文章将帮助你了解 WAF 的工作原理及其规则和日志的工作原理:
了解 Web 应用防火墙(WAF)日志
WAF 日志记录所有被匹配或阻止的已评估请求。 如果发现误报警报,当 WAF 错误地阻止了不应被阻止的请求时,可以采取以下步骤加以处理:
查找特定请求。
检查日志以查找请求的特定 URI、时间戳或事务 ID。
修复误报。
查看 WAF 日志
若要查看 WAF 日志,请完成以下步骤:
在 Azure 门户中,选择 所有资源,然后选择 应用程序网关 WAF 策略。
选择 活动日志。
选择单个操作以了解详情。
可以通过选择 下载为 CSV来下载活动日志。
若要将活动日志事件流式传输到另一个服务,请选择 导出活动日志。
在导出活动日志中:
选择 添加诊断设置。
键入 诊断设置名称。
选择要在 类别中进行流处理的相关日志类别。 例如,选择 安全、策略和 警报。
在 目标详细信息中选择推流目的地。 例如,选择 发送到 Log Analytics 工作区。
输入其他目标详细信息。 例如,订阅的相关 和 log Analytics 工作区 。
选择 保存。
异常评分模式
OWASP 使用异常评分模式来决定是否阻止流量。 在异常评分模式下,当防火墙处于阻止模式时,与任何规则匹配的流量不会立即被阻止。 规则有一定条件:严重、错误、警告或通知。 其中每个值都有一个与之关联的数值,称为异常分数。 数值指示请求的严重性。
有关详细信息,请参阅 异常评分模式。
修复误报
若要修复误报并避免被阻止的流量问题,可以使用排除列表。 使用排除列表仅适用于请求的特定部分或正在禁用的规则集。 你可以决定在某个条件下排除正文、请求头或 Cookie,而不是排除整个请求。 在全局设置环境中,特定排除项适用于通过 WAF 传递的所有流量。
有关排除列表的详细信息,请参阅 WAF 配置。
使用 Azure 门户通过以下步骤来配置排除列表
转到 WAF 门户。
在 托管规则下选择“管理排除项”。
排除列表示例:
- 禁用规则:禁用规则可将某个条件视为非威胁,否则将被标记为恶意并被阻止。 在全局设置环境中,为整个 WAF 禁用规则是一种风险,可能会削弱安全性。
禁用规则组或特定规则
浏览到应用程序网关,然后选择 Web 应用程序防火墙。
选择 WAF 策略。
选择 托管规则。
显示 Web 应用程序防火墙网关的
搜索要禁用的规则或规则组。
选中要禁用的规则的复选框。
在页面顶部选择适用于所选规则的操作(启用/禁用)。
选择 保存。
名为 Fiddler 的第三方工具可以提供其他信息。 Fiddler 将帮助您:
查找请求属性名称:查看各个请求并确定调用网页的特定字段。 它还有助于使用排除列表从检查中排除某些字段。
查找请求标头名称:在 Chrome 开发人员工具中查看请求和响应标头,或查看 GET 请求的标头。
查找请求 cookie 名称:通过选择 Fiddler 中的 Cookie 选项卡查看 Cookie。
限制全局参数以消除误报
禁用请求正文检查:可以通过设置 检查请求正文 关闭来阻止 WAF 评估对应用程序不构成威胁的某些正文。 这样,只有请求正文不被检查。 除非标头和 Cookie 被列入排除列表,否则仍将对其进行检查。
显示 WAF 策略的
文件大小限制:可以通过限制 WAF 的文件大小来减少对 Web 服务器和应用程序的攻击的可能性。 允许大文件会增加后端资源枯竭的风险。 为了防止攻击,建议将文件大小限制为应用程序的典型情况。
注意
防火墙指标(仅WAF_v1) 对于 v1 Web 应用程序防火墙,现在可在门户中使用以下指标:
- Web 应用程序防火墙阻止的请求计数 - 已阻止的请求数量。
- Web 应用防火墙被阻止的规则计数 - 这是所有匹配规则和被阻止请求的数量。
- Web 应用程序防火墙总规则分布 - 所有在评估中匹配的规则
若要启用指标,请在门户中选择“指标”选项卡,然后选择三个指标之一。
确定客户运行的 TLS 版本
如果客户端使用的是低于最低所需版本的传输层安全性 (TLS),则对 Azure 存储的所有调用都将失败。 因此,从安全的角度来看,Azure 存储帐户可能要求客户端使用最低版本的 TLS 发送请求。 例如,如果存储帐户需要 TLS 1.2,则使用 TLS 1.1 的客户端发送的请求将失败。
本文 为存储帐户配置传输层安全性(TLS)的最低要求版本 介绍了如何为可能影响客户端应用程序的 Azure 存储帐户配置最低 TLS 版本。
配置客户端 TLS 版本
对于客户端,仅当客户端使用的作系统和客户端使用的 .NET Framework 支持该版本时,才可能发送具有特定版本的 TLS 的请求。
若要在 PowerShell 客户端中启用 TLS 1.2,请执行以下作:
# Set the TLS version used by the PowerShell client to TLS 1.2.
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
# Create a new container.
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context
New-AzStorageContainer -Name "sample-container" -Context $ctx
若要使用 Azure 存储客户端库版本 12 在 .NET 客户端中启用 TLS 1.2,请执行以下作:
public static async Task ConfigureTls12()
{
// Enable TLS 1.2 before connecting to Azure Storage
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
// Add your connection string here.
string connectionString = "";
// Create a new container with Shared Key authorization.
BlobContainerClient containerClient = new BlobContainerClient(connectionString, "sample-container");
await containerClient.CreateIfNotExistsAsync();
}
若要使用 Azure 存储客户端库版本 11 在 .NET 客户端中启用 TLS 1.2,
static void EnableTls12()
{
// Enable TLS 1.2 before connecting to Azure Storage
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
// Add your connection string here.
string connectionString = "";
// Connect to Azure Storage and create a new container.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("sample-container");
container.CreateIfNotExists();
}
有关详细信息,请参阅 支持 TLS 1.2。
注意
Fiddler 或类似工具可帮助你验证客户端是否使用了指定的 TLS 版本来发送请求。
排查点到站点方案的加密/证书相关问题
点到站点 (P2S) VPN 连接由单个终结点启动,当想要从远程位置连接到 VNet 时非常有用。 当只有少数需要连接到 VNet 的客户端时,点到站点是更好的选择。 P2S 连接不需要 VPN 设备或公用网络或 IP 地址。
P2S VPN 支持安全套接字隧道协议(SSTP)和 IKEv2。 可以通过点到站点连接安全地将运行 Windows、Linux 或 macOS 的不同客户端连接到 Azure VNet。
显示点对站点 VPN 连接的
生成证书
生成根证书
首先,获取根证书的公钥(.cer文件)。 创建根证书后,导出公共证书(而不是私钥)。 然后将此文件上传到 Azure。 根证书充当 Azure 的受信任源,用于通过 P2S 连接到虚拟网络。 可通过两种方法生成根证书、企业证书或自签名证书。 若要创建自签名根证书,请考虑以下步骤:
打开 Windows PowerShell 控制台。
以下示例创建名为“P2SRootCert”的自签名根证书,该证书自动安装在“Certificates-Current User\Personal\Certificates”。 可以通过打开 certmgr.msc或 管理用户证书来查看证书。
可以修改并运行以下命令:
$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature ` -Subject "CN=P2SRootCert" -KeyExportPolicy Exportable ` -HashAlgorithm sha256 -KeyLength 2048 ` -CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign
让 PowerShell 控制台保持打开状态,并继续执行后续步骤以生成客户端证书。
生成客户端证书
客户端证书会自动安装在从自签名根证书生成的计算机上。 若要在另一台客户端计算机上安装客户端证书,需要将其导出为 .pfx 文件以及整个证书链。 .pfx 文件将包含客户端身份验证所需的根证书信息。 有两种方法可以创建客户端证书、企业证书或自签名根证书。
建议为每个客户端生成唯一证书,而不是使用相同的证书。 这是因为,如果要吊销特定客户端证书,则无需为每个使用同一证书的客户端生成并安装一个新证书。 若要生成客户端证书,请考虑以下步骤:
如果 PowerShell 控制台会话仍处于打开状态,请使用以下示例:
New-SelfSignedCertificate -Type Custom -DnsName P2SChildCert -KeySpec Signature ` -Subject "CN=P2SChildCert" -KeyExportPolicy Exportable ` -HashAlgorithm sha256 -KeyLength 2048 ` -CertStoreLocation "Cert:\CurrentUser\My" ` -Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
如果是新的 PowerShell 控制台会话,请考虑以下步骤:
- 标识计算机上安装的自签名根证书。 此 cmdlet 返回计算机上安装的证书列表。
Get-ChildItem -Path "Cert:\CurrentUser\My"
从返回的列表中找到主题名称,然后将其旁边的指印复制到文本文件。 在本例中,“P2SRootCert”。
Thumbprint Subject ---------- ------- 7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655 CN=P2SRootCert
使用上一步中的指纹声明根证书的变量。
$cert = Get-ChildItem -Path "Cert:\CurrentUser\My\<THUMBPRINT>"
将 THUMBPRINT 替换为要从中生成子证书的根证书的指纹。
$cert = Get-ChildItem -Path "Cert:\CurrentUser\My\7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655"
在此示例中,将生成名为“P2SChildCert”的客户端证书。 生成的客户端证书会自动安装在计算机上的“Certificates - Current User\Personal\Certificates” 中。
可以修改并运行以下命令以生成客户端证书:
New-SelfSignedCertificate -Type Custom -DnsName P2SChildCert -KeySpec Signature `
-Subject "CN=P2SChildCert" -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" `
-Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
若要了解如何导出根证书和客户端证书,请参阅 为用户 VPN 连接生成和导出证书。
若要使用 Azure 证书配置点到站点连接,需要:
添加 VPN 客户端地址池。
指定隧道类型和身份验证类型。
上传根证书公钥信息。
安装导出的客户端证书。
配置 VPN 客户端的设置。
连接到 Azure。
有关使用 Azure 证书配置点到站点连接的详细步骤,请参阅 通过 P2S VPN & 证书身份验证连接到 VNet:Azure VPN 网关门户。
若要验证您的 VPN 连接是否处于活动状态(Windows 客户端),请打开具有管理员权限的命令提示符,并运行 ipconfig/all。
若要连接到虚拟机(Windows 客户端):
找到专用 IP 地址。
验证是否已连接到 VNet。
通过在任务栏上的搜索框中键入“RDP”或“远程桌面连接”打开远程桌面连接,然后选择 远程桌面连接。 还可以使用 PowerShell 中的“mstsc”命令打开远程桌面连接。
在远程桌面连接中,输入 VM 的专用 IP 地址。 选择 “显示选项” 以调整其他设置,然后连接。
排查连接问题
如果在通过 VPN 连接连接到虚拟机时遇到问题,请阅读以下内容:
检查 VPN 连接是否成功。
请确保你正在连接到你的 VM 的专用 IP 地址。
如果可以使用专用 IP 地址连接到 VM,但不能连接到计算机名称,请检查 DNS 配置。
有关 RDP 连接的详细信息,请参阅 排查与 VM的远程桌面连接问题。
验证在为 VNet 指定 DNS 服务器 IP 地址后是否生成了 VPN 客户端配置包。 如果更新了 DNS 服务器 IP 地址,请生成并安装新的 VPN 客户端配置包。
确保没有重叠的地址空间。 例如,如果 IP 地址位于要连接到的 VNet 的地址范围内,或者位于 VPNClientAddressPool 的地址范围内。 使用“ipconfig”检查分配给要连接的计算机上的以太网适配器的 IPv4 地址。
若要添加受信任的根证书,请参阅 上传受信任的根证书。
若要删除受信任的根证书,请执行以下步骤:
转到虚拟网络网关的点对站点配置页面。
在页面的根证书部分中,找到要删除的证书。
选择证书旁边的省略号,然后选择 删除。
吊销客户端证书
撤销客户端证书不同于删除受信任的根证书。 从 Azure 中删除受信任的根证书.cer文件会撤销根证书生成/验证的所有客户端证书。 撤销客户端证书后,与同一根证书关联的其他证书仍然可以正常使用。
若要吊销客户端证书,请将指纹添加到吊销列表。
检索客户端证书指纹。 请参阅 如何检索证书的指纹。
将信息复制到文本编辑器并删除所有空格,使其为连续字符串。
前往虚拟网络网关的点到站点配置页面。 这是用于上传受信任根证书的同一页。
在 吊销证书 部分中,输入证书的友好名称。
将指纹字符串复制并粘贴到 指纹 字段。
指纹会验证并自动添加到吊销列表中。 此时会显示一条消息,屏幕上显示列表正在更新。
更新完成后,证书不再可用于连接。 尝试使用此证书进行连接的客户端会收到一条消息,指出证书不再有效。
排查与安全端点的连接问题
Azure 专用终结点是一个网络接口,它使用虚拟网络中的专用 IP 地址,并安全地将你连接到专用链接服务。
以下是与专用终结点相关的连接场景:
来自同一区域的虚拟网络。
区域互联对等的虚拟网络。
全局对等互连的虚拟网络。
客户的本地设备通过 VPN 或 Azure ExpressRoute 线路连接。
诊断连接问题
以下步骤将指导你确保所有必需的配置都已到位,以解决专用终结点设置的连接问题。 有关详细步骤,请参阅 诊断连接问题。
通过浏览资源来查看专用终结点配置。
使用 Azure Monitor 查看数据是否正在流动。
请使用 Azure 网络观察程序中的 VM 连接故障排除功能。
测试结果中的 DNS 解析必须具有与专用终结点相同的专用 IP 地址。
源虚拟机应该在 NIC 的有效路由中,将到专用终结点 IP 的路由的下一跃点设置为 InterfaceEndpoints。
如果连接已验证结果,则连接问题可能与应用程序层上的机密、令牌和密码等其他方面相关。
在提出支持票证之前缩小范围。
如果专用终结点链接到与负载均衡器关联的专用链接服务,请检查后端池是否运行正常。 修复负载均衡器运行状况将解决连接到专用终结点时的问题。
如果问题未解决,并且连接问题仍然存在,请联系 Azure 支持团队。
排查站点到站点方案的加密/证书相关问题
VPN 网关的 IPsec 和 IKE 策略参数
IPsec 和 IKE 协议标准支持各种组合中的各种加密算法。 本文 IPsec/IKE 参数 介绍了 Azure Stack Hub 中支持哪些参数来满足合规性或安全要求。
使用这些策略时,请注意以下重要注意事项:
IPsec/IKE 策略仅适用于标准网关和 HighPerformance(基于路由的)网关 SKU。
只能为给定连接指定一个策略组合。
必须为 IKE(主模式)和 IPsec(快速模式)指定所有算法和参数。 不允许使用部分策略规范。
请与 VPN 设备供应商规范核实本地 VPN 设备上是否支持该策略。
以下步骤演示如何创建和配置 IPsec/IKE 策略,并将其应用于新的或现有的连接。 有关详细分步说明,请按照 步骤为 Azure Stack Hub中的站点到站点 (S2S) VPN 连接配置 IPsec/IKE 策略。
创建和设置 IPsec/IKE 策略。
使用 IPsec/IKE 策略创建新的站点到站点 VPN 连接:
步骤 1 - 创建虚拟网络、VPN 网关和本地网络网关。
步骤 2 - 使用 IPsec/IKE 策略创建站点到站点 VPN 连接。
更新连接的 IPsec/IKE 策略。