流量过滤规则(包括 WAF 规则) traffic-filter-rules-including-waf-rules

流量过滤器规则可在CDN层阻止或允许请求,这在以下情况下很有用:

  • 在新网站正式启用之前,限制公司内部流量访问特定域。
  • 为了减少受体积DoS攻击的影响,请建立速率限制。
  • 防止已知为恶意的IP地址定位您的页面。

这些流量过滤规则中的大多数,均适用于所有 AEM as a Cloud Service Sites 和 Forms 客户。 作为​标准流量过滤器规则,它们处理请求属性:IP、主机名、路径和用户代理。 标准流量过滤规则包括速率限制规则,用于防范流量激增。

流量过滤器规则的子类别需要“扩展安全性”(以前称为“WAF-DDoS保护”)或“医疗保健的扩展安全性”(以前称为“增强安全性”)许可证。 这些功能强大的规则称为WAF (Web应用程序防火墙)流量过滤器规则(或​WAF规则),可以访问本文稍后介绍的WAF标志

可以通过 Cloud Manager 配置管道将流量过滤规则部署到开发、阶段和生产环境类型。 可以使用调用命令行工具将配置文件部署到快速开发环境(RDE)。

若要快速获得有关此功能的专业知识,请完成教程

NOTE
有关其他CDN流量配置选项(例如编辑请求/响应、声明重定向和代理到非AEM源),请参阅在CDN上配置流量文章。

本文的组织方式 how-organized

本文分为以下几个部分:

  • 流量保护概述:​了解如何保护您抵御恶意流量。
  • 配置规则的建议流程:​大致了解保护您的网站的方法。
  • 设置:​了解如何设置、配置和部署流量过滤器规则,包括高级WAF规则。
  • 规则语法:​了解如何在 cdn.yaml 配置文件中声明流量过滤规则。 其中包括所有 Sites 和 Forms 客户均可使用的流量过滤规则以及 WAF 规则子类别(对于许可该功能的人)。
  • 规则示例:​若要开始,请查看已声明规则的示例。
  • 速率限制规则:​了解如何使用速率限制规则保护您的网站抵御大规模攻击。
  • 流量过滤器规则警报:​将警报配置为在触发规则时收到通知。
  • 源位置的默认流量尖峰警报:​当源位置出现提示DDoS攻击的流量激增时,将收到通知。
  • CDN 日志:​查看哪些声明的规则和 WAF 标志与您的流量相匹配。
  • 仪表板工具:​分析您的 CDN 日志以提出新的流量过滤规则。
  • 推荐的入门规则:​一组入门规则。
  • 教程:​有关该功能的信息,包括如何使用功能板工具声明适当的规则。

流量保护概述 traffic-protection-overview

在当前的数字环境中,恶意流量是一种始终存在的威胁。 Adobe 意识到此类风险的危害性,因此提供若干方法以保护客户应用程序并在发生攻击时减轻其影响。

Adobe Managed CDN 在边缘的网络层(第 3 和第 4 层)承受 DoS 攻击,其中包括洪泛和反射/放大攻击。

Adobe 默认采取措施,以防因规模超预期的突发流量超出特定阈值而导致性能下降。 如果 DoS 攻击影响站点可用性,则提醒 Adobe 的运营团队采取措施以减轻影响。

客户通过在内容投放流的各个层配置规则来采取主动措施来缓解应用程序层攻击(第7层)。

例如,在Apache层,客户配置Dispatcher模块ModSecurity以限制对特定内容的访问。

如本文所述,流量过滤器规则使用Adobe的配置管道部署到Cloud Manager托管的CDN。 超出​标准流量过滤器规则(IP、路径、标头、速率限制),客户许可​WAF规则

建议的流程 suggested-process

