如何使用 AWS WAF 阻止不含用户代理标头的 HTTP 请求?

上次更新日期:2020 年 10 月 22 日

我想阻止没有用户代理标头或用户代理标头值为空的 HTTP 请求。如何使用 AWS WAF 或 AWS WAF Classic 阻止这些请求?

简短描述

默认情况下,AWS WAF 筛选器不检查 HTTP 请求是否包含参数。但是,您可以创建包含条件的规则来检查这些参数。

使用 AWS WAF 时,您可以使用以下条件:

使用 AWS WAF Classic 时,您可以使用以下条件:

解决方法

如果您使用 AWS WAF,请选择以下两个选项之一。

方法 1:创建具有正则表达式模式集的规则

首先创建正则表达式模式集:

  1. 打开 AWS WAF 控制台
  2. 在导航窗格中的 AWS WAF 下,选择 Regex pattern sets(正则表达式模式集)
  3. 对于 Region(区域),选择您创建 Web 访问控制列表 (Web ACL) 的区域。
    注意:如果您的 Web ACL 是为 Amazon CloudFront 设置的,请选择 Global(全球)
  4. 选择 Create regex pattern sets(创建正则表达式模式集)
  5. 对于 Regex pattern set name(正则表达式模式集名称),输入 testpattern
  6. 对于 Regular expressions(正则表达式),输入 .+
  7. 选择 Create regex pattern set(创建正则表达式模式集)

将正则表达式模式集添加到您的 Web ACL:

  1. 在导航窗格中的 AWS WAF 下,选择 Web ACL
  2. 对于Region(区域),选择您创建 Web ACL 的区域。
    注意:如果您的 Web ACL 是为 Amazon CloudFront 设置的,请选择 Global(全球)
  3. 选择您的 Web ACL。
  4. 选择 Rules(规则),然后依次选择 Add Rules(添加规则)Add my own rules and rule groups(添加我自己的规则和规则组)
  5. 对于 Name(名称),输入 UA-Rule
  6. 对于 If a request(如果请求),选择 doesn’t match the statement(NOT)(与语句 (NOT) 不匹配)
  7. 对于 Statement(语句),选择 inspect header(检查标头)
  8. 对于 Header field name(标头字段名称),输入 User-Agent(用户代理)
  9. 对于 Match type(匹配类型),选择 Matches pattern from regex pattern set(匹配正则表达式模式集中的模式)
  10. 对于 Regex pattern set (正则表达式模式集),输入 testpattern
  11. 对于 Text transformation(文本转换),保留默认值 None(无)
  12. 对于 Action(操作),保留默认值 Block(阻止)
  13. 选择 Add Rule(添加规则)
  14. 在 Web ACL 中选择规则的优先级。
  15. 选择 Save(保存)

方法 2:创建具有大小约束条件的规则

注意:默认情况下,每个账户的正则表达式模式集数量为 10 个。如果您已超出此 AWS WAF 限制,可以使用以下大小约束解决方法。

  1. 打开 AWS WAF 控制台
  2. 在导航窗格中的 AWS WAF 下,选择 Web ACL
  3. 对于Region(区域),选择您创建 Web ACL 的区域。
    注意:如果您的 Web ACL 是为 Amazon CloudFront 设置的,请选择 Global(全球)
  4. 选择您的 Web ACL。
  5. 选择 Rules(规则),然后依次选择 Add Rules(添加规则)Add my own rules and rule groups(添加我自己的规则和规则组)
  6. 对于 Name(名称),输入 UA-Rule2
  7. 对于 If a request(如果请求),选择 doesn’t match the statement(NOT)(与语句 (NOT) 不匹配)
  8. 对于 Statement(语句),选择 inspect header(检查标头)
  9. 对于 Header field name(标头字段名称),输入 User-Agent(用户代理)
  10. 对于 Match type(匹配类型),选择 Size greater than or equal to(大小大于或等于)
  11. 对于 Size(大小),输入 0(零)。
  12. 对于 Text transformation(文本转换),保留默认值 None(无)
  13. 对于 Action(操作),保留默认值 Block(阻止)
  14. 选择 Add Rule(添加规则)
  15. 在 Web ACL 中选择一个位置以保存规则。
  16. 选择 Save(保存)

注意:请在您的 Web ACL 中使用核心规则集 (CRS)。此 AWS 托管规则集包含一个规则,用于阻止不包含用户代理的请求。请注意,添加 AWS 托管规则时使用 Web ACL 的 WAF 容量单位 (WCU)。

如果您使用 AWS WAF Classic,请选择以下两个选项之一。

方法 1:创建具有正则表达式匹配条件的规则

