适用于: ✔️ 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规则,确认它们是否仍描述你预期的流量。