什么是 Azure Front Door 的 AS 编号匹配?

适用于: ✔️ Front Door Premium

Azure Web 应用程序防火墙(WAF)在Azure Front Door上可以将请求与发送请求的客户端的自治系统号(ASN)进行匹配。 ASN标识由单一组织运营的网络,例如互联网服务提供商、托管或云服务提供商、大学或大型企业。

AS 编号匹配可让您在无需维护单个 IP 地址或前缀列表的情况下,允许或阻止来自整个网络的流量。 你可以通过自定义规则将操作符 AsnMatch设置为 来使用它。

由于ASN到组织的分配变化远少于其内部的IP范围,ASN规则通常比基于IP的同类规则更稳定,维护需求更少。

AS编号匹配的工作原理

Azure Front Door 会将客户端的 IP 地址解析给宣布它的自治系统,然后将该 ASN 与你自定义规则中的数值进行比较。 如果ASN与你指定的值匹配,匹配条件会被评估为真,规则的操作就会被执行。

你选择的匹配变量决定了WAF使用的IP地址:

匹配变量 使用的IP地址
RemoteAddr 原始客户端IP地址,取自请求头部 X-Forwarded-For 。
SocketAddr WAF在TCP连接上看到的源IP地址。 如果客户端在代理后面,这就是代理的地址。

这与 地理过滤的区别相同。 当你希望对实际连接到 Azure Front Door 的网络执行操作时,请使用 RemoteAddr;当你希望对上游代理报告的源客户端所在网络执行操作时,请使用 SocketAddr。 SocketAddr 在标头可能受攻击者控制时是更可靠的选择。

配置 AS 编号匹配条件

AS 编号匹配条件采用以下设置。

设置 Value
匹配变量 RemoteAddr 或 SocketAddr
Operator AsnMatch
匹配值 一个或多个 AS 编号,表示为字符串
否定条件 Optional. 将其设置为 true,以匹配除你列出的那些之外的所有 AS 编号。

AS编号为32位值,因此有效的AS编号范围为0到4294967295。 将每个AS编号指定为无 AS 前缀的十进制字符串。 例如,使用 "13335" 而不是 "AS13335"。

示例

阻止特定托管提供商的流量

滥用自动化通常来自少数托管和VPS提供商。 以下规则阻止来自两个AS号码的请求:

{
  "name": "BlockAbusiveHostingProviders",
  "priority": 10,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "SocketAddr",
      "operator": "AsnMatch",
      "negateCondition": false,
      "matchValue": [
        "64496",
        "64500"
      ]
    }
  ],
  "action": "Block"
}

将管理路径限制在合作伙伴网络内

以下规则会阻止任何并非来自获批准合作伙伴网络、发往 /admin 的请求。 这两个条件都必须为真,规则才会匹配,并且 negateCondition 会逆转ASN检查。

{
  "name": "RestrictAdminToPartnerNetwork",
  "priority": 20,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "operator": "Contains",
      "negateCondition": false,
      "matchValue": [
        "/admin"
      ]
    },
    {
      "matchVariable": "SocketAddr",
      "operator": "AsnMatch",
      "negateCondition": true,
      "matchValue": [
        "64496"
      ]
    }
  ],
  "action": "Block"
}

更激进地限制网络流量

你可以将ASN条件与速率限制规则结合起来,对你不完全信任的网络施加更严格的门槛,而不必直接屏蔽它们。 以下规则允许每分钟100个请求来自列出的AS号码,并在窗口剩余时间内阻断剩余的流量。

{
  "name": "RateLimitUntrustedNetworks",
  "priority": 30,
  "ruleType": "RateLimitRule",
  "rateLimitDurationInMinutes": 1,
  "rateLimitThreshold": 100,
  "matchConditions": [
    {
      "matchVariable": "SocketAddr",
      "operator": "AsnMatch",
      "negateCondition": false,
      "matchValue": [
        "64496",
        "64500"
      ]
    }
  ],
  "action": "Block"
}

有关阈值和时间窗口的更多信息,请参见《Azure Front Door 的速率限制是什么?》

挑战来自网络的流量,而不是阻断它

如果一个网络发送的是合法流量和恶意流量的混合,JavaScript 挑战通常比直接封锁更合适:

{
  "name": "ChallengeTrafficFromNetwork",
  "priority": 40,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "SocketAddr",
      "operator": "AsnMatch",
      "negateCondition": false,
      "matchValue": [
        "64496"
      ]
    }
  ],
  "action": "JSChallenge"
}

Considerations

在制定AS数字规则时,请记住以下几点:

  • 不同网络的范围差异极大。 单个ASN可以代表少数服务器或数百万消费者宽带用户。 屏蔽大型消费者ISP会屏蔽大量合法用户。 在采取行动前,先了解网络实际覆盖的内容。
  • 主机服务提供商是最有力的候选者。 到达公共 Web 应用程序的、来自托管、VPS 或云服务 ASN 的流量,比来自消费者 ISP 的流量更可能是自动化流量。 这些网络通常是ASN阻断带来最大价值且风险最小的地方。
  • 有意识地选择匹配变量。 RemoteAddr 依赖于 X-Forwarded-For 标头,而该标头可由客户端设置。 当决策需要基于实际连接的网络时使用 SocketAddr 。
  • 并非每个IP地址都对应AS号码。 无法解析为ASN的客户端IP请求不符合 AsnMatch 条件。 在使用 negateCondition 构建允许列表风格的规则时,请考虑这一点。
  • 从检测模式开始。 使用 Block 操作部署新的 ASN 规则,或者将 WAF 策略设置为检测模式,并在切换到 Log 之前先查看日志。
  • 网络所有权变更。 AS编号会被重新分配,它们宣布的地址空间会随时间变化。 定期查看ASN规则,确认它们是否仍描述你预期的流量。