如何将 Amazon WAF 与 Amazon Global Accelerator 配合使用,以便阻止第 7 层 HTTP 方法和标头访问我的应用程序?

2 分钟阅读
0

通过将支持 Amazon WAF 的应用程序负载均衡器和 Amazon Global Accelerator 配合使用,如果请求方法为 POST 或者 user-agent 标头值与 curl/7.79 匹配,我想阻止对我应用程序的请求。

简短描述

您可以将 Amazon WAF 与应用程序负载均衡器和 Global Accelerator 配合使用,以便阻止对第 7 层 HTTP 方法和标头的访问。在此架构中,Amazon WAF 会将 Web 访问控制列表 (Web ACL, Web Access Control List) 规则与应用程序负载均衡器配合使用。负载均衡器将变成 Global Accelerator 的端点。
**注意:**Amazon Global Accelerator 本身不支持 Amazon WAF。

与负载均衡器关联的 Web ACL 规则会评估传入流量,并且只会将符合规则的请求转发给端点。

解决方法

Web ACL 规则会对发往受保护资源的所有 HTTP(S) Web 请求加以精细控制。使用该规则来配置与一个或多个请求属性匹配的字符串或正则表达式,例如统一资源标识符 (URI, Uniform Resource Identifier)、查询字符串、HTTP 方法或标头键。

先决条件

  • 确保为 Global Accelerator、应用程序负载均衡器和 Amazon WAF 进行了以下流量配置:
    User --> Global Accelerator --> Application Load Balancer with AWS WAF --> EC2 instance
    **注意:**在此设置中,用户通过向加速器发出请求来访问应用程序。加速器会将用户流量路由到应用程序负载均衡器以及与之关联的 Amazon WAF。Amazon WAF 会进行评估,然后阻止或允许具有第 7 层 HTTP 方法或 user-agent 标头值的用户请求。

创建基于规则的 Web ACL

使用以下 3 步过程创建基于规则的 Web ACL。有关详细信息,请参阅创建 Web ACL

创建 Web ACL

  1. 导航到 Amazon WAF 控制台以创建 Web ACL。
  2. 选择创建 Web ACL
  3. 为 Web ACL 命名。选择应用程序负载均衡器的区域。
  4. 将应用程序负载均衡器与 Web ACL 关联。
  5. 选择下一步

向 Web ACL 添加自定义规则

继续按如下步骤进行配置:

  1. 选择添加规则。从下拉列表中选择添加我自己的规则和规则组
  2. 规则生成器下,添加规则。
  3. 为规则命名(例如,deny_User-Agent_with_POST)。
  4. 类型下,选择常规规则

为规则配置匹配条件

完成其余步骤:

  1. 选择至少匹配其中一个语句 (OR)

  2. statement1 下,按如下所示进行填写:
    **检查:**单个标头
    **标头字段名称:**User-Agent
    **匹配类型:**完全匹配字符串
    **要匹配的字符串:**curl/7.79.0

    statement2 下,按如下所示进行填写:
    **检查:**HTTP 方法
    **匹配类型:**完全匹配字符串
    **要匹配的字符串:**POST

  3. 对于“操作”,选择阻止

使用 user-agent 标头值来测试结果

通过 GET 请求方法,使用 Global Accelerator 的 URL 和 user-agent 标头值curl/7.79.0 来访问应用程序。

curl http://<your Global Accelerator URL> -v -H "User-Agent:curl/7.79.0"
> GET / HTTP/1.1
> Host: <your Global Accelerator DNS>
> User-Agent:curl/7.79.0

< HTTP/1.1 403 Forbidden  
< Server: awselb/2.0
<
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>

**注意:**将 <your Global Accelerator URL> 替换为您 Global Accelerator 的 URL。将 <your Global Accelerator DNS> 替换为您的 DNS。

注意,Amazon WAF 阻止了该请求,并且应用程序负载均衡器响应了 403 Forbidden 消息。

使用 POST 请求来测试结果

通过 POST 请求方法,使用 Global Accelerator 的 URL 和 user-agent 标头值 curl/7.79.1 来访问应用程序。

curl -X POST http://<your Global Accelerator URL> --user "test-user:test-password" -v
> POST / HTTP/1.1
> Host: <your Global Accelerator DNS>
> Authorization: Basic dGVzdC11c2VyOnRlc3QtcGFzc3dvcmQ=
> User-Agent: curl/7.79.1
>
< HTTP/1.1 403 Forbidden
< Server: awselb/2.0
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>

**注意:**将 <your Global Accelerator URL> 替换为您 Global Accelerator 的 URL。将 <your Global Accelerator DNS> 替换为您的 DNS。

注意,Amazon WAF 阻止了该请求,并且应用程序负载均衡器响应了 403 Forbidden 消息。

AWS 官方
AWS 官方已更新 1 年前