这篇文章在 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