使用ASM网关对接WAF

ASM网关支持对接WAF,并且可以通过自定义访问日志格式来查看WAF对回源请求添加的Header,更方便线上运维。本文介绍如何使用ASM网关对接WAF,以及如何使用ASM的自定义访问日志能力进行调试。

前提条件

WAF功能介绍

Web应用防火墙(Web Application Firewall,简称WAF)为您的网站或App业务提供一站式安全防护。WAF可以有效识别Web业务流量的恶意特征,在对流量清洗和过滤后,将正常、安全的流量返回给服务器,避免网站服务器被恶意入侵导致性能异常等问题,从而保障网站的业务安全和数据安全。

步骤一:将ASM网关接入WAF

ASM支持四层CLB和CNAME这两种方式接入WAF。两种方式使用场景不同,请根据需求选择。

  • 四层CLB接入(推荐):将ASM网关的CLB接入(原SLB)。这种方式可以直接将网关的所有流量接入WAF。所有到达网关CLB的请求都会执行WAF规则。

  • CNAME接入:将指定域名的请求接入。如果一个ASM网关上有多个域名,并非所有域名都需要WAF防护,可以采用这种方式。

    说明

    CNAME接入需要修改域名的DNS的解析规则。请将您的域名先指向WAF代理,然后WAF再将请求传给ASM网关。

方式一:四层CLB接入

  1. 登录Web应用防火墙控制台,按照您的需求单击购买包年包月开通按量付费,仔细确认地域等配置项后,单击立即购买创建WAF3.0实例。如果您已创建WAF实例,可以使用已有实例。

  2. 在左侧导航栏,选择接入管理。在接入管理页面,选择云产品接入页签,单击CLB(TCP),在右侧区域单击接入

  3. 接入资产-四层CLB面板列表中,找到网关绑定的CLB,单击添加端口。选择ASM网关上的对应端口。端口配置完,单击确定

    本文选择的是HTTP协议的80端口。如果您需要选择HTTPS协议,需要在此处配置HTTPS证书。

    说明

    您可以登录ASM控制台,在网关详情页查看网关对应的CLB实例信息。

  4. 选中启用流量标记。配置三个Header,然后单击确定,完成配置。

    如果请求携带该Header,则可以认为该请求经过了WAF防护。三个Header的内容分别是:自定义Headercustomwaftag:customwaftagvalue客户端真实源IPclientrealip以及客户端真实源端口clientrealport

方式二:CNAME接入

  1. 登录Web应用防火墙控制台,按照您的需求单击购买包年包月开通按量付费,仔细确认地域等配置项后,单击立即购买创建WAF3.0实例。如果您已创建WAF实例,可以使用已有实例。

  2. 在左侧导航栏,选择接入管理,然后在接入管理页面,选择CNAME接入页签,单击接入

  3. 配置监听配置向导,进行相关配置,单击下一步

    中国内地的WAF会校验域名是否备案。请填写有效的域名,避免校验失败。配置示例如下。

    接入域名配置监听

  4. 配置转发配置向导,负载均衡算法选中IP hash服务器地址选中IP,填写ASM网关的公网地址。选中启用流量标记,添加三个Header,其他配置项保持默认,单击提交

    该配置会在通过WAF发往ASM网关的请求中添加对应的三个Header。三个Header的内容分别是:自定义Headercustomwaftag:customwaftagvalue客户端真实源IPclientrealip以及客户端真实源端口clientrealport

    接入域名配置转发

  5. 接入完成配置向导,单击复制CNAME,记录WAF提供的CNAME地址,然后单击完成

    说明

    采用CNAME接入,需要您将此处配置的域名的DNS记录指向WAF提供的CNAME地址。

(可选)步骤二:自定义ASM访问日志格式

经过WAF校验的请求可能会携带一些特殊的Header。例如,步骤一配置转发时在请求中添加了一个自定义Header和两个标识请求源IP、源端口的Header。在将线上应用接入WAF时,如果不能在调用链路的日志中看到这个Header,将会给链路联调造成极大困难。这种情况下,您可以使用ASM可观测能力的自定义访问日志功能。具体操作,请参见自定义数据面访问日志

步骤三:测试是否接入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提供的CNAME地址。

步骤四:查看网关日志中WAF添加的Header值

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择可观测管理中心 > 日志中心

  3. 网关日志标签页的文本框中输入418,单击查询/分析

    您可以看到日志中已经打印出了WAF添加的Header值。日志中心

对接完成之后,您可以登录WAF控制台配置其他更高级的防护能力,保护您的网站不受攻击,更多防护配置信息,请参见图说防护配置。如果您还有其他自定义Header需要全链路观测,请参考步骤二中的方式配置。