ASM网关支持对接WAF,并且可以通过自定义访问日志格式来查看WAF对回源请求添加的Header,更方便线上运维。本文介绍如何使用ASM网关对接WAF,以及如何使用ASM的自定义访问日志能力进行调试。
前提条件
- 已部署入口网关服务。具体操作,请参见创建入口网关服务。
- 已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
- 已部署httpbin应用,并暴露在网关的80端口。具体操作,请参见部署httpbin应用。
WAF功能介绍
Web应用防火墙(Web Application Firewall,简称WAF)为您的网站或App业务提供一站式安全防护。WAF可以有效识别Web业务流量的恶意特征,在对流量清洗和过滤后,将正常、安全的流量返回给服务器,避免网站服务器被恶意入侵导致性能异常等问题,从而保障网站的业务安全和数据安全。
步骤一:将ASM网关接入WAF
- 四层CLB接入(推荐):将ASM网关的CLB接入(SLB现在改名为CLB)。这种方式可以直接将网关的所有流量接入WAF。所有到达网关CLB的请求都会执行WAF规则。
- CNAME接入:将指定域名的请求接入。如果一个ASM网关上有多个域名,并非所有域名都需要WAF防护,可以采用这种方式。说明 CNAME接入需要修改域名的DNS的解析规则。请将您的域名先指向WAF代理,然后WAF再将请求传给ASM网关。
方式一:四层CLB接入
- 登录Web应用防火墙控制台,按照您的需求单击购买包年包月或开通按量付费,仔细确认地域等配置项后,单击立即购买创建WAF3.0实例。如果您已创建WAF实例,可以使用已有实例。
- 在左侧导航栏,选择接入管理。在接入管理页面,选择云产品接入页签,单击CLB(TCP),在右侧区域单击接入。
- 在接入资产-四层CLB面板列表中,找到网关绑定的SLB,单击添加端口。选择ASM网关上的对应端口。端口配置完,单击确定。
本文选择的是HTTP协议的80端口。如果您需要选择HTTPS协议,需要在此处配置HTTPS证书。
说明 您可以登录ASM控制台,在网关详情页查看网关对应的SLB实例信息。 - 选中启用流量标记。配置三个Header,然后单击确定,完成配置。
如果请求携带该Header,则可以认为该请求经过了WAF防护。三个Header的内容分别是:自定义Headercustomwaftag:customwaftagvalue、客户端真实源IPclientrealip以及客户端真实源端口clientrealport。
方式二:CNAME接入
- 登录Web应用防火墙控制台,按照您的需求单击购买包年包月或开通按量付费,仔细确认地域等配置项后,单击立即购买创建WAF3.0实例。如果您已创建WAF实例,可以使用已有实例。
- 在左侧导航栏,选择接入管理,然后在接入管理页面,选择CNAME接入页签,单击接入。
- 在配置监听配置向导,进行相关配置,单击下一步。
中国内地的WAF会校验域名是否备案。请填写有效的域名,避免校验失败。配置示例如下。
- 在配置转发配置向导,负载均衡算法选中IP hash,服务器地址选中IP,填写ASM网关的公网地址。选中启用流量标记,添加三个Header,其他配置项保持默认,单击提交。
该配置会在通过WAF发往ASM网关的请求中添加对应的三个Header。三个Header的内容分别是:自定义Headercustomwaftag:customwaftagvalue、客户端真实源IPclientrealip以及客户端真实源端口clientrealport。
- 在接入完成配置向导,单击复制CNAME,记录WAF提供的CNAME地址,然后单击完成。说明 采用CNAME接入,需要您将此处配置的域名的DNS记录指向WAF提供的CNAME地址。
(可选)步骤二:自定义ASM访问日志格式
经过WAF校验的请求可能会携带一些特殊的Header。例如,步骤一配置转发时在请求中添加了一个自定义Header和两个标识请求源IP、源端口的Header。在将线上应用接入WAF时,如果不能在调用链路的日志中看到这个Header,将会给链路联调造成极大困难。这种情况下,您可以使用ASM可观测能力的自定义访问日志功能。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在配置信息区域,查看开启访问日志并将其打印到容器标准输出是否开启。
- 如果已开启,请执行下一步。
- 如果未开启,请单击功能设置,选中开启访问日志并将其打印到容器标准输出,然后单击确定。
- 单击开启访问日志并将其打印到容器标准输出右侧的自定义访问日志格式。ASM的自定义访问日志功能支持打印请求中的自定义Header。配置完成后,您可以在网关和Sidecar的日志中看到请求的Header值。如图所示配置。
在访问日志中新增的三个字段分别为client_real_ip:%REQ(clientrealip)%、client_real_ip:%REQ(clientrealip)%以及custom_waf_tag:%REQ(customwaftag)%。
步骤三:测试是否接入WAF成功
方式一:采用四层CLB接入
使用四层CLB接入WAF,直接访问网关的IP地址。在浏览器中输入${ASM网关IP地址}:80/status/418。
预期输出:
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
方式二:采用CNAME接入
使用WAF提供的CNAME地址,执行以下命令,访问httpbin应用的/status/418
路径。
curl -HHost:${WAF处配置的域名} "http://${WAF提供的CNAME地址}/status/418" -v
预期输出:
* Trying x.x.x.x:80...
* Connected to geszcfxxxxxxxxxxxxxxxxxxxxppbeiz.aliyunwaf1.com (x.x.x.x) port 80 (#0)
> GET /status/418 HTTP/1.1
> Host:xxxx
> User-Agent: curl/7.84.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 418 Unknown
< Date: Wed, 22 Feb 2023 05:07:23 GMT
< Content-Length: 135
< Connection: keep-alive
< Set-Cookie: acw_tc=0bc1599a16770424432844282e82xxxxxxxxxxxxxxxxxxx1ad989e7e5245f;path=/;HttpOnly;Max-Age=1800
< server: istio-envoy
< x-more-info: http://tools.ietf.org/html/rfc2324
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 1
<
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
步骤四:查看网关日志中WAF添加的Header值
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在网关日志标签页的文本框中输入418,单击查询/分析。您可以看到日志中已经打印出了WAF添加的Header值。
对接完成之后,您可以登录WAF控制台配置其他更高级的防护能力,保护您的网站不受攻击,更多防护配置信息,请参见图说防护配置。如果您还有其他自定义Header需要全链路观测,请参考步骤二中的方式配置。