Azure网站遭Bot持续请求无效URL,返回410仍未停止的解决方案咨询
这种无视410状态码、跨地区发起恶意请求的Bot确实挺头疼的,结合Azure的工具生态,给你几个实用的解决思路:
用Azure WAF精准拦截
既然日志里明确标记了operation_SyntheticSource: Bot,直接在Web Application Firewall里创建自定义拦截规则就行:- 进入你的App Service门户,找到左侧菜单的“Web Application Firewall”(如果没启用,先跟着向导启用)
- 切换到“自定义规则”标签,点击“添加自定义规则”
- 规则类型选“匹配”,匹配条件设置为请求头,字段名填
operation_SyntheticSource,匹配值填Bot,动作直接选“阻止”
另外,你还可以把那些被请求的无效URL(返回410的)整理出规律,比如都是/invalid-path-*这类模式,再添加一条路径匹配规则,直接拦截这类请求,省得服务器还要返回410浪费资源。
限制请求来源地区
从日志看请求集中在新加坡、美国几个州、欧洲几个地区,如果你的网站目标用户根本不在这些区域,或者正常访问占比极低,可以直接通过App Service的网络设置拉黑这些地区:
进入App Service的“网络”→“访问限制”→“添加规则”,规则类型选“拒绝”,然后在“国家/地区”里勾选对应的地区,保存后就能拦截来自这些区域的所有请求。调整响应策略,增加Bot攻击成本
单纯返回410对这类恶意Bot没用,你可以改成返回429 Too Many Requests,同时加上Retry-After头(比如设为3600,告诉Bot1小时后再试)。如果是自定义开发的网站,还可以在代码里记录每个客户端(或者根据请求特征)的无效请求次数,达到阈值就临时封禁IP一段时间,或者直接返回空白响应。启用Azure内置的Bot Management
App Service自带Bot识别管理功能,能自动拦截常见的恶意爬虫:
进入“配置”→“常规设置”,找到“Bot Management”选项,开启后它会基于微软的Bot数据库自动识别并拦截恶意Bot,你也可以在后续的日志里查看拦截情况,再微调规则。先测试再上线,避免误拦截
不管是WAF规则还是访问限制,建议先把动作设为“记录”,观察1-2天的日志,确认规则只命中那些恶意Bot,没有影响正常用户访问后,再改成“阻止”。
内容的提问来源于stack exchange,提问作者Dennis

