常见问题

ESA遭受大范围攻击怎么办?

  1. 打开WAF配置,将概述页签中的智能限频防护等级调整到严格,执行动作调整为拦截

    image

  2. 进入安全分析页签中,在数据总览部分,查看异常的客户端IP,利用自定义规则拦截这些IP。

    image

    image

  3. 进入安全分析页签中,在概览中查看请求分析的数据。针对异常数据创建WAF自定义规则拦截。例如,在Referer中发现值为-的请求最多,则创建拦截空Referer的请求和Referer-的请求(当请求存在Referer头,但是值为空时,在控制台上会以-展示)。

    image

    image

    image

为什么我ESA中的WAF配置不生效?

检查配置的规则是否正确

规则表达式的正确性直接影响WAF规则的执行效果。请确保以下几点:

  • 匹配字段:确认您使用的匹配字段是否符合预期。例如:

    • URI 包含查询字符串(如 /content?page=1234),而 URI路径 仅包含路径部分(如 /content)。

    • 如果规则中使用了 URI等于/content,但实际请求中带有查询字符串,则规则不会生效。

  • 匹配运算符:检查所选运算符是否适合当前场景(如“等于”、“包含”等)。

  • 匹配值:确保匹配值与实际请求一致。

解决方法:参考匹配字段匹配运算符匹配值文档中的示例,逐一核对规则配置。

检查请求是否命中了白名单规则

IP访问规则和白名单规则的优先级高于其他规则。如果请求命中了IP访问规则的放行策略或白名单规则,则后续的WAF规则将被跳过,从而导致配置看似不生效。排查步骤如下:

  1. 在安全分析模块中,根据筛选条件过滤出异常请求。

  2. 查看采集日志模块中该请求命中的规则信息。

  3. 如果最终执行防护规则的是IP访问规则(最终执行防护动作为放行)或白名单规则,则证明请求因命中放行规则而跳过了其他规则。

    image

解决方法:调整IP访问规则的放行策略和白名单规则,确保其范围不会覆盖需要防护的请求。

检查请求是否绕过ESA直接访问源站

如果攻击请求未经过ESA,而是直接访问源站,WAF规则无法生效。排查步骤如下(以Nginx为例):

  1. 获取请求IP地址

    1. 打开Nginx配置文件(默认路径为 /etc/nginx/nginx.conf),查看 access.log 的格式及位置。

      image

    2. 查看 access.log 文件,提取请求的 $remote_addr 值,$remote_addr 字段表示直接连接到NginxIP地址。

      image

  2. 验证IP来源:

    1. ESA控制台,选择站点管理,在站点列单击目标站点。

    2. 在左侧导航栏,选择安全防护 > 源站防护

    3. 源站防护页面,单击配置

      image

    4. 打开状态开关,在弹出的对话框中勾选我已确认风险。,单击开启

      image

    5. 将日志中获取的IPIPv4列表中的IP(IPv4列表中是IP区段)进行匹配。若匹配上,证明源站的请求是从ESA来的;反之,则证明请求没有经过ESA,而是直接请求的源站。

      image

解决方法:启用源站防护功能,将ESA的节点IP列表配置到源站防火墙规则中,仅允许白名单中的流量访问源站。

如何拦截空Referer请求和不带Referer的请求?

拦截空Referer请求

定义:

“空Referer请求”是指HTTP请求中包含 Referer 字段,但其值为空(即 Referer: "")。这种情况通常由某些浏览器或代理工具导致。安全分析概览页中Referer选项的-就是空Referer请求。

image

解决方法:

通过概述页签提供的“拦截空Referer请求模板”快速创建规则。

image

拦截不带Referer的请求

定义:

“不带Referer的请求”是指HTTP请求中完全不包含 Referer 字段。这种情况可能由攻击者故意构造,也可能因某些客户端(如隐私模式浏览器)默认行为导致。

解决方法:

如果要拦截不存在Referer的请求,可以使用自定义规则。匹配规则填写Referer不存在。

image

匹配规则中的URI、URI路径、URI查询字符串有什么区别?

一个URI 的完整结构可以分为以下几个部分:

scheme:[//host]path[?query][#fragment]
  • scheme: 协议类型,例如 httphttpsftp 等。

  • host: 主机名,例如 www.example.com

  • path: 资源在服务器上的路径,例如 /users/profile

  • query: 查询字符串,用于传递参数,例如 ?id=123&name=John

  • fragment: 片段标识符,用于定位页面中的特定部分,例如 #section1

三者区别如下:

属性

URI

URI路径

URI查询字符串

定义

唯一标识资源的完整字符串

指定资源在服务器上的位置

向服务器传递额外参数的部分

位置

整个 URI

在 host 之后,? 之前

在 ? 之后,# 之前

示例

https://www.example.com/users/profile

/users/profile

?id=123&name=John

如何查看请求被哪个规则拦截了?

  • 在响应拦截界面上,可以看到拦截的规则名称(Denied by xxx)和规则ID(RuleID)。可以通过规则名称确定被哪一种规则拦截,然后再通过拦截页面的规则ID和控制台的规则ID匹配,确定请求被哪个规则拦截。

    image

  • 在安全分析的采样日志中,同样可以看到请求是否被拦截以及拦截规则。例如以下示例,请求被频次控制规则拦截。

    image

如何快速拦截大量的IP

  1. 准备将要拦截的IP/网段,中间采用英文逗号,分割(可以从安全分析页面通过分析获取目标 IP)。

  2. 进入ESA分组控制台,点击新建分组,将准备好的IP填入分组。

    image

  3. 使用自定义规则拦截IP。在创建自定义规则时,匹配项选择客户端IP,匹配逻辑选择在分组中,匹配值选择上一步创建的分组名称。

    image

  4. 点击确定,拦截规则即可创建成功并生效。

配置的规则会在哪个域名生效?

  1. 如果创建的规则中,声明了主机名的匹配规则,则该规则只会对命中主机名规则的域名生效。例如,下面的示例表示只有域名为www.example.comapi.example.com的请求,并且不存在Referer头的请求才会被拦截。

    image

  2. 如果创建的规则中,匹配规则没有声明主机名的匹配规则,则站点下所有的域名的请求只要命中规则上,都会生效。