以下是高级推荐的端到端过程,用于确定正确的流量过滤器规则:

  1. 配置非生产和生产配置管道,如设置部分中所述。

  2. 已许可​ WAF流量过滤器规则 ​的客户可在Cloud Manager中启用它们。

    note important
    IMPORTANT
    授权WAF规则​ 不会 ​激活它们。 在Cloud Manager的​ 安全性 ​选项卡上选中​ WAF-DDOS保护 ​之前,该功能将一直处于非活动状态。 请参阅创建生产程序编辑程序以启用该功能。
  3. 阅读并完成教程以了解如何使用流量过滤器规则,包括WAF规则(如果已授予许可)。 本教程带领您完成将规则部署到开发环境、模拟恶意流量、下载 CDN 日志并在仪表板工具中分析这些日志的全过程。

  4. 将推荐的初始规则复制到 cdn.yaml,并将配置部署到生产环境,其中部分规则以日志模式运行。

  5. 收集一些流量后,使用仪表板工具分析结果以查看是否有任何匹配。 注意误报,并进行必要的调整,最终在块模式下启用所有起始规则。

  6. 如有必要,可根据对 CDN 日志的分析添加自定义规则,先在开发环境中通过模拟流量进行测试,再在预发布和生产环境中依次以日志模式和拦截模式部署。

  7. 持续监控流量,根据威胁形势的发展而更改规则。

设置 setup

  1. 创建一个文件 cdn.yaml,其中包含一组流量过滤规则,包括 WAF 规则。 例如:

    code language-none
    kind: "CDN"
    version: "1"
    data:
      trafficFilters:
        rules:
        # Block simple path
        - name: block-path
          when:
            allOf:
              - reqProperty: tier
                matches: "author|publish"
              - reqProperty: path
                equals: '/block/me'
          action: block
    

    请参阅 使用配置管道,了解 data 节点上方属性的描述。 kind 属性值应设置为 CDN ,版本应设置为 1

  2. 如果WAF规则已获得许可,您​ 必须 ​在Cloud Manager中启用该功能。 许可WAF规则不会激活它们。 在Cloud Manager的“安全”选项卡上选中​ WAF-DDOS保护 ​之前,该功能将保持不活动状态。

    为新的和现有的程序方案启用该功能,如下所述:

    1. 要在新程序上配置WAF,请在创建生产程序时选中“安全性”选项卡上的​ WAF-DDOS保护 ​复选框。

    2. 要在现有项目上配置WAF,请编辑您的项目。 在​ 安全性 ​选项卡上,选中​ WAF-DDOS保护 ​选项以启用该功能,或取消选中该选项以禁用该功能。 您可以随时更改此设置。

      要确认启用此功能后该功能是否处于​ 活动 ​状态,请在流量流向站点后检查CDN日志。 查找包含rules属性(包含waf属性)的日志条目。 例如:

      "rules": "*waf=*"

      此属性在WAF处于活动状态后显示,甚至是在部署任何WAF规则之前。

  3. 按照配置管道文章中的说明,在 Cloud Manager 中创建配置管道。 管道引用了顶级config文件夹,并将cdn.yaml文件放置在下方的某个位置,请参阅使用配置管道

流量过滤器规则语法 rules-syntax

要匹配诸如IP、用户代理、标头、主机名、地理位置或URL等模式,您可以配置​流量过滤规则

具有医疗保健许可证的扩展安全性或扩展安全性的客户可配置引用WAF标志的​WAF规则

下面是一组流量过滤规则(其中还包括 WAF 规则)的示例。

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: "path-rule"
        when:
          allOf:
            - { reqProperty: path, equals: /block-me }
            - { reqProperty: tier, equals: publish }
        action:
          type: block
      - name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
        when: { reqProperty: path, like: "*" }
        action:
          type: block
          wafFlags: [ SQLI, XSS]

cdn.yaml 文件中的流量过滤规则的格式如下所述。 请参阅后面章节中的一些其他示例,以及有关速率限制规则的单独章节。

属性
大多数流量过滤规则
WAF 流量过滤规则
类型
默认值
描述
name
X
X
string
-
规则名称(长度为 64 个字符,只能包含字母数字和 -)
when
X
X
Condition
-
基本结构为:

