点击上方蓝字关注“汪宇杰博客”
导语
开发或运维过网站的朋友总免不了遇到不怀好意的访客。互联网上有许多全自动黑客工具及脚本,可以扫描你的网站是否有已知安全漏洞,并全自动发起攻击,企图夺取服务器控制权。尽管我们可以在编写网站程序的时候尽量做到符合安全标准,但难免会有疏忽的时候。因此企业常常采购网站应用防火墙(WAF),部署在网站入口,来拦截常见的攻击行为。微软的有钱人专用云 Azure 上也有成熟的 WAF 服务,可以让我们点点鼠标就配完防火墙,远离奋斗。
Azure WAF 简介
Azure Web 应用程序防火墙(WAF)是原生的托管服务,可为您的 Web 应用程序提供保护,使其免受常见漏洞和漏洞的影响。Web 应用程序越来越成为各种类型的攻击的目标,例如恶意机器人、SQL 注入攻击和跨站脚本攻击,这些攻击可能导致网站站点破坏,敏感数据泄露和应用程序宕机。防止应用程序代码中的此类攻击具有难度,并且可能需要在应用程序拓扑的多层进行严格的维护,修补和监视。集中式Web应用程序防火墙有助于简化安全管理,并更好地确保应用程序管理员免受威胁或入侵。此外,WAF解决方案可以通过在中心位置修补已知漏洞而不是保护每个单独的Web应用程序来更快地响应安全威胁。
为什么要用 Azure 的 WAF
因为贵的东西除了贵,没有别的问题。
图 | 安全牛《战五渣?四大云WAF实战测试险遭团灭》
https://mp.weixin.qq.com/s/cIzT5SKX7EV-13zQlltcyQ
创建 Azure WAF
在 Azure Portal 里点击 Create a resource,搜索 "WAF",选择 "Web Application Firewall",点击 Create。
Azure WAF 可以整合到 Front Door, Application Gateway 及 Azure CDN 中。其中的 Front Door 我曾经写过几篇文章介绍(见文末),最为熟悉,所以以此为例,Policy for 里选择 "Front Door"。Policy name 可以任意指定。
Mode 设置为 Prevention,即拦截模式,可以阻止被识别的攻击。而 Detection 模式只会记录日志,并放行攻击行为,假装没看见。
Block response body 的内容可以留空,也可以设置为给黑客的问候语,当攻击行为被拦截的时候就会显示在黑客的屏幕上,气死他/她/它。
Managed rules 中列出了微软提供的几款常用防火墙规则,可以勾选你需要的。其中涵盖了常见的 SQL 注入、XSS、Windows, Linux 远程命令执行、PHP注入、恶意机器人等等非常全面的攻击行为规则。试想一下,如果没有 WAF,要程序员手写代码全面防御这些攻击,要修多少福报?而用了 Azure,只要点点鼠标就配完了,下班时候天还亮着。
Custom rules 允许我们设置微软不提供的自定义防火墙规则。我们在稍后会介绍,此处先跳过。这些规则以及 Managed rules 都可以在创建完 WAF 后更改。
由于这个 WAF 策略在第一步里设置为了 Front Door,因此我们需要关联 Front Door 中的域名。至于 Front Door 是什么,怎么玩,可以参考我之前的文章。
《未雨绸缪 | 一文简介 Azure Front Door》
《解决 Azure AD 在 Azure Front Door 下登录失败的问题》
《使用 Azure Front Door 配置网站URL重定向》
最后点击 Review + Create,完成 WAF 创建。如果成功关联了 Front Door,那么等待5分钟左右,WAF 即生效。
使用自定义规则
Azure WAF 允许用户非常灵活地自定义防火墙规则。例如,我的博客并不是 PHP 写的,所以请求 .php 的往往是黑客扫描工具。我想屏蔽 .php 的请求。那么我可以添加一个自定义规则,查找 URL 为 .php 结尾的请求,并阻止掉。
至于所谓黑客的扫描工具,并不是我瞎编的,可以给大家看个实际案例。我的博客运营11年间,经常被黑客工具扫描,而用了 Azure 以后,Application Insight 就能监测到这种短时间大量 404 请求的情况:
可以发现这段时间的 failure 几乎都是 404。实际上网站在这段时间内可以正常访问,并没有爆炸。
Drill in 进去就能发现这些 404 请求都是黑客工具在尝试常见的 PHP 系统漏洞。
还尝试 SQL 注入,在 URL 最后加个单引号。天哪,这可是我 2003 年初中时候玩剩下的,现在还有……
实际上 Azure WAF 的 managed rules 里已经能够防御大部分这样的扫描,但如果想通过自定义规则来实现,也可以,比如屏蔽所有 .php 的请求。进入 Azure WAF,Custom rules,添加一个自定义规则。
指定一个名称,例如 BlockPHPExtension,将 Rule type 设置为 Match
Condition 为规则触发条件。为了匹配所有以 .php 结尾的请求,我们可以:
Match type: String
Match variable: RequestUri
Operation: is
Operator: Ends with
Transformation: Lowercase
Match values: .php
最后拒绝请求:Deny traffic
保存规则后等5分钟左右,尝试访问 .php 结尾的URL,就是这个效果:
Response Headers 里也能看到本次拦截是 Azure WAF 的功劳。
这个 Custom rules 还支持多种条件组合。例如屏蔽或仅允许某些国家及地区的请求、屏蔽短时间大量请求(Rate limit)、屏蔽大数据量的请求(Size)等等。可以轻松满足各自的需要。
哎,有钱人的云,就是这么简单粗暴,且有效!
汪宇杰博客
Azure | .NET | 微软 MVP
无广告,不卖课,做纯粹的技术公众号
喜欢本篇内容请点个在看