这篇文章在 2024年09月27日21:17:41 更新了哦~
最近在用 Front Door加速网站访问,想添加一个这样的规则:只允许 /v1下的路径和特定国家的IP,其他全部禁止。
这其实很简单的!只要创建两条 WAF规则,一个禁止全部优先级低,一个允许特定路径,优先级高。
100优先级的允许规则

看起来一点问题都没有吧,非常简单容易理解
500 优先级阻止规则

也很好理解,阻止全部
没用!
配置下来就是不生效,所有的请求都被阻止了。给阻止规则停用,就全部能访问。
从azure-cli里看下WAF的配置,避免他们前端有bug
{
"rules": [
{
"action": "Allow",
"enabledState": "Enabled",
"groupBy": [],
"matchConditions": [
{
"matchValue": [
"/v1"
],
"matchVariable": "RequestUri",
"negateCondition": false,
"operator": "BeginsWith",
"transforms": []
},
{
"matchValue": [
"CN"
],
"matchVariable": "SocketAddr",
"negateCondition": false,
"operator": "GeoMatch",
"transforms": []
}
],
"name": "Allow",
"priority": 100,
"rateLimitDurationInMinutes": 1,
"rateLimitThreshold": 100,
"ruleType": "MatchRule"
},
{
"action": "Block",
"enabledState": "Enabled",
"groupBy": [],
"matchConditions": [
{
"matchValue": [],
"matchVariable": "RequestUri",
"negateCondition": false,
"operator": "Any",
"transforms": []
}
],
"name": "Deny",
"priority": 500,
"rateLimitDurationInMinutes": 1,
"rateLimitThreshold": 100,
"ruleType": "MatchRule"
}
]
}
从结果来看,完全没问题。给规则从 begins with 改成 contains又可以,但是那也意味着https://cn-test.burn.hair/login?id=v1也会允许,而这不太行

看看 log
没办法了,开 log 试试看吧,不行就联系 Azure Support
先要去 Log Analytics workspaces 里开一个记录日志的奇怪的东西

然后去 Diagnostic settings 里 把这个东西和 Front Door、Workspaces关联起来

然后去log页面运行这样的一个查询,绝了连看日志都得学习查询语法😓
AzureDiagnostics | where ResourceProvider == "MICROSOFT.NETWORK" and Category == "FrontdoorWebApplicationFirewallLog"
然后就能看到 WAF的日志了
什么??
WTF?谁家 requestUri这么写啊 还带端口的,怪不得我配置的 begins with /v1 不好用,但是contains就行……

火速去 WAF 里,改一下规则,给matches value改成完整的路径就好了
https://cn-test.burn.hair:443/v1

😢 问题解决了,开的各种东西可以去 Resource Group 里删除了
「不愧是 Azure,从定价,到文档,到使用,没一个符合直觉」
—— Nova Kowk