{ <getter>: <value>, <predicate>: <value> }

请参阅​ 在CDN上配置流量 ​中的条件结构,了解getter、谓词以及如何组合多个条件。
action
X
X
Action
log
log、allow、block 或 Action 对象。 默认为 log。
rateLimit
X
RateLimit
未定义
速率限制配置。 如果未定义,则禁用速率限制。

以下单独部分描述了 rateLimit 语法及示例。

操作结构 action-structure

action 可以是指定操作(允许、阻止或日志)的字符串,也可以是由操作类型(允许、阻止或日志)和 wafFlags 和/或状态等选项组成的对象。

操作类型

根据下表中的操作类型设定操作的优先级,优先级将进行排序以反映操作的执行顺序:

名称
允许的属性
含义
allow
wafFlags(可选),alert(可选)
如果 wafFlags 不存在,则停止进一步的规则处理并继续提供响应。 如果 wafFlags 存在,则禁用指定的 WAF 保护并继续执行进一步的规则处理。
如果指定了警报,则当规则在 5 分钟内触发 10 次时,将会发送“操作中心”通知。 触发特定规则的警报后,直到第二天(UTC)才会再次触发。
block
status, wafFlags(可选且互斥),alert(可选)
如果 wafFlags 不存在,则绕过所有其他属性来返回 HTTP 错误,错误代码由状态属性定义或默认为 406。 如果 wafFlags 存在,则启用指定的 WAF 保护并继续执行进一步的规则处理。
如果指定了警报,则当规则在 5 分钟内触发 10 次时,将会发送“操作中心”通知。 触发特定规则的警报后,直到第二天(UTC)才会再次触发。
log
wafFlags(可选),alert(可选)
记录规则已触发这一事实,否则对处理不起作用。 wafFlags 不起作用。
如果指定了警报,则当规则在 5 分钟内触发 10 次时,将会发送“操作中心”通知。 触发特定规则的警报后,直到第二天(UTC)才会再次触发。

WAF标记列表 waf-flags-list

许可的WAF流量过滤器规则中使用的wafFlags属性引用了以下内容:

恶意流量

标志 ID
标志名称
描述
攻击
攻击
一组与恶意流量相关的标志集合(SQLI、CMDEXE、XSS 等)。 请参阅推荐的 WAF 规则部分,了解如何有效使用此标志。
来自不良 IP 的攻击
来自不良 IP 的攻击
类似于 ATTACK 标志,但与 BAD-IP 标志进行“逻辑与”运算,只有当请求同时匹配 ATTACK 和 BAD-IP 标志时,才会被标记。 请参阅推荐的 WAF 规则部分,了解如何有效使用此标志。
SQLI
SQL 注入
SQL 注入是指尝试通过执行任意数据库查询来获取应用程序的访问权限或特权信息。
BACKDOOR
后门
后门信号是指尝试确定系统上是否存在公共后门文件的请求。
CMDEXE
命令执行
命令执行是指尝试通过用户输入的任意系统命令来获得控制权限或损坏目标系统。
CMDEXE-NO-BIN
/bin/ 上的命令执行
由于 AEM 架构,提供与 CMDEXE 相同级别的保护,同时禁用 /bin 上的误报。
XSS
跨站点脚本
跨站点脚本是指尝试通过恶意 JavaScript 代码来劫持用户帐户或 Web 浏览会话。
TRAVERSAL
目录遍历
目录遍历是指尝试在整个系统中导航特权文件夹以获取敏感信息。
USERAGENT
攻击工具
攻击工具是指使用自动化软件来找出安全漏洞或尝试利用已发现的漏洞。
LOG4J-JNDI
Log4J JNDI
Log4J JNDI 攻击尝试利用 2.16.0 版之前的 Log4J 版本中存在的 Log4Shell 漏洞
CVE
CVE
标识CVE(常见漏洞和暴露)的标记。 总是与标志 CVE-<CVE Number> 结合在一起。 联系Adobe以了解有关Adobe保护您免受哪些CVE攻击的更多信息。

