跳至内容

如何配置我的 Network Firewall 规则以阻止或允许特定域?

5 分钟阅读
0

我想使用 AWS Network Firewall 筛选来自 Amazon Virtual Private Cloud (Amazon VPC) 中资源的出站 Web 流量。

简短描述

AWS Network Firewall 使用操作顺序或严格评估顺序来支持对出站 Web 流量进行基于域的筛选。要配置规则,请使用有状态域列表规则组或 Suricata 兼容字符串。域检查适用于 HTTP 和 HTTPS 协议。

对于 HTTP,防火墙会检查主机标头。对于 HTTPS,防火墙会在 TLS 握手中使用服务器名称指示 (SNI)。当使用域允许列表时,Network Firewall 仅会将流量发送到指定域,并丢弃所有其他请求。

有关详细信息,请参阅 Suricata compatible rule strings in AWS Network Firewall(AWS Network Firewall 中的 Suricata 兼容规则字符串)Stateful domain list rule groups in AWS Network Firewall(AWS Network Firewall 中的有状态域列表规则组)

解决方法

为使用默认操作顺序的策略配置域列表组

完成以下步骤:

  1. 创建防火墙
  2. Amazon VPC 控制台的导航窗格中,在 Network Firewall 下,选择 Firewall policies(防火墙策略)。
  3. 选择要编辑的默认操作顺序防火墙策略。
  4. Stateful rule groups(有状态规则组)下,选择 Actions(操作),然后选择 Create stateful rule group(创建有状态规则组)。
  5. 对于 Stateful rule group format(有状态规则组格式),选择 Domain list(域列表)。
    **注意:**无法更改有状态规则顺序,因为它继承自策略。Rule order(规则顺序)显示为 Action order(操作顺序)。
  6. 输入唯一的规则组名称。
  7. 对于 Capacity reservation(容量预留),输入要在列表中包含的估计域数。
    **注意:**创建规则组后,无法更改该值。
  8. Domain list(域列表)下的 Domain name source(域名来源)中,输入要匹配的域名。您可以将域定义为完全匹配,例如 abc.example.com。您也可以将其定义为通配符,例如 .example.com
  9. 对于 CIDR ranges(CIDR 范围),选择以下选项之一:
    对于与防火墙存在于同一 VPC 中的源 IP 地址,选择 Default(默认值)。
    对于存在于远程 VPC 中的源 IP 地址,选择 Custom(自定义)。在 Source IP CIDR ranges(源 IP CIDR 范围)下输入要让防火墙检查的源子网。
  10. 对于 Protocols(协议),选择 HTTP and HTTPS(HTTP 和 HTTPS)。
  11. 对于 Action(操作),选择 Allow(允许)。
  12. 选择 Create rule group(创建规则组)。

为使用操作顺序评估的策略定义 Suricata 兼容的 IPS 规则

完成以下步骤:

  1. 创建防火墙
  2. Amazon VPC 控制台的导航窗格中,在 Network Firewall 下,选择 Firewall policies(防火墙策略)。
  3. 选择要编辑的默认操作顺序防火墙策略。
  4. Stateful rule groups(有状态规则组)下,选择 Actions(操作),然后选择 Create stateful rule group(创建有状态规则组)。
  5. 对于 Stateful rule group format(有状态规则组格式),选择 Suricata Compatible rule string(Suricata 兼容规则字符串)。
    **注意:**无法更改有状态规则顺序,因为它继承自策略。Rule order(规则顺序)显示为 Action order(操作顺序)。
  6. 输入唯一的规则组名称。
  7. 对于 Capacity reservation(容量预留),输入要在列表中包含的估计域数。
    **注意:**创建规则组后,无法更改该值。
  8. (可选)定义要在 Suricata 签名中使用的自定义规则变量。
  9. (可选)定义要在 Suricata 签名中使用的 IP 集参考。
  10. Suricata compatible rule string(Suricata 兼容规则字符串)下,输入以下规则:
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;)
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;)
drop http $HOME_NET any -> $EXTERNAL_NET any (http.header_names; content:"|0d 0a|"; startswith; msg:"not matching any HTTP allowlisted FQDNs"; flow:to_server, established; sid:5; rev:1;)
drop tls $HOME_NET any -> $EXTERNAL_NET any (msg:"not matching any TLS allowlisted FQDNs"; flow:to_server, established; sid:6; rev:1;)

**注意:**在上述规则中,请将域替换为您要包含的域。 选择 Create rule group(创建规则组)。

**注意:**域规则通常包含已建立的流关键字,但该关键字可能无法考虑所有流外数据包交换的边缘情况。在使用示例规则列表之前,请测试该规则以验证其是否按预期运行。

为使用严格评估顺序的策略配置域列表规则组