首先创建正则表达式匹配条件:

  1. 打开 AWS WAF 控制台
  2. 选择 Switch to AWS WAF Classic(切换到 AWS WAF Classic)
  3. 在导航窗格中,选择 String and Regex matching(字符串和正则表达式匹配)
  4. 选择 Create condition(创建条件)
  5. 对于 Name(名称),输入 UA-condition
  6. 对于 Region(区域),选择您创建 Web ACL 的区域。
    注意:如果您的 Web ACL 是为 Amazon CloudFront 设置的,请选择 Global(全球)
  7. 对于 Type(类型),选择 Regex match(正则表达式匹配)
  8. 对于 Part of the request to filter on(要筛选的请求部分),选择 Header(标头)
  9. 对于 Header(标头),选择 User-Agent(用户代理)
  10. 对于 Transformation(转换),选择 None(无)
  11. 对于 Regex patterns to match to request(要匹配请求的正则表达式模式),保留默认选项 Create regex pattern set(创建正则表达式模式集)
  12. 对于 New pattern set name(新模式集名称),输入 testpattern
  13. 输入一个正则表达式 .+  并选择加号 (+) 。
    注意:正则表达式与除了行终止符之外的任何字符匹配。
  14. 选择 Create pattern set and add filter(创建模式集并添加筛选条件)
  15. 选择 Create(创建)

然后创建一条规则并添加条件:

  1. 在导航窗格中,选择 Rules(规则)
  2. 选择 Create rule(创建规则)
  3. 对于 Name(名称),输入 UA-Rule
    注意:Amazon CloudWatch 指标名称将会根据您在“Name”(名称)字段的输入自动填充。
  4. 对于 Rule type(规则类型),选择 Regular rule(常规规则)
  5. 对于 Region(区域),选择您创建 Web ACL 的区域。
    注意:如果您的 Web ACL 是为 CloudFront 设置的,请选择 Global(全球)
  6. 对于 Add conditions(添加条件),选择 does not(不匹配)match at least one of the filters in the string match condition(至少匹配字符串约束条件中的一个筛选条件)
  7. 从条件下拉菜单中选择 UA-condition
  8. 选择 Create(创建)

最后将此规则添加到您的 Web ACL:

  1. 在导航窗格中选择 Web ACL
  2. 选择您的 Web ACL 的名称。
  3. 选择 Rules(规则)选项卡,然后选择 Edit web ACL(编辑 Web ACL)
  4. 对于 Rules(规则),选择 UA-Rule
  5. 选择 Add rule to web ACL(将规则添加到 Web ACL)
  6. 对于 Action(操作),确认已选择 Block(阻止)
  7. 对于 Default action(默认操作),选择 Allow all requests that don't match any rules(允许不匹配任何规则的所有请求)
  8. 选择 Update(更新)

方法 2:创建具有大小约束条件的规则

注意:默认情况下,每个账户的模式集数量为 5 个。如果您已超出此 AWS WAF 限制,可以使用以下大小约束解决方法。

首先,创建大小约束条件:

  1. 打开 AWS WAF 控制台
  2. 单击 Switch to AWS WAF Classic(切换到 AWS WAF Classic)
  3. 在导航窗格中选择 Size constraints(大小约束)
  4. 选择 Create condition(创建条件)
  5. 对于 Name(名称),输入 UA-condition2
  6. 对于 Region(区域),选择您创建 Web ACL 的区域。
    注意:如果您的 Web ACL 是为 CloudFront 设置的,请选择 Global(全球)
  7. 对于 Part of the request to filter on(要筛选的请求部分),选择 Header(标头)
  8. 对于 Header(标头),输入 User-Agent(用户代理)
  9. 对于 Comparison operator(比较运算符),选择 Greater than or equal(大于或等于)
  10. 对于 Size (Bytes)(大小 [字节]),保留默认值 0
  11. 对于 Transformation(转换),选择 None(无)
  12. 选择 Add filter(添加筛选条件)
  13. 选择 Create(创建)

然后创建一条规则并添加条件:

  1. 在导航窗格中,选择 Rules(规则)
  2. 选择 Create rule(创建规则)
  3. 对于 Name(名称),输入 UA-Rule2
    注意:CloudWatch 指标名称将会根据您在“Name”(名称)字段的输入自动填充。
  4. 对于 Rule type(规则类型),选择 Regular rule(常规规则)
  5. 对于 Region(区域),选择您创建 Web ACL 的区域。
    注意:如果您的 Web ACL 是为 CloudFront 设置的,请选择 Global(全球)
  6. 对于 Add conditions(添加条件),选择 does not(不匹配)match at least one of the filters in the size constraint condition(至少匹配大小约束条件中的一个筛选条件)
  7. 从条件下拉菜单中选择 UA-condition2
  8. 选择 Create(创建)

最后将此规则添加到您的 Web ACL:

  1. 在导航窗格中选择 Web ACL
  2. 选择您的 Web ACL 的名称。
  3. 选择 Rules(规则)选项卡,然后选择 Edit web ACL(编辑 Web ACL)
  4. 对于 Rules(规则),选择 UA-Rule
  5. 选择 Add rule to web ACL(将规则添加到 Web ACL)
  6. 对于 Action(操作),确认已选择 Block(阻止)
  7. 对于 Default action(默认操作),选择 Allow all requests that don't match any rules(允许不匹配任何规则的所有请求)
  8. 选择 Update(更新)

这篇文章对您有帮助吗?


您是否需要账单或技术支持?