可疑通信

标志 ID
标志名称
描述
ABNORMALPATH
异常路径
异常路径表示原始路径与规范化路径不同(例如,/foo/./bar 标准化为 /foo/bar
不良 IP
不良 IP
识别来自已知具有恶意的 IP 地址的请求,这些地址可能已被列入 SANSTORNODE 等数据集,或基于 WAF 先前对恶意行为的检测结果
BHH
错误跳头
错误跳头是指尝试通过格式错误的 Transfer-Encoding (TE) 或 Content-Length (CL) 头或格式良好的 TE 和 CL 头进行 HTTP 走私
CODEINJECTION
代码注入
代码注入是指尝试通过用户输入的任意应用程序代码命令来获得控制权限或损坏目标系统。
COMPRESSED
检测到压缩
POST 请求正文被压缩,无法检查。 例如,如果指定了 Content-Encoding: gzip 请求头,并且 POST 正文不是纯文本。
RESPONSESPLIT
HTTP 响应拆分
标识何时将 CRLF 字符作为输入提交给应用程序以将标头注入 HTTP 响应
NOTUTF8
无效编码
无效编码可能会促使服务器将请求中的恶意字符转换为响应,从而导致拒绝服务或 XSS
MALFORMED-DATA
请求正文中的格式错误的数据
根据“Content-Type”请求头,格式错误的 POST、PUT 或 PATCH 请求正文。 例如,如果指定了“Content-Type: application/x-www-form-urlencoded”请求头并包含 POST 正文 json。 这通常是编程错误、自动或恶意请求。 需要代理 3.2 版或更高版本。
SANS
恶意 IP 流量
已报告从事恶意活动的 IP 地址的 SANS Internet Storm Center 列表。
NO-CONTENT-TYPE
缺少“Content-Type”请求头
不具有“Content-Type”请求头的 POST、PUT 或 PATCH 请求。 在此示例中,默认情况下,应用程序服务器应假定“Content-Type: text/plain; charset=us-ascii”。 许多自动和恶意请求可能缺少“内容类型”。
NOUA
无用户代理
表示请求不包含“User-Agent”标头或未设置标头值。
NULLBYTE
空字节
空字节通常不会出现在请求中,并表明请求的格式错误且可能是恶意请求。
OOB 域
带外域
带外域通常用于在渗透测试过程中识别允许网络访问的漏洞。
PRIVATEFILE
私有文件
私有文件是具有机密性的,例如 Apache .htaccess 文件或可能泄露敏感信息的配置文件
SCANNER
扫描程序
标识常用的扫描服务和工具

其他流量

标志 ID
标志名称
描述
DATACENTER
数据中心
标识请求来自已知托管服务提供商。 此类流量通常与实际最终用户无关。
DOUBLEENCODING
双重编码
双重编码检查双重编码 html 字符的规避技术
JSON-ERROR
JSON 编码错误
指定为在“Content-Type”请求头中包含 JSON,但包含 JSON 解析错误的 POST、PUT 或 PATCH 请求正文。 这通常与编程错误或自动或恶意请求有关。
TORNODE
Tor 流量
Tor 是可以隐藏用户身份的软件。 Tor 流量尖峰可能表明攻击者正在试图掩盖其位置。
XML-ERROR
XML 编码错误
指定为在“Content-Type”请求头中包含 XML,但包含 XML 解析错误的 POST、PUT 或 PATCH 请求正文。 这通常与编程错误或自动或恶意请求有关。

注意事项 considerations

  • 在创建两个发生冲突的规则时,允许的规则将始终优先于阻止规则。 例如,如果创建规则以阻止特定路径,创建规则以允许某个特定IP地址,则允许来自被阻止路径上的该IP地址的请求。

  • 如果规则匹配但被阻止,CDN 会提供 406 返回代码。

  • 配置文件不包含密钥,因为有权访问Git存储库的任何人都可以读取它们。

  • 在 Cloud Manager 中定义的 IP 允许列表优先于流量过滤器规则。

  • WAF 规则匹配只显示在 CDN 未命中和通过(而非命中)的 CDN 日志中。

规则示例 examples

下面是一些规则示例。 请参阅速率限制部分以找到速率限制规则的更多示例。

示例 1

此规则可阻止来自 IP192.168.1.1 的请求:

kind: "CDN"
version: "1"
data:
  trafficFilters:
     rules:
       - name: "block-request-from-ip"
         when: { reqProperty: clientIp, equals: "192.168.1.1" }
         action:
           type: block

示例 2

此规则阻止在使用包含Chrome的User-Agent进行发布时访问路径/helloworld的请求:

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: "block-request-from-chrome-on-path-helloworld-for-publish-tier"
        when:
          allOf:
          - { reqProperty: path, equals: /helloworld }
          - { reqProperty: tier, equals: publish }
          - { reqHeader: user-agent, matches: '.*Chrome.*'  }
        action:
          type: block

示例 3

此规则会阻止包含查询参数 foo 的发布请求,但允许来自 IP 192.168.1.1 的每个请求:

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: "block-request-that-contains-query-parameter-foo"
        when:
          allOf:
            - { queryParam: url-param, equals: foo }
            - { reqProperty: tier, equals: publish }
        action:
          type: block
      - name: "allow-all-requests-from-ip"
        when: { reqProperty: clientIp, equals: 192.168.1.1 }
        action:
          type: allow

示例 4

此规则在发布时会阻止对路径 /block-me 的请求,并阻止每个匹配 SQLIXSS 模式的请求。 此示例包含一个WAF流量过滤器规则,该规则引用SQLIXSS WAF标志,因此需要单独的许可证。

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: "path-rule"
        when:
          allOf:
            - { reqProperty: path, equals: /block-me }
            - { reqProperty: tier, equals: publish }
        action:
          type: block
      - name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
        when: { reqProperty: path, like: "*" }
        action:
          type: block
          wafFlags: [ SQLI, XSS]

示例 5

此规则阻止访问 OFAC 国家/地区:

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: block-ofac-countries
        when:
          allOf:
            - reqProperty: tier
              matches: "author|publish"
            - reqProperty: clientCountry
              in:
                - SY
                - BY
                - MM
                - KP
                - IQ
                - CD
                - SD
                - IR
                - LR
                - ZW
                - CU
                - CI
        action: block

费率限制规则

如果流量超过传入请求的特定速率,有时最好根据某个具体的条件阻止流量。 为 rateLimit 属性设置一个值可限制符合规则条件的那些请求的速率。

速率限制规则不能引用 WAF 标志。 所有 Sites 和 Forms 客户均可使用它们。

根据每个 CDN POP 计算得出速率限制。 举例来说,假设蒙特利尔、迈阿密和都柏林的 POP 的流量速率分别为每秒 80、90 和 120 个请求。 并且,速率限制规则设置为 100 的限制。 在这种情况下,只有到达都柏林的流量是有限的。

速率限制根据到达边缘的流量、到达来源的流量或错误的数量进行评估。

rateLimit结构 ratelimit-structure

属性
类型
默认
含义
limit
10 和 10000 之间的整数
必填
为其触发规则的请求速率(每个 CDN POP),以每秒请求数为单位。
window
整数枚举:1、10 或 60
10
计算请求速率的采样时段(以秒为单位)。 计数器的准确性取决于时段的大小(时段越大越准确)。 例如,1 秒时段的准确性预计为 50%,而 60 秒时段的准确性预计为 90%。
penalty
60 和 3600 之间的整数
300(5 分钟)
匹配请求被阻止的时段(以秒为单位)(四舍五入到最接近的分钟)
计数
全部,获取,错误
全部
根据边缘流量(全部)、来源流量(获取)或错误数量(错误)进行评估。
groupBy
array[Getter]
速率限制器计数器由一组请求属性(例如clientIp)聚合。

示例 ratelimiting-examples

示例 1

如果客户端在过去10秒内超过平均请求数/秒(每个CDN POP),该规则会阻止5分钟:

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
    - name: limit-requests-client-ip
      when:
        reqProperty: tier
        matches: "author|publish"
      rateLimit:
        limit: 60
        window: 10
        penalty: 300
        count: all
        groupBy:
          - reqProperty: clientIp
      action: block

示例 2

当 10 秒时间窗口内每秒对来源的平均请求数量(每个 CDN POP)超过 100 个时,将会阻止路径 /重要/资源上的请求 60 秒:

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: rate-limit-example
        when:
          allOf:
            - { reqProperty: path, equals: /critical/resource }
            - { reqProperty: tier, equals: publish }
        action:
          type: block
        rateLimit: { limit: 100, window: 10, penalty: 60, count: fetches }

有关高级方案的其他代码片段,请参阅常见方案的CDN配置片段文章。

CVE规则 cve-rules

如果WAF获得许可,Adobe会自动应用阻止规则来抵御许多已知CVE(常见漏洞和暴露),并且在发现新的CVE后不久便会添加。 客户不会自己配置CVE规则。

如果流量请求与CVE匹配,它将显示在相应的CDN日志条目中。

如果对某个CVE存在疑问,或者您的组织想要禁用某个特定CVE规则,请联系Adobe支持部门。

流量过滤器规则警报 traffic-filter-rules-alerts

可以配置一条规则,如果在 5 分钟内触发十次,则发送“操作中心”通知。 当某些流量模式出现时,此类规则会向您发出警报,以便您采取必要的措施。 触发特定规则的警报后,直到第二天(UTC)才会再次触发。

详细了解操作中心,包括如何设置接收电子邮件所需的通知配置文件。

行动中心通知

警报属性可应用于所有操作类型(允许、阻止、日志)的操作节点。

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: "path-rule"
        when:
          allOf:
            - { reqProperty: path, equals: /block-me }
            - { reqProperty: tier, equals: publish }
        action:
          type: block
          alert: true

源警报中的默认流量尖峰 traffic-spike-at-origin-alert

当来自同一IP地址的高流量点击源时,操作中心电子邮件通知会向您发出警报,建议进行DDoS攻击。

如果达到此阈值,Adobe将阻止来自该IP地址的流量;并采取其他措施保护您的来源,例如配置速率限制流量过滤器规则。 有关引导式演练,请参阅使用流量规则阻止DoS和DDoS攻击

系统默认启用此警报,但您可以使用​ defaultTrafficAlerts ​属性将其禁用,该属性设置为false。 触发警报后,它直到第二天(UTC)才会再次触发。

kind: "CDN"
version: "1"
data:
  trafficFilters:
   defaultTrafficAlerts: false

CDN日志 cdn-logs

通过 AEM as a Cloud Service 可访问 CDN 日志,这些日志对于包括缓存命中率优化以及配置流量筛选规则在内的诸多用例都很有用。 在选择创作和发布服务时,CDN 日志显示在 Cloud Manager 的​ 下载日志 ​对话框中。

CDN日志最多延迟五分钟。

rules 属性描述与什么流量过滤规则匹配,并具有以下模式:

"rules": "match=<matching-customer-named-rules-that-are-matched>,waf=<matching-WAF-rules>,action=<action_type>"

例如:

"rules": "match=Block-Traffic-under-private-folder,Enable-SQL-injection-everywhere,waf="SQLI,SANS",action=block"

这些规则的行为方式如下:

  • 任何匹配规则的客户声明规则名称都列在 match 属性中。
  • action 属性决定规则是否阻止、允许或记录。
  • 如果 WAF 已获得许可并启用,则 waf 属性会列出检测到的任何 WAF 标志(例如,SQLI)。 无论WAF标记是否列在任何规则中,此行为均属实。 此日志记录可为insight提供要声明的潜在新规则。
  • 如果没有客户声明的规则匹配并且没有 waf 规则匹配,则 rules 属性为空。

如前所述,WAF 规则匹配只会显示在 CDN 未命中和通过(而非命中)的 CDN 日志中。

下面的示例展示一个示例 cdn.yaml 和两个 CDN 日志条目:

kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
      - name: "path-rule"
        when: { reqProperty: path, equals: /block-me }
        action: block
      - name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
        when: { reqProperty: path, like: "*" }
        action:
          type: block
          wafFlags: [ SQLI, XSS ]
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"rid": "974e67f6",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"host": "example.com",
"url": "/block-me",
"method": "GET",
"res_ctype": "",
"cache": "PASS",
"status": 406,
"res_age": 0,
"pop": "PAR",
"rules": "match=path-rule,action=blocked"
}
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"rid": "974e67f6",
"host": "example.com",
"url": "/?sqli=%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20fAPK",
"method": "GET",
"res_ctype": "image/png",
"cache": "PASS",
"status": 406,
"res_age": 0,
"pop": "PAR",
"rules": "match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked"
}