完成以下步骤:

  1. 创建防火墙
  2. Amazon VPC 控制台的导航窗格中,在 Network Firewall 下,选择 Firewall policies(防火墙策略)。
  3. 选择要编辑的严格评估顺序防火墙策略。
  4. Stateful rule groups(有状态规则组)下,选择 Actions(操作),然后选择 Create stateful rule group(创建有状态规则组)。
  5. 对于 Stateful rule group format(有状态规则组格式),选择 Domain list(域列表)。
    **注意:**无法更改有状态规则顺序,因为它继承自策略。Rule order(规则顺序)显示为 Strict(严格)。
  6. 输入唯一的规则组名称。
  7. 对于 Capacity reservation(容量预留),输入要在列表中包含的估计域数。
    **注意:**创建规则组后,无法更改该值。
  8. Domain list(域列表)下的 Domain name source(域名来源)中,输入要匹配的域名。您可以将域定义为完全匹配,例如 abc.example.com。您也可以将其定义为通配符,例如 .example.com
  9. 对于 CIDR ranges(CIDR 范围),选择以下选项之一:
    对于与防火墙存在于同一 VPC 中的源 IP 地址,选择 Default(默认值)。
    对于存在于远程 VPC 中的源 IP 地址,选择 Custom(自定义)。在 Source IP CIDR ranges(源 IP CIDR 范围)下输入要让防火墙检查的源子网。
  10. 对于 Protocols(协议),选择 HTTP and HTTPS(HTTP 和 HTTPS)。
  11. 对于 Action(操作),选择 Allow(允许)。
  12. 选择 Create rule group(创建规则组)。
  13. 在导航窗格的 Network Firewall 下,选择 Firewall policies(防火墙策略)。
  14. 选择您的严格顺序策略。
  15. 对于 Stateful rule evaluation order and default actions(有状态规则评估顺序和默认操作),选择 Edit(编辑)。
  16. 对于 Default actions(默认操作),选择 Drop established(丢弃已建立),然后选择 Save(保存)。

为使用严格评估顺序的策略定义 Suricata 兼容的 IPS 规则

完成以下步骤:

  1. 创建防火墙
  2. Amazon VPC 控制台的导航窗格中,在 Network Firewall 下,选择 Firewall policies(防火墙策略)。
  3. 选择要编辑的严格评估顺序防火墙策略。
  4. Stateful rule groups(有状态规则组)下,选择 Actions(操作),然后选择 Create stateful rule group(创建有状态规则组)。
  5. 对于 Stateful rule group format(有状态规则组格式),选择 Suricata Compatible rule string(Suricata 兼容规则字符串)。
    **注意:**无法更改有状态规则顺序,因为它继承自策略。Rule order(规则顺序)显示为 Strict(严格)。
  6. 输入唯一的规则组名称。
  7. 对于 Capacity reservation(容量预留),输入要在列表中包含的估计域数。
    **注意:**创建规则组后,无法更改该值。
  8. (可选)定义要在您定义的 Suricata 签名中使用的自定义规则变量。
  9. (可选)定义要在您定义的 Suricata 签名中使用的 IP 集参考。
  10. Suricata compatible rule string(Suricata 兼容规则字符串)下,输入以下规则:
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;)
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;)
pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;)

**注意:**在上述规则中,请将域替换为您要包含的域。 选择 Create rule group(创建规则组)。 在导航窗格的 Network Firewall 下,选择 Firewall policies(防火墙策略)。 选择您的严格顺序策略。 对于 Stateful rule evaluation order and default actions(有状态规则评估顺序和默认操作),选择 Edit(编辑)。 对于 Default actions(默认操作),选择 Drop established(丢弃已建立),然后选择 Save(保存)。

**注意:**域规则通常包含已建立的流关键字,但该关键字可能无法捕获所有在正常连接流之外交换数据表的边缘情况。在使用示例规则列表之前,请测试该规则以验证其是否按预期运行。

测试您的配置

要测试您的配置是否有效,请对指定域运行 curl 命令。

以下示例命令用于测试对 https://example.com 的 HTTPS 访问:

curl -v --silent https://example.com --stderr - | grep 200

如果允许访问,则您会收到以下输出:

< HTTP/2 200

以下示例命令用于测试对 http://www.google.com 的 HTTP 访问:

curl -v http://www.google.com

以下示例输出表明防火墙规则正在阻止 HTTP 流量,因为连接在 GET 请求阶段停止:

* Trying 172.253.115.99:80...
* Connected to www.google.com (http://www.google.com/) (172.253.115.99) port 80 (#0)
> GET / HTTP/1.1
> Host: www.google.com (http://www.google.com/)
> User-Agent: curl/7.79.1
> Accept: /

以下示例命令用于测试对 https://www.google.com 的 HTTPS 访问:

curl -v https://www.google.com

输出显示 HTTPS 流量被阻止,因为连接在 TLS 握手期间停止:

* Trying 172.253.115.147:443...
* Connected to www.google.com (https://www.google.com/) (172.253.115.147) port 443 (#0)
* ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1):

相关信息

Firewall policies in Network Firewall(Network Firewall 中的防火墙策略)

Creating a stateful rule group(创建有状态规则组)

Examples of stateful rules for Network Firewall(Network Firewall 的有状态规则示例)

AWS 官方已更新 1 年前