日志格式 cdn-log-format

以下是 CDN 日志中使用的字段名称列表以及简要说明。

字段名
描述
timestamp
TLS 终止后请求开始的时间。
ttfb
首字节时间​的缩写。 从请求开始到响应正文开始流式传输之前的时间间隔。
cli_ip
客户端 IP 地址。
cli_country
客户国家/地区的两字母 ISO 3166-1 alpha-2 国家/地区代码。
rid
用于唯一标识请求的请求头的值。
req_ua
负责发出给定 HTTP 请求的用户代理。
host
请求所针对的颁发机构。
url
完整路径,包括查询参数。
method
客户端发送的 HTTP 方法,例如“GET”或“POST”。
res_ctype
用于指示资源的原始媒体类型的 Content-Type。
cache
缓存的状态。 可能的值为 HIT、MISS 或 PASS
status
整数值形式的 HTTP 状态代码。
res_age
响应已缓存(在所有节点中)的时间量(以秒为单位)。
pop
CDN 缓存服务器的数据中心。
rules
任何匹配的规则的名称。

还指示匹配是否产生块。

例如,“match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked

如果没有匹配的规则,则为空。

功能板工具 dashboard-tooling

Adobe 提供一种机制,它将仪表板工具下载到您的计算机上以摄取通过 Cloud Manager 下载的 CDN 日志。 要分析流量并帮助确定要声明的相应流量过滤器规则(包括WAF规则),请使用此工具。

可直接从 AEMCS-CDN-Log-Analysis-Tooling GitHub 存储库克隆仪表板工具。

我们提供了教程,其中包含关于如何使用仪表板工具的详细操作说明。

Adobe 建议从以下流量过滤规则入手,并根据实际情况逐步优化调整。 标准规则​可用于Sites或Forms许可证,而​ WAF规则 ​需要“扩展安全性”(以前称为WAF-DDoS保护)或“医疗保健的扩展安全性”(以前称为“增强安全性”)许可证。

请从以下规则开始:

  1. 速率限制(日志模式):
    • 当来自某个 IP 的流量超过速率限制时记录日志。 验证未收到警报后,更改为阻止模式;如果收到警报,则表示限制值太低。
  2. 特定国家(拦截模式):
    • 拦截来自特定国家的流量(可根据您的业务需求修改国家代码)
kind: "CDN"
version: "1"
data:
  trafficFilters:
    rules:
    #  Block client for 5m when it exceeds an average of 100 req/sec to origin on a time window of 10sec
    - name: limit-origin-requests-client-ip
      when:
        reqProperty: tier
        equals: 'publish'
      rateLimit:
        limit: 100
        window: 10
        count: fetches
        penalty: 300
        groupBy:
          - reqProperty: clientIp
      action: log
    #  Block client for 5m when it exceeds an average of 500 req/sec on a time window of 10sec
    - name: limit-requests-client-ip
      when:
        reqProperty: tier
        equals: 'publish'
      rateLimit:
        limit: 500
        window: 10
        count: all
        penalty: 300
        groupBy:
          - reqProperty: clientIp
      action: log
      alert: true
    # Block requests coming from OFAC countries
    - name: ofac-countries
      when:
        allOf:
          - { reqProperty: tier, in: ["author", "publish"] }
          - reqProperty: clientCountry
            in:
              - SY
              - BY
              - MM
              - KP
              - IQ
              - CD
              - SD
              - IR
              - LR
              - ZW
              - CU
              - CI
      action: block

将以下规则添加至您现有的配置中:

  1. ATTACK-FROM-BAD-IP 标志(拦截模式):

    • 立即拦截同时满足以下两个条件的流量:匹配可疑模式(包括 WAF 标志列表中的多项规则),且来源于已知具有恶意的 IP 地址。
    • ATTACK-FROM-BAD-IP标志同时满足两个条件(模式匹配和已知的恶意IP),从而最大程度地降低误报的风险。 因此,您可以在阻止模式下安全立即应用此规则。
  2. ATTACK 标志(日志模式):

    • 初期仅记录(而非拦截)匹配可疑模式但非来自已知具有恶意的 IP 地址的流量。 采用先记录但不拦截的审慎策略,有助于避免误拦合法流量(误报)。
    • 要验证是否未正确标记合法请求,请在部署此规则后分析CDN日志。 一旦确认不会影响合法流量,即可将规则切换为拦截模式。
NOTE
经验表明,与ATTACK标志相关的误报很少。 因此,一种实用的策略是立即阻止所有可疑流量,并使用CDN日志分析来识别和引入允许规则来允许合法流量。 每个组织都评估自己的风险承受能力,权衡加强保护的好处以及无意中阻止合法请求的风险。
    # blocks likely attack traffic, which also comes from suspected IPs
    - name: attacks-from-bad-ips-globally
      when:
        reqProperty: tier
        in: ["author", "publish"]
      action:
        type: block
        wafFlags:
          - ATTACK-FROM-BAD-IP
    # log likely attack traffic, and later switch to block mode if false positives aren't observed
    - name: attacks-from-any-ips-globally
      when:
        reqProperty: tier
        in: ["author", "publish"]
      action:
        type: log
        wafFlags:
          - ATTACK

传统推荐 WAF 规则 previous-waf-starter-rules

在 2025 年 7 月之前,Adobe 推荐使用以下 WAF 规则,这些规则仍然有效,能够抵御恶意流量攻击。 请参阅教程,了解迁移至新推荐规则时需注意的事项。

展开以查看传统推荐的 WAF 规则。
code language-none
    # Enable recommended WAF protections (only works if WAF is licensed enabled for your environment)
    - name: block-waf-flags-globally
      when:
        reqProperty: tier
        in: ["author", "publish"]
      action:
        type: log
        wafFlags:
          - TRAVERSAL
          - CMDEXE-NO-BIN
          - XSS
          - LOG4J-JNDI
          - BACKDOOR
          - USERAGENT
          - SQLI
          - SANS
          - TORNODE
          - NOUA
          - SCANNER
          - PRIVATEFILE
          - NULLBYTE

教程 tutorial

若要获得有关流量过滤器规则(包括WAF规则)的实用知识和经验,请完成系列教程

教程内容包括:

  • 标准和WAF流量过滤器规则的概述。
  • 要阻止攻击(包括拒绝服务(DoS)),请配置推荐的标准和WAF流量过滤器规则。
  • 使用Cloud Manager配置管道部署规则。
  • 使用工具测试规则以模拟恶意流量。
  • 使用日志分析工具分析结果。
  • 最佳实践。
recommendation-more-help
experience-manager-cloud-service-help-main-toc